Skip to content

Commit 2e63e61

Browse files
dwijnandWojciechMazur
authored andcommitted
Set privateWithin when creating java inner classes
[Cherry-picked 350215d]
1 parent 3e58bff commit 2e63e61

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,14 @@ object SymbolLoaders {
103103
*/
104104
def enterClassAndModule(
105105
owner: Symbol, name: PreName, completer: SymbolLoader,
106-
flags: FlagSet = EmptyFlags, scope: Scope = EmptyScope)(using Context): Unit = {
106+
flags: FlagSet = EmptyFlags, scope: Scope = EmptyScope)(using Context): (Symbol, Symbol) = {
107107
val clazz = enterClass(owner, name, completer, flags, scope)
108108
val module = enterModule(
109109
owner, name, completer,
110110
modFlags = flags.toTermFlags & RetainedModuleValFlags,
111111
clsFlags = flags.toTypeFlags & RetainedModuleClassFlags,
112112
scope = scope)
113+
(clazz, module)
113114
}
114115

115116
/** Enter all toplevel classes and objects in file `src` into package `owner`, provided

compiler/src/dotty/tools/dotc/core/classfile/ClassfileParser.scala

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -401,12 +401,12 @@ class ClassfileParser(
401401
classRoot.setFlag(sflags)
402402
moduleRoot.setFlag(Flags.JavaDefined | Flags.ModuleClassCreationFlags)
403403

404-
val jflags1 = innerClasses.get(currentClassName.toString).fold(jflags: Int)(_.jflags)
405-
val privateWithin = getPrivateWithin(jflags1)
404+
val privateWithin = getPrivateWithin(jflags)
406405

407-
classRoot.setPrivateWithin(privateWithin)
408-
moduleRoot.setPrivateWithin(privateWithin)
409-
moduleRoot.sourceModule.setPrivateWithin(privateWithin)
406+
if privateWithin.exists then
407+
classRoot.setPrivateWithin(privateWithin)
408+
moduleRoot.setPrivateWithin(privateWithin)
409+
moduleRoot.sourceModule.setPrivateWithin(privateWithin)
410410

411411
for (i <- 0 until in.nextChar) parseMember(method = false)
412412
for (i <- 0 until in.nextChar) parseMember(method = true)
@@ -1059,13 +1059,18 @@ class ClassfileParser(
10591059
*/
10601060
private def enterOwnInnerClasses()(using Context, DataReader): Unit = {
10611061
def enterClassAndModule(entry: InnerClassEntry, file: AbstractFile, jflags: Int) =
1062-
SymbolLoaders.enterClassAndModule(
1062+
val (cls, mod) = SymbolLoaders.enterClassAndModule(
10631063
getOwner(jflags),
1064-
entry.originalName,
1064+
entry.originalName,
10651065
new ClassfileLoader(file),
10661066
classTranslation.flags(jflags),
10671067
getScope(jflags))
10681068

1069+
val privateWithin = getPrivateWithin(jflags)
1070+
cls.setPrivateWithin(privateWithin)
1071+
mod.setPrivateWithin(privateWithin)
1072+
mod.sourceModule.setPrivateWithin(privateWithin)
1073+
10691074
for entry <- innerClasses.valuesIterator do
10701075
// create a new class member for immediate inner classes
10711076
if entry.outer.name == currentClassName then

0 commit comments

Comments
 (0)