< 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 >