summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Iry <jamesiry@gmail.com>2013-02-01 13:30:46 -0800
committerJames Iry <jamesiry@gmail.com>2013-02-01 13:30:46 -0800
commitcabf626bbc49a897e581fbf6ceaa79ffb191bfec (patch)
treec756516b027e26dd59c53bf8564e0c212af49018
parent9ddcc1b90e10dcb19a2e37ce3074f162d53b1cea (diff)
parent5a2828c149d3c82c215a34e8586639ffea12a903 (diff)
downloadscala-cabf626bbc49a897e581fbf6ceaa79ffb191bfec.tar.gz
scala-cabf626bbc49a897e581fbf6ceaa79ffb191bfec.tar.bz2
scala-cabf626bbc49a897e581fbf6ceaa79ffb191bfec.zip
Merge pull request #1975 from retronym/ticket/6601-revert
Revert "SI-6601 Publicise derived value contstructor after pickler"
-rw-r--r--src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala1
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala2
-rw-r--r--test/files/neg/t6601.check4
-rw-r--r--test/files/neg/t6601/AccessPrivateConstructor_2.scala3
-rw-r--r--test/files/neg/t6601/PrivateConstructor_1.scala1
-rw-r--r--test/files/pos/t6601/PrivateValueClass_1.scala1
-rw-r--r--test/files/pos/t6601/UsePrivateValueClass_2.scala10
7 files changed, 12 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala b/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala
index 589aa43ac2..c7ca239fa9 100644
--- a/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala
+++ b/src/compiler/scala/tools/nsc/transform/ExtensionMethods.scala
@@ -167,6 +167,7 @@ abstract class ExtensionMethods extends Transform with TypingTransformers {
wrap over other value classes anyway.
checkNonCyclic(currentOwner.pos, Set(), currentOwner) */
extensionDefs(currentOwner.companionModule) = new mutable.ListBuffer[Tree]
+ currentOwner.primaryConstructor.makeNotPrivate(NoSymbol)
super.transform(tree)
} else if (currentOwner.isStaticOwner) {
super.transform(tree)
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 65ba8b1303..b9fdd7280e 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -1691,8 +1691,6 @@ abstract class RefChecks extends InfoTransform with scala.reflect.internal.trans
val bridges = addVarargBridges(currentOwner)
checkAllOverrides(currentOwner)
checkAnyValSubclass(currentOwner)
- if (currentOwner.isDerivedValueClass)
- currentOwner.primaryConstructor makeNotPrivate NoSymbol // SI-6601, must be done *after* pickler!
if (bridges.nonEmpty) deriveTemplate(tree)(_ ::: bridges) else tree
case dc@TypeTreeWithDeferredRefCheck() => abort("adapt should have turned dc: TypeTreeWithDeferredRefCheck into tpt: TypeTree, with tpt.original == dc")
diff --git a/test/files/neg/t6601.check b/test/files/neg/t6601.check
deleted file mode 100644
index 1410e1b11a..0000000000
--- a/test/files/neg/t6601.check
+++ /dev/null
@@ -1,4 +0,0 @@
-AccessPrivateConstructor_2.scala:2: error: constructor PrivateConstructor in class PrivateConstructor cannot be accessed in class AccessPrivateConstructor
- new PrivateConstructor("") // Scalac should forbid accessing to the private constructor!
- ^
-one error found
diff --git a/test/files/neg/t6601/AccessPrivateConstructor_2.scala b/test/files/neg/t6601/AccessPrivateConstructor_2.scala
deleted file mode 100644
index 816bc10d79..0000000000
--- a/test/files/neg/t6601/AccessPrivateConstructor_2.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-class AccessPrivateConstructor {
- new PrivateConstructor("") // Scalac should forbid accessing to the private constructor!
-}
diff --git a/test/files/neg/t6601/PrivateConstructor_1.scala b/test/files/neg/t6601/PrivateConstructor_1.scala
deleted file mode 100644
index f09d7ad068..0000000000
--- a/test/files/neg/t6601/PrivateConstructor_1.scala
+++ /dev/null
@@ -1 +0,0 @@
-class PrivateConstructor private(val s: String) extends AnyVal
diff --git a/test/files/pos/t6601/PrivateValueClass_1.scala b/test/files/pos/t6601/PrivateValueClass_1.scala
new file mode 100644
index 0000000000..85c3687137
--- /dev/null
+++ b/test/files/pos/t6601/PrivateValueClass_1.scala
@@ -0,0 +1 @@
+class V private (val a: Any) extends AnyVal \ No newline at end of file
diff --git a/test/files/pos/t6601/UsePrivateValueClass_2.scala b/test/files/pos/t6601/UsePrivateValueClass_2.scala
new file mode 100644
index 0000000000..461b8397b2
--- /dev/null
+++ b/test/files/pos/t6601/UsePrivateValueClass_2.scala
@@ -0,0 +1,10 @@
+object Test {
+ // After the first attempt to make seprately compiled value
+ // classes respect the privacy of constructors, we got:
+ //
+ // exception when typing v.a().==(v.a())/class scala.reflect.internal.Trees$Apply
+ // constructor V in class V cannot be accessed in object Test in file test/files/pos/t6601/UsePrivateValueClass_2.scala
+ // scala.reflect.internal.Types$TypeError: constructor V in class V cannot be accessed in object Test
+ def foo(v: V) = v.a == v.a
+ def bar(v: V) = v == v
+}