diff -r 025ef287342f -r 3c8ff4204d2d langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java --- 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 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 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); } }