langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java
changeset 43270 de9a02e20567
parent 43267 81e70bde1b96
child 43271 ce89609dde7c
equal deleted inserted replaced
43269:12f989542165 43270:de9a02e20567
    39 import java.util.Set;
    39 import java.util.Set;
    40 import java.util.function.Consumer;
    40 import java.util.function.Consumer;
    41 import java.util.function.Predicate;
    41 import java.util.function.Predicate;
    42 import java.util.regex.Matcher;
    42 import java.util.regex.Matcher;
    43 import java.util.regex.Pattern;
    43 import java.util.regex.Pattern;
       
    44 import java.util.stream.Collectors;
    44 import java.util.stream.Stream;
    45 import java.util.stream.Stream;
    45 
    46 
    46 import javax.lang.model.SourceVersion;
    47 import javax.lang.model.SourceVersion;
    47 import javax.tools.JavaFileManager;
    48 import javax.tools.JavaFileManager;
    48 import javax.tools.JavaFileManager.Location;
    49 import javax.tools.JavaFileManager.Location;
   112 import static com.sun.tools.javac.code.Flags.PUBLIC;
   113 import static com.sun.tools.javac.code.Flags.PUBLIC;
   113 import static com.sun.tools.javac.code.Flags.UNATTRIBUTED;
   114 import static com.sun.tools.javac.code.Flags.UNATTRIBUTED;
   114 import static com.sun.tools.javac.code.Kinds.Kind.ERR;
   115 import static com.sun.tools.javac.code.Kinds.Kind.ERR;
   115 import static com.sun.tools.javac.code.Kinds.Kind.MDL;
   116 import static com.sun.tools.javac.code.Kinds.Kind.MDL;
   116 import static com.sun.tools.javac.code.Kinds.Kind.MTH;
   117 import static com.sun.tools.javac.code.Kinds.Kind.MTH;
       
   118 import com.sun.tools.javac.code.Symbol.ModuleResolutionFlags;
   117 import static com.sun.tools.javac.code.TypeTag.CLASS;
   119 import static com.sun.tools.javac.code.TypeTag.CLASS;
   118 
   120 
   119 /**
   121 /**
   120  *  TODO: fill in
   122  *  TODO: fill in
   121  *
   123  *
  1088         }
  1090         }
  1089 
  1091 
  1090         Predicate<ModuleSymbol> observablePred = sym ->
  1092         Predicate<ModuleSymbol> observablePred = sym ->
  1091              (observable == null) ? (moduleFinder.findModule(sym).kind != ERR) : observable.contains(sym);
  1093              (observable == null) ? (moduleFinder.findModule(sym).kind != ERR) : observable.contains(sym);
  1092         Predicate<ModuleSymbol> systemModulePred = sym -> (sym.flags() & Flags.SYSTEM_MODULE) != 0;
  1094         Predicate<ModuleSymbol> systemModulePred = sym -> (sym.flags() & Flags.SYSTEM_MODULE) != 0;
       
  1095         Predicate<ModuleSymbol> noIncubatorPred = sym -> {
       
  1096             sym.complete();
       
  1097             return !sym.resolutionFlags.contains(ModuleResolutionFlags.DO_NOT_RESOLVE_BY_DEFAULT);
       
  1098         };
  1093         Set<ModuleSymbol> enabledRoot = new LinkedHashSet<>();
  1099         Set<ModuleSymbol> enabledRoot = new LinkedHashSet<>();
  1094 
  1100 
  1095         if (rootModules.contains(syms.unnamedModule)) {
  1101         if (rootModules.contains(syms.unnamedModule)) {
  1096             ModuleSymbol javaSE = syms.getModule(java_se);
  1102             ModuleSymbol javaSE = syms.getModule(java_se);
  1097             Predicate<ModuleSymbol> jdkModulePred;
  1103             Predicate<ModuleSymbol> jdkModulePred;
  1106             } else {
  1112             } else {
  1107                 jdkModulePred = sym -> true;
  1113                 jdkModulePred = sym -> true;
  1108             }
  1114             }
  1109 
  1115 
  1110             for (ModuleSymbol sym : new HashSet<>(syms.getAllModules())) {
  1116             for (ModuleSymbol sym : new HashSet<>(syms.getAllModules())) {
  1111                 if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym)) {
  1117                 if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym) && noIncubatorPred.test(sym)) {
  1112                     enabledRoot.add(sym);
  1118                     enabledRoot.add(sym);
  1113                 }
  1119                 }
  1114             }
  1120             }
  1115         }
  1121         }
  1116 
  1122 
  1126 
  1132 
  1127             for (String added : fullAddMods) {
  1133             for (String added : fullAddMods) {
  1128                 Stream<ModuleSymbol> modules;
  1134                 Stream<ModuleSymbol> modules;
  1129                 switch (added) {
  1135                 switch (added) {
  1130                     case ALL_SYSTEM:
  1136                     case ALL_SYSTEM:
  1131                         modules = syms.getAllModules()
  1137                         modules = new HashSet<>(syms.getAllModules())
  1132                                       .stream()
  1138                                 .stream()
  1133                                       .filter(systemModulePred.and(observablePred));
  1139                                 .filter(systemModulePred.and(observablePred).and(noIncubatorPred));
  1134                         break;
  1140                         break;
  1135                     case ALL_MODULE_PATH:
  1141                     case ALL_MODULE_PATH:
  1136                         modules = syms.getAllModules()
  1142                         modules = new HashSet<>(syms.getAllModules())
  1137                                       .stream()
  1143                                 .stream()
  1138                                       .filter(systemModulePred.negate().and(observablePred));
  1144                                 .filter(systemModulePred.negate().and(observablePred));
  1139                         break;
  1145                         break;
  1140                     default:
  1146                     default:
  1141                         if (!isValidName(added))
  1147                         if (!isValidName(added))
  1142                             continue;
  1148                             continue;
  1143                         modules = Stream.of(syms.enterModule(names.fromString(added)));
  1149                         modules = Stream.of(syms.enterModule(names.fromString(added)));
  1152         }
  1158         }
  1153 
  1159 
  1154         Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, observable);
  1160         Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, observable);
  1155 
  1161 
  1156         result.add(syms.unnamedModule);
  1162         result.add(syms.unnamedModule);
       
  1163 
       
  1164         String incubatingModules = result.stream()
       
  1165                 .filter(msym -> msym.resolutionFlags.contains(ModuleResolutionFlags.WARN_INCUBATING))
       
  1166                 .map(msym -> msym.name.toString())
       
  1167                 .collect(Collectors.joining(","));
       
  1168 
       
  1169         if (!incubatingModules.isEmpty()) {
       
  1170             log.warning(Warnings.IncubatingModules(incubatingModules));
       
  1171         }
  1157 
  1172 
  1158         allModules = result;
  1173         allModules = result;
  1159 
  1174 
  1160         //add module versions from options, if any:
  1175         //add module versions from options, if any:
  1161         if (moduleVersionOpt != null) {
  1176         if (moduleVersionOpt != null) {