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 } |