equal
deleted
inserted
replaced
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) { |