From 3ba3b39b93b9e8412fd4fe0a7d907a842da2e906 Mon Sep 17 00:00:00 2001 From: amin Date: Tue, 15 Nov 2011 14:33:55 +0000 Subject: Changed reflection to allow getting a Scala Sym... Changed reflection to allow getting a Scala Symbol for the implementation class of a trait. --- test/files/run/reflection-implClass.scala | 32 +++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'test/files/run') diff --git a/test/files/run/reflection-implClass.scala b/test/files/run/reflection-implClass.scala index ed5acfc04e..2b9e6f426f 100644 --- a/test/files/run/reflection-implClass.scala +++ b/test/files/run/reflection-implClass.scala @@ -4,15 +4,35 @@ * symbol for them should be created using fallback mechanism * that exposes Java reflection information dressed up in * a Scala symbol. - **/ -object Test extends App { + */ +object Test extends App with Outer { import scala.reflect.mirror - val name = manifest[Foo].erasure.getName + "$class" - val implClass = Class.forName(name) - val symbol = mirror.classToSymbol(implClass) - assert(symbol != mirror.NoSymbol) + + assert(mirror.classToSymbol(manifest[Foo].erasure).info.decl(mirror.newTermName("bar")).info == + mirror.classToSymbol(manifest[Bar].erasure).info.decl(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.decl(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.decl(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 + } +} -- cgit v1.2.3