summaryrefslogtreecommitdiff
path: root/test/files/run/reflection-allmirrors-tostring.scala
blob: f0614e9a9895687f6c9dd87da94556d234dde045 (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import scala.language.higherKinds
import scala.reflect.runtime.universe._

class C {
  val f1 = 2
  var f2 = 3

  def m1 = 4
  def m2() = 5
  def m3[T >: String <: Int]: T = ???
  def m4[A[_], B <: A[Int]](x: A[B])(implicit y: Int) = ???
  def m5(x: => Int, y: Int*): String = ???

  class C
  object M

  override def toString = "an instance of C"
}
object M

object Test extends App {
  val cm = scala.reflect.runtime.currentMirror
//  println(cm)

  println(cm.reflectClass(cm.staticClass("C")))
  println(cm.reflectModule(cm.staticModule("M")))
  println(cm.reflect(new C))

  val im = cm.reflect(new C)
  println(im.reflectField(typeOf[C].member(TermName("f1")).asTerm))
  println(im.reflectField(typeOf[C].member(TermName("f2")).asTerm))
  println(im.reflectMethod(typeOf[C].member(TermName("m1")).asMethod))
  println(im.reflectMethod(typeOf[C].member(TermName("m2")).asMethod))
  println(im.reflectMethod(typeOf[C].member(TermName("m3")).asMethod))
  println(im.reflectMethod(typeOf[C].member(TermName("m4")).asMethod))
  println(im.reflectMethod(typeOf[C].member(TermName("m5")).asMethod))
  println(im.reflectClass(typeOf[C].member(TypeName("C")).asClass))
  println(im.reflectModule(typeOf[C].member(TermName("M")).asModule))

  val c = cm.staticClass("C")
  val cc = typeOf[C].member(TypeName("C")).asClass
  println(cm.reflectClass(c).reflectConstructor(c.info.member(termNames.CONSTRUCTOR).asMethod))
  println(im.reflectClass(cc).reflectConstructor(cc.info.member(termNames.CONSTRUCTOR).asMethod))
}