Skip to content

Commit af89c3d

Browse files
committed
Merge pull request scala#3365 from retronym/ticket/8133
Fix regression with package objects, overloading
2 parents 434c21c + e57af7d commit af89c3d

File tree

7 files changed

+44
-6
lines changed

7 files changed

+44
-6
lines changed

src/compiler/scala/tools/nsc/typechecker/Typers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
555555
}
556556
val qual = typedQualifier { atPos(tree.pos.makeTransparent) {
557557
tree match {
558-
case Ident(_) => Ident(nme.PACKAGEkw)
558+
case Ident(_) => Ident(rootMirror.getPackageObjectWithMember(pre, sym))
559559
case Select(qual, _) => Select(qual, nme.PACKAGEkw)
560560
case SelectFromTypeTree(qual, _) => Select(qual, nme.PACKAGEkw)
561561
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,15 @@ trait Mirrors extends api.Mirrors {
186186

187187
def getPackageObjectIfDefined(fullname: TermName): Symbol =
188188
wrapMissing(getPackageObject(fullname))
189+
190+
final def getPackageObjectWithMember(pre: Type, sym: Symbol): Symbol = {
191+
// The owner of a symbol which requires package qualification may be the
192+
// package object iself, but it also could be any superclass of the package
193+
// object. In the latter case, we must go through the qualifier's info
194+
// to obtain the right symbol.
195+
if (sym.owner.isModuleClass) sym.owner.sourceModule // fast path, if the member is owned by a module class, that must be linked to the package object
196+
else pre member nme.PACKAGE // otherwise we have to findMember
197+
}
189198

190199
override def staticPackage(fullname: String): ModuleSymbol =
191200
ensurePackageSymbol(fullname.toString, getModuleOrClass(newTermNameCached(fullname)), allowModules = false)

src/reflect/scala/reflect/internal/TreeGen.scala

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,7 @@ abstract class TreeGen extends macros.TreeBuilder {
191191
)
192192
val pkgQualifier =
193193
if (needsPackageQualifier) {
194-
// The owner of a symbol which requires package qualification may be the
195-
// package object iself, but it also could be any superclass of the package
196-
// object. In the latter case, we must go through the qualifier's info
197-
// to obtain the right symbol.
198-
val packageObject = if (sym.owner.isModuleClass) sym.owner.sourceModule else qual.tpe member nme.PACKAGE
194+
val packageObject = rootMirror.getPackageObjectWithMember(qual.tpe, sym)
199195
Select(qual, nme.PACKAGE) setSymbol packageObject setType singleType(qual.tpe, packageObject)
200196
}
201197
else qual

test/files/run/t8133/A_1.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// a.scala
2+
package object pkg {
3+
class AnyOps(val x: Any) extends AnyVal
4+
def AnyOps(x: Any) = new AnyOps(x)
5+
}

test/files/run/t8133/B_2.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package pkg {
2+
package object other
3+
package other {
4+
class Crash {
5+
AnyOps(0)
6+
()
7+
}
8+
}
9+
}
10+
11+
object Test {
12+
def main(args: Array[String]): Unit = {
13+
new pkg.other.Crash
14+
}
15+
}

test/files/run/t8133b/A_1.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package object pkg {
2+
def foo(x: Int): String = "a"
3+
def foo(x: String): String = "b"
4+
}

test/files/run/t8133b/B_2.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// b.scala
2+
package pkg {
3+
package object other
4+
package other { class Crash { foo("") } }
5+
}
6+
7+
object Test {
8+
def main(args: Array[String]): Unit = new pkg.other.Crash
9+
}

0 commit comments

Comments
 (0)