langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java
changeset 39366 8bf5fe72ca88
parent 39361 cd0aca7db174
child 39915 5d1e0740e709
equal deleted inserted replaced
39365:79f4425ad27c 39366:8bf5fe72ca88
   507             moduleFinder.findAllModules();
   507             moduleFinder.findAllModules();
   508 
   508 
   509             for (ModuleSymbol ms : allModules()) {
   509             for (ModuleSymbol ms : allModules()) {
   510                 if (ms == syms.unnamedModule || ms == msym)
   510                 if (ms == syms.unnamedModule || ms == msym)
   511                     continue;
   511                     continue;
   512                 RequiresDirective d = new RequiresDirective(ms, EnumSet.of(RequiresFlag.PUBLIC));
   512                 Set<RequiresFlag> flags = (ms.flags_field & Flags.AUTOMATIC_MODULE) != 0 ?
       
   513                         EnumSet.of(RequiresFlag.PUBLIC) : EnumSet.noneOf(RequiresFlag.class);
       
   514                 RequiresDirective d = new RequiresDirective(ms, flags);
   513                 directives.add(d);
   515                 directives.add(d);
   514                 requires.add(d);
   516                 requires.add(d);
   515             }
   517             }
   516 
   518 
   517             RequiresDirective requiresUnnamed = new RequiresDirective(syms.unnamedModule);
   519             RequiresDirective requiresUnnamed = new RequiresDirective(syms.unnamedModule);
  1004             requires = requires.tail;
  1006             requires = requires.tail;
  1005         }
  1007         }
  1006 
  1008 
  1007         Set<ModuleSymbol> readable = new LinkedHashSet<>();
  1009         Set<ModuleSymbol> readable = new LinkedHashSet<>();
  1008         Set<ModuleSymbol> requiresPublic = new HashSet<>();
  1010         Set<ModuleSymbol> requiresPublic = new HashSet<>();
  1009         if ((msym.flags() & Flags.AUTOMATIC_MODULE) == 0) {
  1011 
  1010             for (RequiresDirective d : msym.requires) {
  1012         for (RequiresDirective d : msym.requires) {
  1011                 d.module.complete();
  1013             d.module.complete();
  1012                 readable.add(d.module);
  1014             readable.add(d.module);
  1013                 Set<ModuleSymbol> s = retrieveRequiresPublic(d.module);
  1015             Set<ModuleSymbol> s = retrieveRequiresPublic(d.module);
  1014                 Assert.checkNonNull(s, () -> "no entry in cache for " + d.module);
  1016             Assert.checkNonNull(s, () -> "no entry in cache for " + d.module);
  1015                 readable.addAll(s);
       
  1016                 if (d.flags.contains(RequiresFlag.PUBLIC)) {
       
  1017                     requiresPublic.add(d.module);
       
  1018                     requiresPublic.addAll(s);
       
  1019                 }
       
  1020             }
       
  1021         } else {
       
  1022             //the module graph may contain cycles involving automatic modules
       
  1023             //handle automatic modules separatelly:
       
  1024             Set<ModuleSymbol> s = retrieveRequiresPublic(msym);
       
  1025 
       
  1026             readable.addAll(s);
  1017             readable.addAll(s);
  1027             requiresPublic.addAll(s);
  1018             if (d.flags.contains(RequiresFlag.PUBLIC)) {
  1028 
  1019                 requiresPublic.add(d.module);
  1029             //ensure the unnamed module is added (it is not requires public):
  1020                 requiresPublic.addAll(s);
  1030             readable.add(syms.unnamedModule);
  1021             }
  1031         }
  1022         }
       
  1023 
  1032         requiresPublicCache.put(msym, requiresPublic);
  1024         requiresPublicCache.put(msym, requiresPublic);
  1033         initVisiblePackages(msym, readable);
  1025         initVisiblePackages(msym, readable);
  1034         for (ExportsDirective d: msym.exports) {
  1026         for (ExportsDirective d: msym.exports) {
  1035             d.packge.modle = msym;
  1027             d.packge.modle = msym;
  1036         }
  1028         }