langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java
changeset 42823 58864b03c7b9
parent 42815 050370edaade
parent 42822 a84956e7ee4d
child 42824 89b14017e8d6
equal deleted inserted replaced
42821:e5eee1c92be0 42823:58864b03c7b9
   156     private Map<ModuleSymbol, Set<RequiresDirective>> addReads;
   156     private Map<ModuleSymbol, Set<RequiresDirective>> addReads;
   157     private final String addModsOpt;
   157     private final String addModsOpt;
   158     private final Set<String> extraAddMods = new HashSet<>();
   158     private final Set<String> extraAddMods = new HashSet<>();
   159     private final String limitModsOpt;
   159     private final String limitModsOpt;
   160     private final Set<String> extraLimitMods = new HashSet<>();
   160     private final Set<String> extraLimitMods = new HashSet<>();
       
   161     private final String moduleVersionOpt;
   161 
   162 
   162     private final boolean lintOptions;
   163     private final boolean lintOptions;
   163 
   164 
   164     private Set<ModuleSymbol> rootModules = null;
   165     private Set<ModuleSymbol> rootModules = null;
   165 
   166 
   201 
   202 
   202         addExportsOpt = options.get(Option.ADD_EXPORTS);
   203         addExportsOpt = options.get(Option.ADD_EXPORTS);
   203         addReadsOpt = options.get(Option.ADD_READS);
   204         addReadsOpt = options.get(Option.ADD_READS);
   204         addModsOpt = options.get(Option.ADD_MODULES);
   205         addModsOpt = options.get(Option.ADD_MODULES);
   205         limitModsOpt = options.get(Option.LIMIT_MODULES);
   206         limitModsOpt = options.get(Option.LIMIT_MODULES);
       
   207         moduleVersionOpt = options.get(Option.MODULE_VERSION);
   206     }
   208     }
   207 
   209 
   208     int depth = -1;
   210     int depth = -1;
   209     private void dprintln(String msg) {
   211     private void dprintln(String msg) {
   210         for (int i = 0; i < depth; i++)
   212         for (int i = 0; i < depth; i++)
   603             public void complete(Symbol sym) throws CompletionFailure {
   605             public void complete(Symbol sym) throws CompletionFailure {
   604                 ModuleSymbol msym = (ModuleSymbol) sym;
   606                 ModuleSymbol msym = (ModuleSymbol) sym;
   605                 msym.flags_field |= UNATTRIBUTED;
   607                 msym.flags_field |= UNATTRIBUTED;
   606                 ModuleVisitor v = new ModuleVisitor();
   608                 ModuleVisitor v = new ModuleVisitor();
   607                 JavaFileObject prev = log.useSource(tree.sourcefile);
   609                 JavaFileObject prev = log.useSource(tree.sourcefile);
       
   610                 JCModuleDecl moduleDecl = tree.getModuleDecl();
       
   611                 DiagnosticPosition prevLintPos = deferredLintHandler.setPos(moduleDecl.pos());
       
   612 
   608                 try {
   613                 try {
   609                     JCModuleDecl moduleDecl = tree.getModuleDecl();
       
   610                     moduleDecl.accept(v);
   614                     moduleDecl.accept(v);
   611                     completeModule(msym);
   615                     completeModule(msym);
   612                     checkCyclicDependencies(moduleDecl);
   616                     checkCyclicDependencies(moduleDecl);
   613                 } finally {
   617                 } finally {
   614                     log.useSource(prev);
   618                     log.useSource(prev);
       
   619                     deferredLintHandler.setPos(prevLintPos);
   615                     msym.flags_field &= ~UNATTRIBUTED;
   620                     msym.flags_field &= ~UNATTRIBUTED;
   616                 }
   621                 }
   617             }
   622             }
   618 
   623 
   619             @Override
   624             @Override
   691             List<ModuleSymbol> toModules = null;
   696             List<ModuleSymbol> toModules = null;
   692             if (tree.moduleNames != null) {
   697             if (tree.moduleNames != null) {
   693                 Set<ModuleSymbol> to = new LinkedHashSet<>();
   698                 Set<ModuleSymbol> to = new LinkedHashSet<>();
   694                 for (JCExpression n: tree.moduleNames) {
   699                 for (JCExpression n: tree.moduleNames) {
   695                     ModuleSymbol msym = lookupModule(n);
   700                     ModuleSymbol msym = lookupModule(n);
   696                     if (msym.kind != MDL) {
   701                     chk.checkModuleExists(n.pos(), msym);
   697                         log.error(n.pos(), Errors.ModuleNotFound(msym));
   702                     for (ExportsDirective d : exportsForPackage) {
   698                     } else {
   703                         checkDuplicateExportsToModule(n, msym, d);
   699                         for (ExportsDirective d : exportsForPackage) {
   704                     }
   700                             checkDuplicateExportsToModule(n, msym, d);
   705                     if (!to.add(msym)) {
   701                         }
   706                         reportExportsConflictToModule(n, msym);
   702                         if (!to.add(msym)) {
       
   703                             reportExportsConflictToModule(n, msym);
       
   704                         }
       
   705                     }
   707                     }
   706                 }
   708                 }
   707                 toModules = List.from(to);
   709                 toModules = List.from(to);
   708             }
   710             }
   709 
   711 
   753             List<ModuleSymbol> toModules = null;
   755             List<ModuleSymbol> toModules = null;
   754             if (tree.moduleNames != null) {
   756             if (tree.moduleNames != null) {
   755                 Set<ModuleSymbol> to = new LinkedHashSet<>();
   757                 Set<ModuleSymbol> to = new LinkedHashSet<>();
   756                 for (JCExpression n: tree.moduleNames) {
   758                 for (JCExpression n: tree.moduleNames) {
   757                     ModuleSymbol msym = lookupModule(n);
   759                     ModuleSymbol msym = lookupModule(n);
   758                     if (msym.kind != MDL) {
   760                     chk.checkModuleExists(n.pos(), msym);
   759                         log.error(n.pos(), Errors.ModuleNotFound(msym));
   761                     for (OpensDirective d : opensForPackage) {
   760                     } else {
   762                         checkDuplicateOpensToModule(n, msym, d);
   761                         for (OpensDirective d : opensForPackage) {
   763                     }
   762                             checkDuplicateOpensToModule(n, msym, d);
   764                     if (!to.add(msym)) {
   763                         }
   765                         reportOpensConflictToModule(n, msym);
   764                         if (!to.add(msym)) {
       
   765                             reportOpensConflictToModule(n, msym);
       
   766                         }
       
   767                     }
   766                     }
   768                 }
   767                 }
   769                 toModules = List.from(to);
   768                 toModules = List.from(to);
   770             }
   769             }
   771 
   770 
  1146         Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, observable);
  1145         Set<ModuleSymbol> result = computeTransitiveClosure(enabledRoot, observable);
  1147 
  1146 
  1148         result.add(syms.unnamedModule);
  1147         result.add(syms.unnamedModule);
  1149 
  1148 
  1150         allModules = result;
  1149         allModules = result;
       
  1150 
       
  1151         //add module versions from options, if any:
       
  1152         if (moduleVersionOpt != null) {
       
  1153             Name version = names.fromString(moduleVersionOpt);
       
  1154             rootModules.forEach(m -> m.version = version);
       
  1155         }
  1151     }
  1156     }
  1152 
  1157 
  1153     public boolean isInModuleGraph(ModuleSymbol msym) {
  1158     public boolean isInModuleGraph(ModuleSymbol msym) {
  1154         return allModules == null || allModules.contains(msym);
  1159         return allModules == null || allModules.contains(msym);
  1155     }
  1160     }