< prev index next >

src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java

Print this page

        

*** 24,42 **** --- 24,45 ---- */ package jdk.internal.module; import java.io.File; + import java.io.IOException; import java.io.PrintStream; + import java.io.UncheckedIOException; import java.lang.module.Configuration; import java.lang.module.ModuleDescriptor; import java.lang.module.ModuleFinder; import java.lang.module.ModuleReference; import java.lang.module.ResolvedModule; import java.lang.reflect.Layer; import java.lang.reflect.Module; import java.net.URI; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap;
*** 44,53 **** --- 47,57 ---- import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.function.Function; + import java.util.stream.Stream; import jdk.internal.loader.BootLoader; import jdk.internal.loader.BuiltinClassLoader; import jdk.internal.misc.SharedSecrets; import jdk.internal.perf.PerfCounter;
*** 112,122 **** public static Layer boot() { long t0 = System.nanoTime(); // system modules (may be patched) ! ModuleFinder systemModules = ModuleFinder.ofSystem(); PerfCounters.systemModulesTime.addElapsedTimeFrom(t0); long t1 = System.nanoTime(); --- 116,131 ---- public static Layer boot() { long t0 = System.nanoTime(); // system modules (may be patched) ! ModuleFinder systemModules; ! if (SystemModules.MODULE_NAMES.length > 0) { ! systemModules = SystemModuleFinder.getInstance(); ! } else { ! systemModules = ModuleFinder.ofSystem(); ! } PerfCounters.systemModulesTime.addElapsedTimeFrom(t0); long t1 = System.nanoTime();
*** 273,283 **** if (Boolean.getBoolean("jdk.launcher.traceResolver")) traceOutput = System.out; // run the resolver to create the configuration Configuration cf = SharedSecrets.getJavaLangModuleAccess() ! .resolveRequiresAndUses(finder, roots, needPostResolutionChecks, traceOutput); // time to create configuration --- 282,292 ---- if (Boolean.getBoolean("jdk.launcher.traceResolver")) traceOutput = System.out; // run the resolver to create the configuration Configuration cf = SharedSecrets.getJavaLangModuleAccess() ! .resolveAndBind(finder, roots, needPostResolutionChecks, traceOutput); // time to create configuration
*** 378,389 **** private static ModuleFinder limitFinder(ModuleFinder finder, Set<String> roots, Set<String> otherMods) { // resolve all root modules ! Configuration cf = Configuration.empty() ! .resolveRequires(finder, ModuleFinder.of(), roots); // module name -> reference Map<String, ModuleReference> map = new HashMap<>(); --- 387,397 ---- private static ModuleFinder limitFinder(ModuleFinder finder, Set<String> roots, Set<String> otherMods) { // resolve all root modules ! Configuration cf = Configuration.empty().resolve(finder, ModuleFinder.of(), roots); // module name -> reference Map<String, ModuleReference> map = new HashMap<>();
*** 526,537 **** --- 534,585 ---- prefix = "jdk.module.addopens."; Map<String, List<String>> extraOpens = decode(prefix); if (!extraOpens.isEmpty()) { addExtraExportsOrOpens(bootLayer, extraOpens, true); } + + // DEBUG_ADD_OPENS is for debugging purposes only + String home = System.getProperty("java.home"); + Path file = Paths.get(home, "conf", "DEBUG_ADD_OPENS"); + if (Files.exists(file)) { + warn(file + " detected; may break encapsulation"); + try (Stream<String> lines = Files.lines(file)) { + lines.map(line -> line.trim()) + .filter(line -> (!line.isEmpty() && !line.startsWith("#"))) + .forEach(line -> { + String[] s = line.split("/"); + if (s.length != 2) { + fail("Unable to parse as <module>/<package>: " + line); + } else { + String mn = s[0]; + String pkg = s[1]; + openPackage(bootLayer, mn, pkg); + } + }); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } } + private static void openPackage(Layer bootLayer, String mn, String pkg) { + if (mn.equals("ALL-RESOLVED") && pkg.equals("ALL-PACKAGES")) { + bootLayer.modules().stream().forEach(m -> + m.getDescriptor().packages().forEach(pn -> openPackage(m, pn))); + } else { + bootLayer.findModule(mn) + .filter(m -> m.getDescriptor().packages().contains(pkg)) + .ifPresent(m -> openPackage(m, pkg)); + } + } + + private static void openPackage(Module m, String pn) { + Modules.addOpensToAllUnnamed(m, pn); + warn("Opened for deep reflection: " + m.getName() + "/" + pn); + } + + private static void addExtraExportsOrOpens(Layer bootLayer, Map<String, List<String>> map, boolean opens) { String option = opens ? ADD_OPENS : ADD_EXPORTS;
< prev index next >