summaryrefslogtreecommitdiff
path: root/test/files/run
diff options
context:
space:
mode:
authoramin <amin@epfl.ch>2011-11-15 14:33:55 +0000
committeramin <amin@epfl.ch>2011-11-15 14:33:55 +0000
commit3ba3b39b93b9e8412fd4fe0a7d907a842da2e906 (patch)
tree8890e9b32f5ce8ce52fbf5f7a93813410e665e29 /test/files/run
parent85e7755ef6767ebb6733c10a90006a71d97ddc9b (diff)
downloadscala-3ba3b39b93b9e8412fd4fe0a7d907a842da2e906.tar.gz
scala-3ba3b39b93b9e8412fd4fe0a7d907a842da2e906.tar.bz2
scala-3ba3b39b93b9e8412fd4fe0a7d907a842da2e906.zip
Changed reflection to allow getting a Scala Sym...
Changed reflection to allow getting a Scala Symbol for the implementation class of a trait.
Diffstat (limited to 'test/files/run')
-rw-r--r--test/files/run/reflection-implClass.scala32
1 files changed, 26 insertions, 6 deletions
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
+ }
+}