blob: fe233a4fb5580e3f5f0e4e215915eb5a51aa05b1 (
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
45
46
47
48
49
50
51
52
|
/* NSC -- new Scala compiler
* Copyright 2005-2013 LAMP/EPFL
* @author Paul Phillips
*/
package scala.tools.partest
import scala.tools.nsc.Settings
import scala.tools.nsc.interpreter.ILoop
import java.lang.reflect.{ Method => JMethod, Field => JField }
import scala.reflect.{ClassTag, classTag}
/** Support code for testing signatures.
*/
trait SigTest {
def mstr(m: JMethod) = " (m) %s%s".format(
m.toGenericString,
if (m.isBridge) " (bridge)" else ""
)
def fstr(f: JField) = " (f) %s".format(f.toGenericString)
def isObjectMethodName(name: String) = classOf[Object].getMethods exists (_.getName == name)
def fields[T: ClassTag](p: JField => Boolean) = {
val cl = classTag[T].runtimeClass
val fs = (cl.getFields ++ cl.getDeclaredFields).distinct sortBy (_.getName)
fs filter p
}
def methods[T: ClassTag](p: JMethod => Boolean) = {
val cl = classTag[T].runtimeClass
val ms = (cl.getMethods ++ cl.getDeclaredMethods).distinct sortBy (x => (x.getName, x.isBridge))
ms filter p
}
def allFields[T: ClassTag]() = fields[T](_ => true)
def allMethods[T: ClassTag]() = methods[T](m => !isObjectMethodName(m.getName))
def fieldsNamed[T: ClassTag](name: String) = fields[T](_.getName == name)
def methodsNamed[T: ClassTag](name: String) = methods[T](_.getName == name)
def allGenericStrings[T: ClassTag]() =
(allMethods[T]() map mstr) ++ (allFields[T]() map fstr)
def genericStrings[T: ClassTag](name: String) =
(methodsNamed[T](name) map mstr) ++ (fieldsNamed[T](name) map fstr)
def show[T: ClassTag](name: String = "") = {
println(classTag[T].runtimeClass.getName)
if (name == "") allGenericStrings[T]() foreach println
else genericStrings[T](name) foreach println
}
}
|