diff options
author | clhodapp <clhodapp1@gmail.com> | 2012-07-06 07:04:50 -0500 |
---|---|---|
committer | clhodapp <clhodapp1@gmail.com> | 2012-07-08 19:18:50 -0500 |
commit | 713ce7c5bb01ecf10633193baa66aa7161c68be7 (patch) | |
tree | a95449c52c176c3feaba700eec401bc12c770404 /test/files/run/reflect-resolveoverload-expected.scala | |
parent | f82a1d122cb20dc9924f80ebcc9d31da46bd4f29 (diff) | |
download | scala-713ce7c5bb01ecf10633193baa66aa7161c68be7.tar.gz scala-713ce7c5bb01ecf10633193baa66aa7161c68be7.tar.bz2 scala-713ce7c5bb01ecf10633193baa66aa7161c68be7.zip |
New logic for TermSymbol.resolveOverloaded
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) + +} |