diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/files/presentation/t7678.check | 1 | ||||
-rw-r--r-- | test/files/presentation/t7678/Runner.scala | 62 | ||||
-rw-r--r-- | test/files/presentation/t7678/src/TypeTag.scala | 9 |
3 files changed, 72 insertions, 0 deletions
diff --git a/test/files/presentation/t7678.check b/test/files/presentation/t7678.check new file mode 100644 index 0000000000..f06434b322 --- /dev/null +++ b/test/files/presentation/t7678.check @@ -0,0 +1 @@ +reload: TypeTag.scala diff --git a/test/files/presentation/t7678/Runner.scala b/test/files/presentation/t7678/Runner.scala new file mode 100644 index 0000000000..14d6dc2a70 --- /dev/null +++ b/test/files/presentation/t7678/Runner.scala @@ -0,0 +1,62 @@ +import scala.tools.nsc.interactive.tests._ +import scala.reflect.internal.util._ + +object Test extends InteractiveTest { + + import compiler._, definitions._ + + override def runDefaultTests() { + def resolveTypeTagHyperlink() { + val sym = compiler.askForResponse(() => compiler.currentRun.runDefinitions.TypeTagClass).get.left.get + val r = new Response[Position] + compiler.askLinkPos(sym, new BatchSourceFile("", source), r) + r.get + } + + def checkTypeTagSymbolConsistent() { + compiler.askForResponse { + () => { + val runDefinitions = currentRun.runDefinitions + import runDefinitions._ + assert(TypeTagsClass.map(sym => getMemberClass(sym, tpnme.TypeTag)) == TypeTagClass) + assert(TypeTagsClass.map(sym => getMemberClass(sym, tpnme.WeakTypeTag)) == WeakTypeTagClass) + assert(TypeTagsClass.map(sym => getMemberModule(sym, nme.WeakTypeTag)) == WeakTypeTagModule) + assert(getMemberMethod(ReflectPackage, nme.materializeClassTag) == materializeClassTag) + assert(ReflectApiPackage.map(sym => getMemberMethod(sym, nme.materializeWeakTypeTag)) == materializeWeakTypeTag) + assert(ReflectApiPackage.map(sym => getMemberMethod(sym, nme.materializeTypeTag)) == materializeTypeTag) + () + } + }.get match { + case Right(t) => t.printStackTrace + case Left(_) => + } + } + resolveTypeTagHyperlink() + // The presentation compiler loads TypeTags from source; we'll get new symbols for its members. + // Need to make sure we didn't cache the old ones in Definitions. + checkTypeTagSymbolConsistent() + } + + def source = + """ + |package scala + |package reflect + |package api + | + |trait TypeTags { self: Universe => + | import definitions._ + | + | @annotation.implicitNotFound(msg = "No WeakTypeTag available for ${T}") + | trait WeakTypeTag[T] extends Equals with Serializable { + | val mirror: Mirror + | def in[U <: Universe with Singleton](otherMirror: scala.reflect.api.Mirror[U]): U # WeakTypeTag[T] + | def tpe: Type + | } + | object WeakTypeTag + | + | trait TypeTag[T] extends WeakTypeTag[T] with Equals with Serializable { + | } + | object TypeTag + | + """.stripMargin +} diff --git a/test/files/presentation/t7678/src/TypeTag.scala b/test/files/presentation/t7678/src/TypeTag.scala new file mode 100644 index 0000000000..0b222f8851 --- /dev/null +++ b/test/files/presentation/t7678/src/TypeTag.scala @@ -0,0 +1,9 @@ +package test + +object Test { + import scala.reflect.runtime.{ universe => ru } + def getTypeTag(implicit tag: ru.TypeTag[Int] ) = () + locally { + getTypeTag/*?*/ + } +} |