< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java

Print this page

        

@@ -156,10 +156,11 @@
     private Map<ModuleSymbol, Set<RequiresDirective>> addReads;
     private final String addModsOpt;
     private final Set<String> extraAddMods = new HashSet<>();
     private final String limitModsOpt;
     private final Set<String> extraLimitMods = new HashSet<>();
+    private final String moduleVersionOpt;
 
     private final boolean lintOptions;
 
     private Set<ModuleSymbol> rootModules = null;
 

@@ -201,10 +202,11 @@
 
         addExportsOpt = options.get(Option.ADD_EXPORTS);
         addReadsOpt = options.get(Option.ADD_READS);
         addModsOpt = options.get(Option.ADD_MODULES);
         limitModsOpt = options.get(Option.LIMIT_MODULES);
+        moduleVersionOpt = options.get(Option.MODULE_VERSION);
     }
 
     int depth = -1;
     private void dprintln(String msg) {
         for (int i = 0; i < depth; i++)

@@ -593,17 +595,20 @@
             public void complete(Symbol sym) throws CompletionFailure {
                 ModuleSymbol msym = (ModuleSymbol) sym;
                 msym.flags_field |= UNATTRIBUTED;
                 ModuleVisitor v = new ModuleVisitor();
                 JavaFileObject prev = log.useSource(tree.sourcefile);
-                try {
                     JCModuleDecl moduleDecl = tree.getModuleDecl();
+                DiagnosticPosition prevLintPos = deferredLintHandler.setPos(moduleDecl.pos());
+
+                try {
                     moduleDecl.accept(v);
                     completeModule(msym);
                     checkCyclicDependencies(moduleDecl);
                 } finally {
                     log.useSource(prev);
+                    deferredLintHandler.setPos(prevLintPos);
                     msym.flags_field &= ~UNATTRIBUTED;
                 }
             }
 
             @Override

@@ -676,21 +681,18 @@
             List<ModuleSymbol> toModules = null;
             if (tree.moduleNames != null) {
                 Set<ModuleSymbol> to = new LinkedHashSet<>();
                 for (JCExpression n: tree.moduleNames) {
                     ModuleSymbol msym = lookupModule(n);
-                    if (msym.kind != MDL) {
-                        log.error(n.pos(), Errors.ModuleNotFound(msym));
-                    } else {
+                    chk.checkModuleExists(n.pos(), msym);
                         for (ExportsDirective d : exportsForPackage) {
                             checkDuplicateExportsToModule(n, msym, d);
                         }
                         if (!to.add(msym)) {
                             reportExportsConflictToModule(n, msym);
                         }
                     }
-                }
                 toModules = List.from(to);
             }
 
             if (toModules == null || !toModules.isEmpty()) {
                 Set<ExportsFlag> flags = EnumSet.noneOf(ExportsFlag.class);

@@ -738,21 +740,18 @@
             List<ModuleSymbol> toModules = null;
             if (tree.moduleNames != null) {
                 Set<ModuleSymbol> to = new LinkedHashSet<>();
                 for (JCExpression n: tree.moduleNames) {
                     ModuleSymbol msym = lookupModule(n);
-                    if (msym.kind != MDL) {
-                        log.error(n.pos(), Errors.ModuleNotFound(msym));
-                    } else {
+                    chk.checkModuleExists(n.pos(), msym);
                         for (OpensDirective d : opensForPackage) {
                             checkDuplicateOpensToModule(n, msym, d);
                         }
                         if (!to.add(msym)) {
                             reportOpensConflictToModule(n, msym);
                         }
                     }
-                }
                 toModules = List.from(to);
             }
 
             if (toModules == null || !toModules.isEmpty()) {
                 Set<OpensFlag> flags = EnumSet.noneOf(OpensFlag.class);

@@ -1131,10 +1130,16 @@
         Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, observable);
 
         result.add(syms.unnamedModule);
 
         allModules = result;
+
+        //add module versions from options, if any:
+        if (moduleVersionOpt != null) {
+            Name version = names.fromString(moduleVersionOpt);
+            rootModules.forEach(m -> m.version = version);
+        }
     }
 
     public boolean isInModuleGraph(ModuleSymbol msym) {
         return allModules == null || allModules.contains(msym);
     }
< prev index next >