< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java

Print this page
rev 3492 : 8155026: javac grants implied readability to explicit modules
Summary: Ordinary named modules shouldn't be requires public for automatic modules
Reviewed-by: TBD

@@ -501,11 +501,13 @@
             moduleFinder.findAllModules();
 
             for (ModuleSymbol ms : allModules()) {
                 if (ms == syms.unnamedModule || ms == msym)
                     continue;
-                RequiresDirective d = new RequiresDirective(ms, EnumSet.of(RequiresFlag.PUBLIC));
+                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);

@@ -998,11 +1000,11 @@
             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);

@@ -1010,21 +1012,11 @@
                 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;
         }
< prev index next >