diff options
author | Paul Phillips <paulp@improving.org> | 2012-07-13 12:08:20 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-07-13 12:08:20 -0700 |
commit | 453b7068ed4294eef18bf10a321a5b63497c7466 (patch) | |
tree | 8cfc64ec934fdf15d7665208a366611ce9474855 /test/files/run/reflect-resolveoverload-expected.scala | |
parent | 724b0dc71f1f8f91b995d01e9e027789f54ecdfe (diff) | |
parent | 3d0099dbc990ab914de5b9deb5087d9d3fb6220c (diff) | |
download | scala-453b7068ed4294eef18bf10a321a5b63497c7466.tar.gz scala-453b7068ed4294eef18bf10a321a5b63497c7466.tar.bz2 scala-453b7068ed4294eef18bf10a321a5b63497c7466.zip |
Merge branch '2.10.x' into topic/name-implicits
Diffstat (limited to 'test/files/run/reflect-resolveoverload-expected.scala')
-rw-r--r-- | test/files/run/reflect-resolveoverload-expected.scala | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/files/run/reflect-resolveoverload-expected.scala b/test/files/run/reflect-resolveoverload-expected.scala new file mode 100644 index 0000000000..1378090309 --- /dev/null +++ b/test/files/run/reflect-resolveoverload-expected.scala @@ -0,0 +1,43 @@ + +class A { + override def equals(x: Any) = { + x.isInstanceOf[A] && !x.isInstanceOf[B] + } +} +class B extends A { + override def equals(x: Any) = { + x.isInstanceOf[B] + } +} + +class C { + def a(x: String) = 1 + def a(x: Array[_]) = "a" + def b(x: String) = new A + def b(x: Array[_]) = new B + def c(x: String) = new B + def c(x: Array[_]) = "a" +} + +object Test extends App { + val cm = reflect.runtime.currentMirror + val u = cm.universe + val c = new C + val im = cm.reflect(c) + def invoke(s: String, expectedType: u.Type, expectedResult: Any) { + val ol = (u.typeOf[C] member u.newTermName(s)).asTermSymbol + val methodSym = ol.resolveOverloaded(posVargs = List(u.typeOf[Null]), expected = expectedType).asMethodSymbol + val sig = methodSym.typeSignature.asInstanceOf[u.MethodType] + val method = im.reflectMethod(methodSym) + assert(method(null) == expectedResult) + } + + invoke("a", u.typeOf[Int], c.a(null): Int) + invoke("a", u.typeOf[String], c.a(null): String) + invoke("b", u.typeOf[B], c.b(null): B) + invoke("c", u.typeOf[A], c.c(null): A) + invoke("c", u.typeOf[A], c.c(null): A) + invoke("c", u.typeOf[B], c.c(null): B) + invoke("c", u.typeOf[String], c.c(null): String) + +} |