< prev index next >
src/java.base/share/classes/jdk/internal/module/DefaultRoots.java
Print this page
rev 50632 : [mq]: defaultroots
*** 1,7 ****
/*
! * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 20,93 ****
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.internal.module;
import java.lang.module.ModuleDescriptor;
import java.lang.module.ModuleFinder;
import java.lang.module.ModuleReference;
- import java.util.HashSet;
import java.util.Set;
/**
* Defines methods to compute the default set of root modules for the unnamed
* module.
*/
public final class DefaultRoots {
- private static final String JAVA_SE = "java.se";
-
private DefaultRoots() { }
/**
! * Returns the default set of root modules for the unnamed module computed from
! * the system modules observable with the given module finder.
*/
! static Set<String> compute(ModuleFinder systemModuleFinder, ModuleFinder finder) {
! Set<String> roots = new HashSet<>();
!
! boolean hasJava = false;
! if (systemModuleFinder.find(JAVA_SE).isPresent()) {
! if (finder == systemModuleFinder || finder.find(JAVA_SE).isPresent()) {
! // java.se is a system module
! hasJava = true;
! roots.add(JAVA_SE);
! }
! }
!
! for (ModuleReference mref : systemModuleFinder.findAll()) {
! String mn = mref.descriptor().name();
! if (hasJava && mn.startsWith("java.")) {
! // not a root
! continue;
! }
!
! if (ModuleResolution.doNotResolveByDefault(mref)) {
! // not a root
! continue;
! }
!
! if ((finder == systemModuleFinder || finder.find(mn).isPresent())) {
! // add as root if exports at least one package to all modules
! ModuleDescriptor descriptor = mref.descriptor();
! for (ModuleDescriptor.Exports e : descriptor.exports()) {
! if (!e.isQualified()) {
! roots.add(mn);
! break;
! }
! }
! }
! }
!
! return roots;
}
/**
* Returns the default set of root modules for the unnamed module from the
* modules observable with the given module finder.
*/
public static Set<String> compute(ModuleFinder finder) {
return compute(finder, finder);
}
}
--- 20,81 ----
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+
package jdk.internal.module;
import java.lang.module.ModuleDescriptor;
import java.lang.module.ModuleFinder;
import java.lang.module.ModuleReference;
import java.util.Set;
+ import java.util.stream.Collectors;
/**
* Defines methods to compute the default set of root modules for the unnamed
* module.
*/
public final class DefaultRoots {
private DefaultRoots() { }
/**
! * Returns the default set of root modules for the unnamed module from the
! * modules observable with the intersection of two module finders.
! *
! * The first module finder should be the module finder that finds modules on
! * the upgrade module path or among the system modules. The second module
! * finder should be the module finder that finds all modules on the module
! * path, or a subset of when using --limit-modules.
*/
! static Set<String> compute(ModuleFinder finder1, ModuleFinder finder2) {
! return finder1.findAll().stream()
! .filter(mref -> !ModuleResolution.doNotResolveByDefault(mref))
! .map(ModuleReference::descriptor)
! .filter(descriptor -> finder2.find(descriptor.name()).isPresent()
! && exportsAPI(descriptor))
! .map(ModuleDescriptor::name)
! .collect(Collectors.toSet());
}
/**
* Returns the default set of root modules for the unnamed module from the
* modules observable with the given module finder.
+ *
+ * This method is used by the jlink system modules plugin.
*/
public static Set<String> compute(ModuleFinder finder) {
return compute(finder, finder);
}
+
+ /**
+ * Returns true if the given module exports a package to all modules
+ */
+ private static boolean exportsAPI(ModuleDescriptor descriptor) {
+ return descriptor.exports()
+ .stream()
+ .filter(e -> !e.isQualified())
+ .findAny()
+ .isPresent();
+ }
}
< prev index next >