diff options
author | amin <amin@epfl.ch> | 2011-11-16 11:31:05 +0000 |
---|---|---|
committer | amin <amin@epfl.ch> | 2011-11-16 11:31:05 +0000 |
commit | e7fc002d333ad2505825a43093703d438412f3e0 (patch) | |
tree | 0a9022acafa2909cb8a6ddb30ab2be08332b95de /test/files/run/reflection-implClass.scala | |
parent | 5f2be94ca487cb35a1613bd2651f93de87d08100 (diff) | |
download | scala-e7fc002d333ad2505825a43093703d438412f3e0.tar.gz scala-e7fc002d333ad2505825a43093703d438412f3e0.tar.bz2 scala-e7fc002d333ad2505825a43093703d438412f3e0.zip |
Fix and re-enable test, that got broken by chan...
Fix and re-enable test, that got broken by changes to reflection API in
rev 26014. Review by odersky.
Diffstat (limited to 'test/files/run/reflection-implClass.scala')
-rw-r--r-- | test/files/run/reflection-implClass.scala | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/files/run/reflection-implClass.scala b/test/files/run/reflection-implClass.scala new file mode 100644 index 0000000000..b91f122a23 --- /dev/null +++ b/test/files/run/reflection-implClass.scala @@ -0,0 +1,38 @@ +/** + * Tries to load a symbol for the `Foo$class` using Scala reflection. + * Since trait implementation classes do not get pickling information + * symbol for them should be created using fallback mechanism + * that exposes Java reflection information dressed up in + * a Scala symbol. + */ +object Test extends App with Outer { + import scala.reflect.mirror + + assert(mirror.classToSymbol(manifest[Foo].erasure).info.declaration(mirror.newTermName("bar")).info == + mirror.classToSymbol(manifest[Bar].erasure).info.declaration(mirror.newTermName("foo")).info) + + val s1 = implClass(manifest[Foo].erasure) + assert(s1 != mirror.NoSymbol) + assert(s1.info != mirror.NoType) + assert(s1.companionModule.info != mirror.NoType) + assert(s1.companionModule.info.declaration(mirror.newTermName("bar")) != mirror.NoSymbol) + val s2 = implClass(manifest[Bar].erasure) + assert(s2 != mirror.NoSymbol) + assert(s2.info != mirror.NoType) + assert(s2.companionModule.info != mirror.NoType) + assert(s2.companionModule.info.declaration(mirror.newTermName("foo")) != mirror.NoSymbol) + def implClass(clazz: Class[_]) = { + val implClass = Class.forName(clazz.getName + "$class") + mirror.classToSymbol(implClass) + } +} + +trait Foo { + def bar = 1 +} + +trait Outer { + trait Bar { + def foo = 1 + } +} |