64 import com.sun.tools.javac.code.Directive.UsesDirective;
65 import com.sun.tools.javac.code.Flags;
66 import com.sun.tools.javac.code.Lint.LintCategory;
67 import com.sun.tools.javac.code.ModuleFinder;
68 import com.sun.tools.javac.code.Source;
69 import com.sun.tools.javac.code.Symbol;
70 import com.sun.tools.javac.code.Symbol.ClassSymbol;
71 import com.sun.tools.javac.code.Symbol.Completer;
72 import com.sun.tools.javac.code.Symbol.CompletionFailure;
73 import com.sun.tools.javac.code.Symbol.MethodSymbol;
74 import com.sun.tools.javac.code.Symbol.ModuleFlags;
75 import com.sun.tools.javac.code.Symbol.ModuleSymbol;
76 import com.sun.tools.javac.code.Symbol.PackageSymbol;
77 import com.sun.tools.javac.code.Symtab;
78 import com.sun.tools.javac.code.Type;
79 import com.sun.tools.javac.code.Types;
80 import com.sun.tools.javac.jvm.ClassWriter;
81 import com.sun.tools.javac.jvm.JNIWriter;
82 import com.sun.tools.javac.main.Option;
83 import com.sun.tools.javac.resources.CompilerProperties.Errors;
84 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
85 import com.sun.tools.javac.tree.JCTree;
86 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
87 import com.sun.tools.javac.tree.JCTree.JCDirective;
88 import com.sun.tools.javac.tree.JCTree.JCExports;
89 import com.sun.tools.javac.tree.JCTree.JCExpression;
90 import com.sun.tools.javac.tree.JCTree.JCModuleDecl;
91 import com.sun.tools.javac.tree.JCTree.JCOpens;
92 import com.sun.tools.javac.tree.JCTree.JCProvides;
93 import com.sun.tools.javac.tree.JCTree.JCRequires;
94 import com.sun.tools.javac.tree.JCTree.JCUses;
95 import com.sun.tools.javac.tree.JCTree.Tag;
96 import com.sun.tools.javac.tree.TreeInfo;
97 import com.sun.tools.javac.util.Assert;
98 import com.sun.tools.javac.util.Context;
99 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
100 import com.sun.tools.javac.util.List;
101 import com.sun.tools.javac.util.ListBuffer;
102 import com.sun.tools.javac.util.Log;
103 import com.sun.tools.javac.util.Name;
1288
1289 Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, rootModules, observable);
1290
1291 result.add(syms.unnamedModule);
1292
1293 boolean hasAutomatic = result.stream().anyMatch(IS_AUTOMATIC);
1294
1295 if (hasAutomatic) {
1296 syms.getAllModules()
1297 .stream()
1298 .filter(IS_AUTOMATIC)
1299 .forEach(result::add);
1300 }
1301
1302 String incubatingModules = result.stream()
1303 .filter(msym -> msym.resolutionFlags.contains(ModuleResolutionFlags.WARN_INCUBATING))
1304 .map(msym -> msym.name.toString())
1305 .collect(Collectors.joining(","));
1306
1307 if (!incubatingModules.isEmpty()) {
1308 log.warning(Warnings.IncubatingModules(incubatingModules));
1309 }
1310
1311 allModules = result;
1312
1313 //add module versions from options, if any:
1314 if (moduleVersionOpt != null) {
1315 Name version = names.fromString(moduleVersionOpt);
1316 rootModules.forEach(m -> m.version = version);
1317 }
1318 }
1319 //where:
1320 private static final Predicate<ModuleSymbol> IS_AUTOMATIC =
1321 m -> (m.flags_field & Flags.AUTOMATIC_MODULE) != 0;
1322
1323 public boolean isInModuleGraph(ModuleSymbol msym) {
1324 return allModules == null || allModules.contains(msym);
1325 }
1326
1327 private Set<ModuleSymbol> computeTransitiveClosure(Set<? extends ModuleSymbol> base,
1328 Set<? extends ModuleSymbol> rootModules,
|
64 import com.sun.tools.javac.code.Directive.UsesDirective;
65 import com.sun.tools.javac.code.Flags;
66 import com.sun.tools.javac.code.Lint.LintCategory;
67 import com.sun.tools.javac.code.ModuleFinder;
68 import com.sun.tools.javac.code.Source;
69 import com.sun.tools.javac.code.Symbol;
70 import com.sun.tools.javac.code.Symbol.ClassSymbol;
71 import com.sun.tools.javac.code.Symbol.Completer;
72 import com.sun.tools.javac.code.Symbol.CompletionFailure;
73 import com.sun.tools.javac.code.Symbol.MethodSymbol;
74 import com.sun.tools.javac.code.Symbol.ModuleFlags;
75 import com.sun.tools.javac.code.Symbol.ModuleSymbol;
76 import com.sun.tools.javac.code.Symbol.PackageSymbol;
77 import com.sun.tools.javac.code.Symtab;
78 import com.sun.tools.javac.code.Type;
79 import com.sun.tools.javac.code.Types;
80 import com.sun.tools.javac.jvm.ClassWriter;
81 import com.sun.tools.javac.jvm.JNIWriter;
82 import com.sun.tools.javac.main.Option;
83 import com.sun.tools.javac.resources.CompilerProperties.Errors;
84 import com.sun.tools.javac.resources.CompilerProperties.Notes;
85 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
86 import com.sun.tools.javac.tree.JCTree;
87 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
88 import com.sun.tools.javac.tree.JCTree.JCDirective;
89 import com.sun.tools.javac.tree.JCTree.JCExports;
90 import com.sun.tools.javac.tree.JCTree.JCExpression;
91 import com.sun.tools.javac.tree.JCTree.JCModuleDecl;
92 import com.sun.tools.javac.tree.JCTree.JCOpens;
93 import com.sun.tools.javac.tree.JCTree.JCProvides;
94 import com.sun.tools.javac.tree.JCTree.JCRequires;
95 import com.sun.tools.javac.tree.JCTree.JCUses;
96 import com.sun.tools.javac.tree.JCTree.Tag;
97 import com.sun.tools.javac.tree.TreeInfo;
98 import com.sun.tools.javac.util.Assert;
99 import com.sun.tools.javac.util.Context;
100 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
101 import com.sun.tools.javac.util.List;
102 import com.sun.tools.javac.util.ListBuffer;
103 import com.sun.tools.javac.util.Log;
104 import com.sun.tools.javac.util.Name;
1289
1290 Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, rootModules, observable);
1291
1292 result.add(syms.unnamedModule);
1293
1294 boolean hasAutomatic = result.stream().anyMatch(IS_AUTOMATIC);
1295
1296 if (hasAutomatic) {
1297 syms.getAllModules()
1298 .stream()
1299 .filter(IS_AUTOMATIC)
1300 .forEach(result::add);
1301 }
1302
1303 String incubatingModules = result.stream()
1304 .filter(msym -> msym.resolutionFlags.contains(ModuleResolutionFlags.WARN_INCUBATING))
1305 .map(msym -> msym.name.toString())
1306 .collect(Collectors.joining(","));
1307
1308 if (!incubatingModules.isEmpty()) {
1309 log.note(Notes.IncubatingModules(incubatingModules));
1310 }
1311
1312 allModules = result;
1313
1314 //add module versions from options, if any:
1315 if (moduleVersionOpt != null) {
1316 Name version = names.fromString(moduleVersionOpt);
1317 rootModules.forEach(m -> m.version = version);
1318 }
1319 }
1320 //where:
1321 private static final Predicate<ModuleSymbol> IS_AUTOMATIC =
1322 m -> (m.flags_field & Flags.AUTOMATIC_MODULE) != 0;
1323
1324 public boolean isInModuleGraph(ModuleSymbol msym) {
1325 return allModules == null || allModules.contains(msym);
1326 }
1327
1328 private Set<ModuleSymbol> computeTransitiveClosure(Set<? extends ModuleSymbol> base,
1329 Set<? extends ModuleSymbol> rootModules,
|