diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2013-12-28 22:39:08 +0300 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2013-12-29 10:24:19 +0300 |
commit | 08a5e03280e305bf19904a1a4f80ab328eeaacab (patch) | |
tree | b70fd6785d72f4bc62342bbdf5b94d9fa005f8d8 | |
parent | 9f0594c57716ed551918e15be6da843982e8ba12 (diff) | |
download | scala-08a5e03280e305bf19904a1a4f80ab328eeaacab.tar.gz scala-08a5e03280e305bf19904a1a4f80ab328eeaacab.tar.bz2 scala-08a5e03280e305bf19904a1a4f80ab328eeaacab.zip |
makes well-known packages and package classes consistent with each other
As discovered in https://groups.google.com/forum/#!topic/scala-user/RckXE90LoXo,
RootClass.sourceModule and EmptyPackageClass.sourceModule used to incorrectly
return NoSymbol instead of RootModule and EmptyPackage. This is now fixed.
-rw-r--r-- | src/reflect/scala/reflect/internal/Mirrors.scala | 3 | ||||
-rw-r--r-- | test/junit/scala/reflect/internal/MirrorsTest.scala | 18 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Mirrors.scala b/src/reflect/scala/reflect/internal/Mirrors.scala index 3a630b6a16..9c5a593ca5 100644 --- a/src/reflect/scala/reflect/internal/Mirrors.scala +++ b/src/reflect/scala/reflect/internal/Mirrors.scala @@ -281,7 +281,6 @@ trait Mirrors extends api.Mirrors { class RootPackage extends ModuleSymbol(rootOwner, NoPosition, nme.ROOTPKG) with RootSymbol { this setInfo NullaryMethodType(RootClass.tpe) - RootClass.sourceModule = this override def isRootPackage = true } @@ -296,6 +295,7 @@ trait Mirrors extends api.Mirrors { override def isRoot = true override def isEffectiveRoot = true override def isNestedClass = false + override def sourceModule = RootPackage } // This is <root>, the actual root of everything except the package _root_. @@ -316,6 +316,7 @@ trait Mirrors extends api.Mirrors { class EmptyPackageClass extends PackageClassSymbol(RootClass, NoPosition, tpnme.EMPTY_PACKAGE_NAME) with WellKnownSymbol { override def isEffectiveRoot = true override def isEmptyPackageClass = true + override def sourceModule = EmptyPackage } lazy val EmptyPackageClass = new EmptyPackageClass diff --git a/test/junit/scala/reflect/internal/MirrorsTest.scala b/test/junit/scala/reflect/internal/MirrorsTest.scala new file mode 100644 index 0000000000..9108af139f --- /dev/null +++ b/test/junit/scala/reflect/internal/MirrorsTest.scala @@ -0,0 +1,18 @@ +package scala.reflect.internal + +import org.junit.Assert._ +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@RunWith(classOf[JUnit4]) +class MirrorsTest { + @Test def rootCompanionsAreConnected(): Unit = { + val cm = scala.reflect.runtime.currentMirror + import cm._ + assertEquals("RootPackage.moduleClass == RootClass", RootClass, RootPackage.moduleClass) + assertEquals("RootClass.module == RootPackage", RootPackage, RootClass.module) + assertEquals("EmptyPackage.moduleClass == EmptyPackageClass", EmptyPackageClass, EmptyPackage.moduleClass) + assertEquals("EmptyPackageClass.module == EmptyPackage", EmptyPackage, EmptyPackageClass.module) + } +}
\ No newline at end of file |