summaryrefslogtreecommitdiff
path: root/src/partest-extras/scala/tools/partest/SigTest.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/partest-extras/scala/tools/partest/SigTest.scala')
-rw-r--r--src/partest-extras/scala/tools/partest/SigTest.scala52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/partest-extras/scala/tools/partest/SigTest.scala b/src/partest-extras/scala/tools/partest/SigTest.scala
new file mode 100644
index 0000000000..fe233a4fb5
--- /dev/null
+++ b/src/partest-extras/scala/tools/partest/SigTest.scala
@@ -0,0 +1,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
+ }
+}