summaryrefslogtreecommitdiff
path: root/test/files/run/reflect-resolveoverload-variadic.scala
blob: 8e2e15600fb0fbc1c6ed03f67014aacd430aae56 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class C {
  def foo(x: Int*) = 1 + x.sum
  def foo(x: String) = 2
}

object Test extends App {
  val cm = reflect.runtime.currentMirror
  val u = cm.universe
  val c = new C
  val im = cm.reflect(c)
  val foo = u.typeOf[C] member u.newTermName("foo") asTermSymbol
  val f0 = foo.resolveOverloaded()
  val f1 = foo.resolveOverloaded(posVargs = Seq(u.typeOf[Int]))
  val f2 = foo.resolveOverloaded(posVargs = Seq(u.typeOf[Int], u.typeOf[Int]))
  val f3 = foo.resolveOverloaded(posVargs = Seq(u.typeOf[String]))

  val m0 = im.reflectMethod(f0 asMethodSymbol)
  val m1 = im.reflectMethod(f1 asMethodSymbol)
  val m2 = im.reflectMethod(f2 asMethodSymbol)
  val m3 = im.reflectMethod(f3 asMethodSymbol)
  
  assert(m0(Seq()) == c.foo())
  assert(m1(Seq(1)) == c.foo(1))
  assert(m2(Seq(4, 9)) == c.foo(4, 9))
  assert(m3("abc") == c.foo("abc"))
}