--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Thu Apr 28 08:26:42 2016 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Tue May 03 09:11:12 2016 +0100
@@ -131,6 +131,9 @@
private final String moduleOverride;
+ private final Name java_se;
+ private final Name java_;
+
ModuleSymbol defaultModule;
private final String addExportsOpt;
@@ -173,6 +176,9 @@
JNIWriter jniWriter = JNIWriter.instance(context);
jniWriter.multiModuleMode = multiModuleMode;
+ java_se = names.fromString("java.se");
+ java_ = names.fromString("java.");
+
addExportsOpt = options.get(Option.XADDEXPORTS);
addReadsOpt = options.get(Option.XADDREADS);
addModsOpt = options.get(Option.ADDMODS);
@@ -761,17 +767,17 @@
private void checkForCorrectness() {
for (Directive.ProvidesDirective provides : allProvides) {
JCProvides tree = directiveToTreeMap.get(provides);
- /** The implementation must be defined in the same module as the provides directive
- * (else, error)
+ /* The implementation must be defined in the same module as the provides directive
+ * (else, error)
*/
PackageSymbol implementationDefiningPackage = provides.impl.packge();
if (implementationDefiningPackage.modle != msym) {
log.error(tree.pos(), Errors.ServiceImplementationNotInRightModule(implementationDefiningPackage.modle));
}
- /** There is no inherent requirement that module that provides a service should actually
- * use it itself. However, it is a pointless declaration if the service package is not
- * exported and there is no uses for the service.
+ /* There is no inherent requirement that module that provides a service should actually
+ * use it itself. However, it is a pointless declaration if the service package is not
+ * exported and there is no uses for the service.
*/
PackageSymbol interfaceDeclaringPackage = provides.service.packge();
boolean isInterfaceDeclaredInCurrentModule = interfaceDeclaringPackage.modle == msym;
@@ -826,8 +832,22 @@
Set<ModuleSymbol> enabledRoot = new LinkedHashSet<>();
if (rootModules.contains(syms.unnamedModule)) {
- for (ModuleSymbol sym : syms.getAllModules()) {
- if (systemModulePred.test(sym) && observablePred.test(sym)) {
+ ModuleSymbol javaSE = syms.getModule(java_se);
+ Predicate<ModuleSymbol> jdkModulePred;
+
+ if (javaSE != null && (observable == null || observable.contains(javaSE))) {
+ jdkModulePred = sym -> {
+ sym.complete();
+ return !sym.name.startsWith(java_)
+ && sym.exports.stream().anyMatch(e -> e.modules == null);
+ };
+ enabledRoot.add(javaSE);
+ } else {
+ jdkModulePred = sym -> true;
+ }
+
+ for (ModuleSymbol sym : new HashSet<>(syms.getAllModules())) {
+ if (systemModulePred.test(sym) && observablePred.test(sym) && jdkModulePred.test(sym)) {
enabledRoot.add(sym);
}
}