blob: 80b60bab7e3c0818e59c2ef908d645f3ee8baecd (
plain) (
tree)
|
|
import scala.tools.partest.nest.FileManager._
object Test extends App {
val cm = reflect.runtime.currentMirror
val u = cm.universe
import u._
val JavaUniverseTpe = typeOf[reflect.runtime.JavaUniverse]
val DefinitionsModule = JavaUniverseTpe.member(TermName("definitions"))
def forceCode(prefix: String, tp: Type): String = {
def isLazyAccessorOrObject(sym: Symbol) = (
(sym.isMethod && sym.asMethod.isLazy)
|| sym.isModule
)
val forceables = tp.members.sorted.filter(isLazyAccessorOrObject)
forceables.map {
sym =>
val path = s"$prefix.${sym.name}"
" " + (
if (sym.isPrivate || sym.isProtected) s"// inaccessible: $path"
else path
)
}.mkString("\n")
}
val code =
s"""|// Generated Code, validated by run/t6240-universe-code-gen.scala
|package scala.reflect
|package runtime
|
|trait JavaUniverseForce { self: runtime.JavaUniverse =>
| def force() {
| Literal(Constant(42)).duplicate
| nme.flattenedName()
| nme.raw
| WeakTypeTag
| TypeTag
| TypeTag.Byte.tpe
| TypeTag.Short.tpe
| TypeTag.Char.tpe
| TypeTag.Int.tpe
| TypeTag.Long.tpe
| TypeTag.Float.tpe
| TypeTag.Double.tpe
| TypeTag.Boolean.tpe
| TypeTag.Unit.tpe
| TypeTag.Any.tpe
| TypeTag.AnyVal.tpe
| TypeTag.AnyRef.tpe
| TypeTag.Object.tpe
| TypeTag.Nothing.tpe
| TypeTag.Null.tpe
|
|${forceCode("this", JavaUniverseTpe)}
|${forceCode("definitions", DefinitionsModule.info)}
|
|${forceCode("uncurry", typeOf[scala.reflect.internal.transform.UnCurry])}
|${forceCode("erasure", typeOf[scala.reflect.internal.transform.Erasure])}
| }
|}""".stripMargin
import java.io.File
val testFile = new File(sys.props("partest.test-path"))
val actualFile = new java.io.File(testFile.getParent + "/../../../src/reflect/scala/reflect/runtime/JavaUniverseForce.scala").getCanonicalFile
val actual = scala.io.Source.fromFile(actualFile)
val actualLines = actual.getLines.toList
val generatedLines = code.lines.toList
if (actualLines != generatedLines) {
val msg = s"""|${actualFile} must be updated.
|===========================================================
| DIFF:
|===========================================================
|${compareContents(actualLines, generatedLines)}
|===========================================================
| NEW CONTENTS:
|===========================================================
|${code}""".stripMargin
assert(false, msg)
}
}
|