blob: e95d1304602e847a46f58871876edeeb62407403 (
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
28
29
30
|
class C {
val foo = 1
def bar = 2
class C { override def toString = "CC" }
object O { override def toString = "CO" }
}
class D {
val foo = 3
def bar = 4
class C { override def toString = "DC" }
object O { override def toString = "DO" }
}
object Test extends App {
import scala.reflect.runtime.universe._
import scala.reflect.runtime.{currentMirror => cm}
val im = cm.reflect(new C)
def test(tpe: Type): Unit = {
def failsafe(action: => Any): Any = try action catch { case ex: Throwable => ex.toString }
println("field: " + failsafe(im.reflectField(tpe.member(newTermName("foo")).asTerm).get))
println("method: " + failsafe(im.reflectMethod(tpe.member(newTermName("bar")).asMethod)()))
println("class: " + failsafe(im.reflectClass(tpe.member(newTypeName("C")).asClass).reflectConstructor(typeOf[C].member(newTypeName("C")).asClass.typeSignature.member(newTermName("<init>")).asMethod)()))
println("object: " + failsafe(im.reflectModule(tpe.member(newTermName("O")).asModule).instance))
}
test(typeOf[C])
test(typeOf[D])
}
|