diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-09-10 01:07:38 -0700 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-09-10 01:07:38 -0700 |
commit | 71dc4c0e162e880048388b2dc82de528d7c9c497 (patch) | |
tree | af96660e70d6968be52951f86281c76455215178 | |
parent | d4e889f9903305291ca4fa0069a768b60c858ac1 (diff) | |
parent | 455354b07da113c19e8007197742db535ee9f88a (diff) | |
download | scala-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.scala | 2 | ||||
-rw-r--r-- | test/files/run/reflect-priv-ctor.check | 1 | ||||
-rw-r--r-- | test/files/run/reflect-priv-ctor.scala | 22 |
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 + } +} + |