--- old/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java 2016-12-15 09:19:54.163949182 +0000 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java 2016-12-15 09:19:54.052941588 +0000 @@ -158,6 +158,7 @@ private final Set extraAddMods = new HashSet<>(); private final String limitModsOpt; private final Set extraLimitMods = new HashSet<>(); + private final String moduleVersionOpt; private final boolean lintOptions; @@ -203,6 +204,7 @@ 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; @@ -595,13 +597,16 @@ msym.flags_field |= UNATTRIBUTED; ModuleVisitor v = new ModuleVisitor(); JavaFileObject prev = log.useSource(tree.sourcefile); + JCModuleDecl moduleDecl = tree.getModuleDecl(); + DiagnosticPosition prevLintPos = deferredLintHandler.setPos(moduleDecl.pos()); + try { - JCModuleDecl moduleDecl = tree.getModuleDecl(); moduleDecl.accept(v); completeModule(msym); checkCyclicDependencies(moduleDecl); } finally { log.useSource(prev); + deferredLintHandler.setPos(prevLintPos); msym.flags_field &= ~UNATTRIBUTED; } } @@ -678,15 +683,12 @@ Set to = new LinkedHashSet<>(); for (JCExpression n: tree.moduleNames) { ModuleSymbol msym = lookupModule(n); - if (msym.kind != MDL) { - log.error(n.pos(), Errors.ModuleNotFound(msym)); - } else { - for (ExportsDirective d : exportsForPackage) { - checkDuplicateExportsToModule(n, msym, d); - } - if (!to.add(msym)) { - reportExportsConflictToModule(n, msym); - } + chk.checkModuleExists(n.pos(), msym); + for (ExportsDirective d : exportsForPackage) { + checkDuplicateExportsToModule(n, msym, d); + } + if (!to.add(msym)) { + reportExportsConflictToModule(n, msym); } } toModules = List.from(to); @@ -740,15 +742,12 @@ Set to = new LinkedHashSet<>(); for (JCExpression n: tree.moduleNames) { ModuleSymbol msym = lookupModule(n); - if (msym.kind != MDL) { - log.error(n.pos(), Errors.ModuleNotFound(msym)); - } else { - for (OpensDirective d : opensForPackage) { - checkDuplicateOpensToModule(n, msym, d); - } - if (!to.add(msym)) { - reportOpensConflictToModule(n, msym); - } + chk.checkModuleExists(n.pos(), msym); + for (OpensDirective d : opensForPackage) { + checkDuplicateOpensToModule(n, msym, d); + } + if (!to.add(msym)) { + reportOpensConflictToModule(n, msym); } } toModules = List.from(to); @@ -1133,6 +1132,12 @@ 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) {