@@ -311,32 +311,31 @@ class Namer { typer: Typer =>
311
311
else name
312
312
}
313
313
314
- /** If effective owner is a package `p`, widen `private` to `private[p]` */
315
- def widenToplevelPrivate (sym : Symbol ): Unit = {
316
- var owner = sym.effectiveOwner
317
- if (owner.is(Package )) {
318
- sym.resetFlag(Private )
319
- sym.privateWithin = owner
320
- }
321
- }
322
-
323
314
/** Create new symbol or redefine existing symbol under lateCompile. */
324
315
def createOrRefine [S <: Symbol ](
325
- tree : MemberDef , name : Name , flags : FlagSet , infoFn : S => Type ,
316
+ tree : MemberDef , name : Name , flags : FlagSet , owner : Symbol , infoFn : S => Type ,
326
317
symFn : (FlagSet , S => Type , Symbol ) => S ): Symbol = {
327
318
val prev =
328
319
if (lateCompile && ctx.owner.is(Package )) ctx.effectiveScope.lookup(name)
329
320
else NoSymbol
321
+
322
+ var flags1 = flags
323
+ var privateWithin = privateWithinClass(tree.mods)
324
+ val effectiveOwner = owner.skipWeakOwner
325
+ if (flags.is(Private ) && effectiveOwner.is(Package )) {
326
+ // If effective owner is a package p, widen private to private[p]
327
+ flags1 = flags1 &~ Private
328
+ privateWithin = effectiveOwner
329
+ }
330
+
330
331
val sym =
331
332
if (prev.exists) {
332
- prev.flags = flags
333
+ prev.flags = flags1
333
334
prev.info = infoFn(prev.asInstanceOf [S ])
334
- prev.privateWithin = privateWithinClass(tree.mods)
335
+ prev.privateWithin = privateWithin
335
336
prev
336
337
}
337
- else symFn(flags, infoFn, privateWithinClass(tree.mods))
338
- if (sym.is(Private ))
339
- widenToplevelPrivate(sym)
338
+ else symFn(flags1, infoFn, privateWithin)
340
339
recordSym(sym, tree)
341
340
}
342
341
@@ -345,7 +344,7 @@ class Namer { typer: Typer =>
345
344
val name = checkNoConflict(tree.name).asTypeName
346
345
val flags = checkFlags(tree.mods.flags &~ DelegateOrImplicit )
347
346
val cls =
348
- createOrRefine[ClassSymbol ](tree, name, flags,
347
+ createOrRefine[ClassSymbol ](tree, name, flags, ctx.owner,
349
348
cls => adjustIfModule(new ClassCompleter (cls, tree)(ctx), tree),
350
349
ctx.newClassSymbol(ctx.owner, name, _, _, _, tree.nameSpan, ctx.source.file))
351
350
cls.completer.asInstanceOf [ClassCompleter ].init()
@@ -381,7 +380,7 @@ class Namer { typer: Typer =>
381
380
}
382
381
val info = adjustIfModule(completer, tree)
383
382
createOrRefine[Symbol ](tree, name, flags | deferred | method | higherKinded,
384
- _ => info,
383
+ ctx.owner, _ => info,
385
384
(fs, _, pwithin) => ctx.newSymbol(ctx.owner, name, fs, info, pwithin, tree.nameSpan))
386
385
case tree : Import =>
387
386
recordSym(ctx.newImportSymbol(ctx.owner, new Completer (tree), tree.span), tree)
0 commit comments