1.1 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Mon May 22 20:31:55 2017 +0200
1.2 +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Mon Jul 31 11:07:41 2017 +0200
1.3 @@ -94,10 +94,8 @@
1.4 import com.sun.tools.javac.tree.JCTree.JCUses;
1.5 import com.sun.tools.javac.tree.JCTree.Tag;
1.6 import com.sun.tools.javac.tree.TreeInfo;
1.7 -import com.sun.tools.javac.util.Abort;
1.8 import com.sun.tools.javac.util.Assert;
1.9 import com.sun.tools.javac.util.Context;
1.10 -import com.sun.tools.javac.util.JCDiagnostic;
1.11 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
1.12 import com.sun.tools.javac.util.List;
1.13 import com.sun.tools.javac.util.ListBuffer;
1.14 @@ -105,7 +103,6 @@
1.15 import com.sun.tools.javac.util.Name;
1.16 import com.sun.tools.javac.util.Names;
1.17 import com.sun.tools.javac.util.Options;
1.18 -import com.sun.tools.javac.util.Position;
1.19
1.20 import static com.sun.tools.javac.code.Flags.ABSTRACT;
1.21 import static com.sun.tools.javac.code.Flags.ENUM;
1.22 @@ -293,8 +290,7 @@
1.23 msym.complete();
1.24 }
1.25 } catch (CompletionFailure ex) {
1.26 - log.error(JCDiagnostic.DiagnosticFlag.NON_DEFERRABLE, Position.NOPOS, "cant.access", ex.sym, ex.getDetailValue());
1.27 - if (ex instanceof ClassFinder.BadClassFile) throw new Abort();
1.28 + chk.completionError(null, ex);
1.29 } finally {
1.30 depth--;
1.31 }
1.32 @@ -1283,10 +1279,6 @@
1.33 Predicate<ModuleSymbol> observablePred = sym ->
1.34 (observable == null) ? (moduleFinder.findModule(sym).kind != ERR) : observable.contains(sym);
1.35 Predicate<ModuleSymbol> systemModulePred = sym -> (sym.flags() & Flags.SYSTEM_MODULE) != 0;
1.36 - Predicate<ModuleSymbol> noIncubatorPred = sym -> {
1.37 - sym.complete();
1.38 - return !sym.resolutionFlags.contains(ModuleResolutionFlags.DO_NOT_RESOLVE_BY_DEFAULT);
1.39 - };
1.40 Set<ModuleSymbol> enabledRoot = new LinkedHashSet<>();
1.41
1.42 if (rootModules.contains(syms.unnamedModule)) {
1.43 @@ -1304,9 +1296,18 @@
1.44 jdkModulePred = sym -> true;
1.45 }
1.46
1.47 + Predicate<ModuleSymbol> noIncubatorPred = sym -> {
1.48 + sym.complete();
1.49 + return !sym.resolutionFlags.contains(ModuleResolutionFlags.DO_NOT_RESOLVE_BY_DEFAULT);
1.50 + };
1.51 +
1.52 for (ModuleSymbol sym : new HashSet<>(syms.getAllModules())) {
1.53 - if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym) && noIncubatorPred.test(sym)) {
1.54 - enabledRoot.add(sym);
1.55 + try {
1.56 + if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym) && noIncubatorPred.test(sym)) {
1.57 + enabledRoot.add(sym);
1.58 + }
1.59 + } catch (CompletionFailure ex) {
1.60 + chk.completionError(null, ex);
1.61 }
1.62 }
1.63 }
1.64 @@ -1398,32 +1399,36 @@
1.65 result.add(syms.java_base);
1.66
1.67 while (primaryTodo.nonEmpty() || secondaryTodo.nonEmpty()) {
1.68 - ModuleSymbol current;
1.69 - boolean isPrimaryTodo;
1.70 - if (primaryTodo.nonEmpty()) {
1.71 - current = primaryTodo.head;
1.72 - primaryTodo = primaryTodo.tail;
1.73 - isPrimaryTodo = true;
1.74 - } else {
1.75 - current = secondaryTodo.head;
1.76 - secondaryTodo = secondaryTodo.tail;
1.77 - isPrimaryTodo = false;
1.78 - }
1.79 - if (observable != null && !observable.contains(current))
1.80 - continue;
1.81 - if (!result.add(current) || current == syms.unnamedModule || ((current.flags_field & Flags.AUTOMATIC_MODULE) != 0))
1.82 - continue;
1.83 - current.complete();
1.84 - if (current.kind == ERR && isPrimaryTodo && warnedMissing.add(current)) {
1.85 - log.error(Errors.ModuleNotFound(current));
1.86 - }
1.87 - for (RequiresDirective rd : current.requires) {
1.88 - if (rd.module == syms.java_base) continue;
1.89 - if ((rd.isTransitive() && isPrimaryTodo) || base.contains(current)) {
1.90 - primaryTodo = primaryTodo.prepend(rd.module);
1.91 + try {
1.92 + ModuleSymbol current;
1.93 + boolean isPrimaryTodo;
1.94 + if (primaryTodo.nonEmpty()) {
1.95 + current = primaryTodo.head;
1.96 + primaryTodo = primaryTodo.tail;
1.97 + isPrimaryTodo = true;
1.98 } else {
1.99 - secondaryTodo = secondaryTodo.prepend(rd.module);
1.100 + current = secondaryTodo.head;
1.101 + secondaryTodo = secondaryTodo.tail;
1.102 + isPrimaryTodo = false;
1.103 }
1.104 + if (observable != null && !observable.contains(current))
1.105 + continue;
1.106 + if (!result.add(current) || current == syms.unnamedModule || ((current.flags_field & Flags.AUTOMATIC_MODULE) != 0))
1.107 + continue;
1.108 + current.complete();
1.109 + if (current.kind == ERR && isPrimaryTodo && warnedMissing.add(current)) {
1.110 + log.error(Errors.ModuleNotFound(current));
1.111 + }
1.112 + for (RequiresDirective rd : current.requires) {
1.113 + if (rd.module == syms.java_base) continue;
1.114 + if ((rd.isTransitive() && isPrimaryTodo) || base.contains(current)) {
1.115 + primaryTodo = primaryTodo.prepend(rd.module);
1.116 + } else {
1.117 + secondaryTodo = secondaryTodo.prepend(rd.module);
1.118 + }
1.119 + }
1.120 + } catch (CompletionFailure ex) {
1.121 + chk.completionError(null, ex);
1.122 }
1.123 }
1.124