Skip to content

Commit 9df4dfb

Browse files
authored
Merge pull request #6498 from dotty-staging/packageObj-methods
Fix #6242: package objects leak members from Any and Object
2 parents d79eb0e + d4b21c1 commit 9df4dfb

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

compiler/src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2031,7 +2031,15 @@ object SymDenotations {
20312031
def recur(pobjs: List[ClassDenotation], acc: PreDenotation): PreDenotation = pobjs match {
20322032
case pcls :: pobjs1 =>
20332033
if (pcls.isCompleting) recur(pobjs1, acc)
2034-
else recur(pobjs1, acc.union(pcls.computeNPMembersNamed(name)))
2034+
else {
2035+
// A package object inherits members from `Any` and `Object` which
2036+
// should not be accessible from the package prefix.
2037+
val pmembers = pcls.computeNPMembersNamed(name).filterWithPredicate { d =>
2038+
val owner = d.symbol.maybeOwner
2039+
(owner ne defn.AnyClass) && (owner ne defn.ObjectClass)
2040+
}
2041+
recur(pobjs1, acc.union(pmembers))
2042+
}
20352043
case nil =>
20362044
val directMembers = super.computeNPMembersNamed(name)
20372045
if (acc.exists) acc.union(directMembers.filterWithPredicate(!_.symbol.isAbsent))

tests/neg/i6242.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package object foo {
2+
val x = 1
3+
}
4+
object Test {
5+
foo.eq(???) // error
6+
foo.==(???) // error
7+
}

0 commit comments

Comments
 (0)