diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2012-07-16 23:52:28 +0200 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2012-07-17 00:26:53 +0200 |
commit | 9117cbee2715ce184829a9f5b1b839240083d166 (patch) | |
tree | e7ed7104a26595808b9a8d5ff0d27925fc514974 /test/files/run/reflection-magicsymbols-vanilla.scala | |
parent | 022eed3245db21f5faf06ae6472e585ead137f82 (diff) | |
download | scala-9117cbee2715ce184829a9f5b1b839240083d166.tar.gz scala-9117cbee2715ce184829a9f5b1b839240083d166.tar.bz2 scala-9117cbee2715ce184829a9f5b1b839240083d166.zip |
SI-6086 magic symbols strike back
Some of the symbols inside the compiler get created on the fly,
because there are no physical entities in classfiles corresponding to them.
This curious fact needs to be taken into account when loading symbols,
so that the magic symbols get correctly loaded by reflective mirrors.
magicSymbols (as defined in Definitions.scala) include not only
top-level classes, but some other stuff (e.g. String_+ or methods on Any).
Hence a filtering was done to exclude the stuff that's irrelevant
to reflective symbol loading.
Unfortunately a filter was configured to accept only _.isClass,
which consequently ruled out scala.AnyRef (that is a type alias).
Diffstat (limited to 'test/files/run/reflection-magicsymbols-vanilla.scala')
-rw-r--r-- | test/files/run/reflection-magicsymbols-vanilla.scala | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/files/run/reflection-magicsymbols-vanilla.scala b/test/files/run/reflection-magicsymbols-vanilla.scala new file mode 100644 index 0000000000..32819dcc46 --- /dev/null +++ b/test/files/run/reflection-magicsymbols-vanilla.scala @@ -0,0 +1,20 @@ +class A { + def foo1(x: Int*) = ??? + def foo2(x: => Int) = ??? + def foo3(x: Any) = ??? + def foo4(x: AnyRef) = ??? + def foo5(x: AnyVal) = ??? + def foo6(x: Null) = ??? + def foo7(x: Nothing) = ??? + def foo8(x: Singleton) = ??? +} + +object Test extends App { + import scala.reflect.runtime.universe._ + def test(n: Int): Unit = { + val sig = typeOf[A] member newTermName("foo" + n) typeSignature + val x = sig.asInstanceOf[MethodType].params.head + println(x.typeSignature) + } + for (i <- 1 to 8) test(i) +} |