summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2013-11-08 02:19:07 -0800
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2013-11-08 02:19:07 -0800
commit12fe8ef2aff8760a9f0277a7baf74a011753f788 (patch)
treee56c85bf671ac6dbcaff8dbf5db0c42c99943030 /test
parentf0cee6a244a999908f2aba1c8b59b6fd568f3c4b (diff)
parenta5127a8392fd2a0bce9b3ced302b4ebe1a80bc65 (diff)
downloadscala-12fe8ef2aff8760a9f0277a7baf74a011753f788.tar.gz
scala-12fe8ef2aff8760a9f0277a7baf74a011753f788.tar.bz2
scala-12fe8ef2aff8760a9f0277a7baf74a011753f788.zip
Merge pull request #3092 from retronym/ticket/7678-2
Small implicit optimizations, and SI-7678 RunDefinitions
Diffstat (limited to 'test')
-rw-r--r--test/files/presentation/t7678.check1
-rw-r--r--test/files/presentation/t7678/Runner.scala62
-rw-r--r--test/files/presentation/t7678/src/TypeTag.scala9
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/*?*/
+ }
+}