Skip to content

Commit 99e116c

Browse files
committed
Invalidate package's member cache when entering a toplevel definition
Invalidate enclosing package's member cache when entering a toplevel definition in a wrapper package object.
1 parent 7fc54b9 commit 99e116c

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

Diff for: compiler/src/dotty/tools/dotc/core/SymDenotations.scala

+10-4
Original file line numberDiff line numberDiff line change
@@ -1726,11 +1726,16 @@ object SymDenotations {
17261726
}
17271727

17281728
/** Enter a symbol in given `scope` without potentially replacing the old copy. */
1729-
def enterNoReplace(sym: Symbol, scope: MutableScope)(implicit ctx: Context): Unit = {
1729+
def enterNoReplace(sym: Symbol, scope: MutableScope)(given Context): Unit =
17301730
scope.enter(sym)
1731-
if (myMemberCache != null) myMemberCache.invalidate(sym.name)
1732-
if (!sym.flagsUNSAFE.is(Private)) invalidateMemberNamesCache()
1733-
}
1731+
invalidateMemberCaches(sym)
1732+
1733+
def invalidateMemberCaches(sym: Symbol)(given Context): Unit =
1734+
if myMemberCache != null then myMemberCache.invalidate(sym.name)
1735+
else if !sym.flagsUNSAFE.is(Private) then
1736+
invalidateMemberNamesCache()
1737+
if sym.owner.isPackageObject then
1738+
sym.owner.owner.asClass.invalidateMemberCaches(sym)
17341739

17351740
/** Replace symbol `prev` (if defined in current class) by symbol `replacement`.
17361741
* If `prev` is not defined in current class, do nothing.
@@ -2123,6 +2128,7 @@ object SymDenotations {
21232128
if (pcls.isCompleting) recur(pobjs1, acc)
21242129
else {
21252130
val pmembers = pcls.computeNPMembersNamed(name).filterWithPredicate { d =>
2131+
// Drop members of `Any` and `Object`
21262132
val owner = d.symbol.maybeOwner
21272133
(owner ne defn.AnyClass) && (owner ne defn.ObjectClass)
21282134
}

0 commit comments

Comments
 (0)