< prev index next >
src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java
Print this page
rev 3886 : 8155026: javac grants implied readability to explicit modules
Summary: Ordinary named modules shouldn't be requires public for automatic modules
Reviewed-by: TBD
*** 502,512 ****
moduleFinder.findAllModules();
for (ModuleSymbol ms : allModules()) {
if (ms == syms.unnamedModule || ms == msym)
continue;
! RequiresDirective d = new RequiresDirective(ms, EnumSet.of(RequiresFlag.PUBLIC));
directives.add(d);
requires.add(d);
}
RequiresDirective requiresUnnamed = new RequiresDirective(syms.unnamedModule);
--- 502,514 ----
moduleFinder.findAllModules();
for (ModuleSymbol ms : allModules()) {
if (ms == syms.unnamedModule || ms == msym)
continue;
! Set<RequiresFlag> flags = (ms.flags_field & Flags.AUTOMATIC_MODULE) != 0 ?
! EnumSet.of(RequiresFlag.PUBLIC) : EnumSet.noneOf(RequiresFlag.class);
! RequiresDirective d = new RequiresDirective(ms, flags);
directives.add(d);
requires.add(d);
}
RequiresDirective requiresUnnamed = new RequiresDirective(syms.unnamedModule);
*** 993,1003 ****
requires = requires.tail;
}
Set<ModuleSymbol> readable = new LinkedHashSet<>();
Set<ModuleSymbol> requiresPublic = new HashSet<>();
! if ((msym.flags() & Flags.AUTOMATIC_MODULE) == 0) {
for (RequiresDirective d : msym.requires) {
d.module.complete();
readable.add(d.module);
Set<ModuleSymbol> s = retrieveRequiresPublic(d.module);
Assert.checkNonNull(s, () -> "no entry in cache for " + d.module);
--- 995,1005 ----
requires = requires.tail;
}
Set<ModuleSymbol> readable = new LinkedHashSet<>();
Set<ModuleSymbol> requiresPublic = new HashSet<>();
!
for (RequiresDirective d : msym.requires) {
d.module.complete();
readable.add(d.module);
Set<ModuleSymbol> s = retrieveRequiresPublic(d.module);
Assert.checkNonNull(s, () -> "no entry in cache for " + d.module);
*** 1005,1025 ****
if (d.flags.contains(RequiresFlag.PUBLIC)) {
requiresPublic.add(d.module);
requiresPublic.addAll(s);
}
}
- } else {
- //the module graph may contain cycles involving automatic modules
- //handle automatic modules separatelly:
- Set<ModuleSymbol> s = retrieveRequiresPublic(msym);
-
- readable.addAll(s);
- requiresPublic.addAll(s);
- //ensure the unnamed module is added (it is not requires public):
- readable.add(syms.unnamedModule);
- }
requiresPublicCache.put(msym, requiresPublic);
initVisiblePackages(msym, readable);
for (ExportsDirective d: msym.exports) {
d.packge.modle = msym;
}
--- 1007,1017 ----
< prev index next >