summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-09-10 01:07:38 -0700
committerJason Zaugg <jzaugg@gmail.com>2013-09-10 01:07:38 -0700
commit71dc4c0e162e880048388b2dc82de528d7c9c497 (patch)
treeaf96660e70d6968be52951f86281c76455215178
parentd4e889f9903305291ca4fa0069a768b60c858ac1 (diff)
parent455354b07da113c19e8007197742db535ee9f88a (diff)
downloadscala-71dc4c0e162e880048388b2dc82de528d7c9c497.tar.gz
scala-71dc4c0e162e880048388b2dc82de528d7c9c497.tar.bz2
scala-71dc4c0e162e880048388b2dc82de528d7c9c497.zip
Merge pull request #2904 from som-snytt/issue/reflect-priv-ctor
SI-7810 Reflect private constructor
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala2
-rw-r--r--test/files/run/reflect-priv-ctor.check1
-rw-r--r--test/files/run/reflect-priv-ctor.scala22
3 files changed, 24 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index c9a9b74c54..fe5d9c4576 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -1241,7 +1241,7 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni
val effectiveParamClasses =
if (!constr.owner.owner.isStaticOwner) jclazz.getEnclosingClass +: paramClasses
else paramClasses
- jclazz getConstructor (effectiveParamClasses: _*)
+ jclazz getDeclaredConstructor (effectiveParamClasses: _*)
}
private def jArrayClass(elemClazz: jClass[_]): jClass[_] = {
diff --git a/test/files/run/reflect-priv-ctor.check b/test/files/run/reflect-priv-ctor.check
new file mode 100644
index 0000000000..a0fb1943b7
--- /dev/null
+++ b/test/files/run/reflect-priv-ctor.check
@@ -0,0 +1 @@
+privately constructed
diff --git a/test/files/run/reflect-priv-ctor.scala b/test/files/run/reflect-priv-ctor.scala
new file mode 100644
index 0000000000..9cb3e658cd
--- /dev/null
+++ b/test/files/run/reflect-priv-ctor.scala
@@ -0,0 +1,22 @@
+
+import language.postfixOps
+import reflect.runtime._
+import universe._
+
+object Test {
+
+ class Foo private () {
+ override def toString = "privately constructed"
+ }
+
+ def main(args: Array[String]): Unit = {
+
+ //val foo = new Foo // no access
+ val klass = currentMirror reflectClass typeOf[Foo].typeSymbol.asClass
+ val init = typeOf[Foo].members find { case m: MethodSymbol => m.isConstructor case _ => false } get
+ val ctor = klass reflectConstructor init.asMethod
+ val foo = ctor() // no access?
+ Console println foo
+ }
+}
+