summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authoramin <amin@epfl.ch>2011-11-16 11:31:05 +0000
committeramin <amin@epfl.ch>2011-11-16 11:31:05 +0000
commite7fc002d333ad2505825a43093703d438412f3e0 (patch)
tree0a9022acafa2909cb8a6ddb30ab2be08332b95de /test/files
parent5f2be94ca487cb35a1613bd2651f93de87d08100 (diff)
downloadscala-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')
-rw-r--r--test/files/run/reflection-implClass.scala38
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
+ }
+}