--- a/jdk/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java Mon Oct 10 14:26:49 2016 -0700
+++ b/jdk/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java Mon Oct 10 15:46:14 2016 -0700
@@ -430,22 +430,23 @@
// the key is $MODULE
String mn = e.getKey();
Optional<Module> om = bootLayer.findModule(mn);
- if (!om.isPresent())
- fail("Unknown module: " + mn);
+ if (!om.isPresent()) {
+ warn("Unknown module: " + mn);
+ continue;
+ }
Module m = om.get();
// the value is the set of other modules (by name)
for (String name : e.getValue()) {
-
- Module other;
if (ALL_UNNAMED.equals(name)) {
Modules.addReadsAllUnnamed(m);
} else {
om = bootLayer.findModule(name);
- if (!om.isPresent())
- fail("Unknown module: " + name);
- other = om.get();
- Modules.addReads(m, other);
+ if (om.isPresent()) {
+ Modules.addReads(m, om.get());
+ } else {
+ warn("Unknown module: " + name);
+ }
}
}
@@ -472,14 +473,24 @@
String mn = s[0];
String pn = s[1];
+ if (mn.isEmpty() || pn.isEmpty())
+ fail("Module and package name must be specified:" + key);
// The exporting module is in the boot layer
Module m;
Optional<Module> om = bootLayer.findModule(mn);
- if (!om.isPresent())
- fail("Unknown module: " + mn);
+ if (!om.isPresent()) {
+ warn("Unknown module: " + mn);
+ continue;
+ }
+
m = om.get();
+ if (!m.getDescriptor().packages().contains(pn)) {
+ warn("package " + pn + " not in " + mn);
+ continue;
+ }
+
// the value is the set of modules to export to (by name)
for (String name : e.getValue()) {
boolean allUnnamed = false;
@@ -491,10 +502,10 @@
if (om.isPresent()) {
other = om.get();
} else {
- fail("Unknown module: " + name);
+ warn("Unknown module: " + name);
+ continue;
}
}
-
if (allUnnamed) {
Modules.addExportsToAllUnnamed(m, pn);
} else {
@@ -534,13 +545,7 @@
if (rhs.isEmpty())
fail("Unable to parse: " + value);
-
- // value is <module>(,<module>)*
- if (map.containsKey(key))
- fail(key + " specified more than once");
-
- Set<String> values = new HashSet<>();
- map.put(key, values);
+ Set<String> values = map.computeIfAbsent(key, k -> new HashSet<>());
for (String s : rhs.split(",")) {
if (s.length() > 0) values.add(s);
}
@@ -566,6 +571,10 @@
throw new RuntimeException(m);
}
+ static void warn(String m) {
+ System.err.println("WARNING: " + m);
+ }
+
static class PerfCounters {
static PerfCounter systemModulesTime