Skip to content

Commit 54c9ce7

Browse files
dwijnandWojciechMazur
authored andcommitted
Set privateWithin when creating java inner classes
[Cherry-picked 350215d]
1 parent f9a0010 commit 54c9ce7

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
@@ -100,13 +100,14 @@ object SymbolLoaders {
100100
*/
101101
def enterClassAndModule(
102102
owner: Symbol, name: PreName, completer: SymbolLoader,
103-
flags: FlagSet = EmptyFlags, scope: Scope = EmptyScope)(using Context): Unit = {
103+
flags: FlagSet = EmptyFlags, scope: Scope = EmptyScope)(using Context): (Symbol, Symbol) = {
104104
val clazz = enterClass(owner, name, completer, flags, scope)
105105
val module = enterModule(
106106
owner, name, completer,
107107
modFlags = flags.toTermFlags & RetainedModuleValFlags,
108108
clsFlags = flags.toTypeFlags & RetainedModuleClassFlags,
109109
scope = scope)
110+
(clazz, module)
110111
}
111112

112113
/** 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
@@ -226,12 +226,12 @@ class ClassfileParser(
226226
classRoot.setFlag(sflags)
227227
moduleRoot.setFlag(Flags.JavaDefined | Flags.ModuleClassCreationFlags)
228228

229-
val jflags1 = innerClasses.get(currentClassName.toString).fold(jflags: Int)(_.jflags)
230-
val privateWithin = getPrivateWithin(jflags1)
229+
val privateWithin = getPrivateWithin(jflags)
231230

232-
classRoot.setPrivateWithin(privateWithin)
233-
moduleRoot.setPrivateWithin(privateWithin)
234-
moduleRoot.sourceModule.setPrivateWithin(privateWithin)
231+
if privateWithin.exists then
232+
classRoot.setPrivateWithin(privateWithin)
233+
moduleRoot.setPrivateWithin(privateWithin)
234+
moduleRoot.sourceModule.setPrivateWithin(privateWithin)
235235

236236
for (i <- 0 until in.nextChar) parseMember(method = false)
237237
for (i <- 0 until in.nextChar) parseMember(method = true)
@@ -884,13 +884,18 @@ class ClassfileParser(
884884
*/
885885
private def enterOwnInnerClasses()(using Context, DataReader): Unit = {
886886
def enterClassAndModule(entry: InnerClassEntry, file: AbstractFile, jflags: Int) =
887-
SymbolLoaders.enterClassAndModule(
887+
val (cls, mod) = SymbolLoaders.enterClassAndModule(
888888
getOwner(jflags),
889-
entry.originalName,
889+
entry.originalName,
890890
new ClassfileLoader(file),
891891
classTranslation.flags(jflags),
892892
getScope(jflags))
893893

894+
val privateWithin = getPrivateWithin(jflags)
895+
cls.setPrivateWithin(privateWithin)
896+
mod.setPrivateWithin(privateWithin)
897+
mod.sourceModule.setPrivateWithin(privateWithin)
898+
894899
for entry <- innerClasses.valuesIterator do
895900
// create a new class member for immediate inner classes
896901
if entry.outer.name == currentClassName then

0 commit comments

Comments
 (0)