Skip to content

Commit 08a5e03

Browse files
committed
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.
1 parent 9f0594c commit 08a5e03

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/reflect/scala/reflect/internal/Mirrors.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,6 @@ trait Mirrors extends api.Mirrors {
281281

282282
class RootPackage extends ModuleSymbol(rootOwner, NoPosition, nme.ROOTPKG) with RootSymbol {
283283
this setInfo NullaryMethodType(RootClass.tpe)
284-
RootClass.sourceModule = this
285284

286285
override def isRootPackage = true
287286
}
@@ -296,6 +295,7 @@ trait Mirrors extends api.Mirrors {
296295
override def isRoot = true
297296
override def isEffectiveRoot = true
298297
override def isNestedClass = false
298+
override def sourceModule = RootPackage
299299
}
300300

301301
// This is <root>, the actual root of everything except the package _root_.
@@ -316,6 +316,7 @@ trait Mirrors extends api.Mirrors {
316316
class EmptyPackageClass extends PackageClassSymbol(RootClass, NoPosition, tpnme.EMPTY_PACKAGE_NAME) with WellKnownSymbol {
317317
override def isEffectiveRoot = true
318318
override def isEmptyPackageClass = true
319+
override def sourceModule = EmptyPackage
319320
}
320321

321322
lazy val EmptyPackageClass = new EmptyPackageClass
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package scala.reflect.internal
2+
3+
import org.junit.Assert._
4+
import org.junit.Test
5+
import org.junit.runner.RunWith
6+
import org.junit.runners.JUnit4
7+
8+
@RunWith(classOf[JUnit4])
9+
class MirrorsTest {
10+
@Test def rootCompanionsAreConnected(): Unit = {
11+
val cm = scala.reflect.runtime.currentMirror
12+
import cm._
13+
assertEquals("RootPackage.moduleClass == RootClass", RootClass, RootPackage.moduleClass)
14+
assertEquals("RootClass.module == RootPackage", RootPackage, RootClass.module)
15+
assertEquals("EmptyPackage.moduleClass == EmptyPackageClass", EmptyPackageClass, EmptyPackage.moduleClass)
16+
assertEquals("EmptyPackageClass.module == EmptyPackage", EmptyPackage, EmptyPackageClass.module)
17+
}
18+
}

0 commit comments

Comments
 (0)