< prev index next >

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

Print this page

        

*** 31,40 **** --- 31,41 ---- 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.LayerInstantiationException; import java.lang.reflect.Module; import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList;
*** 44,54 **** 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; --- 45,54 ----
*** 325,336 **** resolvedModule.reference().descriptor(); String name = descriptor.name(); for (String p : descriptor.packages()) { String other = packageToModule.putIfAbsent(p, name); if (other != null) { ! fail("Package " + p + " in both module " ! + name + " and module " + other); } } } } --- 325,337 ---- resolvedModule.reference().descriptor(); String name = descriptor.name(); for (String p : descriptor.packages()) { String other = packageToModule.putIfAbsent(p, name); if (other != null) { ! String msg = "Package " + p + " in both module " ! + name + " and module " + other; ! throw new LayerInstantiationException(msg); } } } }
*** 357,367 **** } PerfCounters.loadModulesTime.addElapsedTimeFrom(t5); ! // --add-reads, -add-exports/-add-opens addExtraReads(bootLayer); addExtraExportsAndOpens(bootLayer); // total time to initialize PerfCounters.bootstrapTime.addElapsedTimeFrom(t0); --- 358,368 ---- } PerfCounters.loadModulesTime.addElapsedTimeFrom(t5); ! // --add-reads, --add-exports/--add-opens addExtraReads(bootLayer); addExtraExportsAndOpens(bootLayer); // total time to initialize PerfCounters.bootstrapTime.addElapsedTimeFrom(t0);
*** 512,543 **** /** * Process the --add-exports and --add-opens options to export/open * additional packages specified on the command-line. */ private static void addExtraExportsAndOpens(Layer bootLayer) { // --add-exports String prefix = "jdk.module.addexports."; Map<String, List<String>> extraExports = decode(prefix); if (!extraExports.isEmpty()) { ! addExtraExportsOrOpens(bootLayer, extraExports, false); } // --add-opens prefix = "jdk.module.addopens."; Map<String, List<String>> extraOpens = decode(prefix); if (!extraOpens.isEmpty()) { ! addExtraExportsOrOpens(bootLayer, extraOpens, true); } } private static void addExtraExportsOrOpens(Layer bootLayer, Map<String, List<String>> map, ! boolean opens) { String option = opens ? ADD_OPENS : ADD_EXPORTS; for (Map.Entry<String, List<String>> e : map.entrySet()) { // the key is $MODULE/$PACKAGE String key = e.getKey(); String[] s = key.split("/"); --- 513,563 ---- /** * Process the --add-exports and --add-opens options to export/open * additional packages specified on the command-line. */ private static void addExtraExportsAndOpens(Layer bootLayer) { + IllegalAccessLogger.Builder builder = new IllegalAccessLogger.Builder(); // --add-exports String prefix = "jdk.module.addexports."; Map<String, List<String>> extraExports = decode(prefix); if (!extraExports.isEmpty()) { ! addExtraExportsOrOpens(bootLayer, extraExports, false, builder); } // --add-opens prefix = "jdk.module.addopens."; Map<String, List<String>> extraOpens = decode(prefix); if (!extraOpens.isEmpty()) { ! addExtraExportsOrOpens(bootLayer, extraOpens, true, builder); } + // --permit-illegal-access + if (getAndRemoveProperty("jdk.module.permitIllegalAccess") != null) { + warn("--permit-illegal-access will be removed in the next major release"); + bootLayer.modules().stream().forEach(m -> { + m.getDescriptor() + .packages() + .stream() + .filter(pn -> !m.isOpen(pn)) + .forEach(pn -> { + builder.logAccessToOpenPackage(m, pn, "--permit-illegal-access"); + Modules.addOpensToAllUnnamed(m, pn); + }); + }); + } + + IllegalAccessLogger.setIllegalAccessLogger(builder.build()); } private static void addExtraExportsOrOpens(Layer bootLayer, Map<String, List<String>> map, ! boolean opens, ! IllegalAccessLogger.Builder builder) { String option = opens ? ADD_OPENS : ADD_EXPORTS; + //warn(map.size() + " usage(s) of " + option); for (Map.Entry<String, List<String>> e : map.entrySet()) { // the key is $MODULE/$PACKAGE String key = e.getKey(); String[] s = key.split("/");
*** 579,590 **** --- 599,612 ---- continue; } } if (allUnnamed) { if (opens) { + builder.logAccessToOpenPackage(m, pn, option); Modules.addOpensToAllUnnamed(m, pn); } else { + builder.logAccessToExportedPackage(m, pn, option); Modules.addExportsToAllUnnamed(m, pn); } } else { if (opens) { Modules.addOpens(m, pn, other);
*** 630,640 **** if (rhs.isEmpty()) fail(unableToParse(option(prefix), "<module>=<value>", value)); // value is <module>(,<module>)* or <file>(<pathsep><file>)* if (!allowDuplicates && map.containsKey(key)) ! fail(key + " specified more than once in " + option(prefix)); List<String> values = map.computeIfAbsent(key, k -> new ArrayList<>()); int ntargets = 0; for (String s : rhs.split(regex)) { if (s.length() > 0) { values.add(s); --- 652,662 ---- if (rhs.isEmpty()) fail(unableToParse(option(prefix), "<module>=<value>", value)); // value is <module>(,<module>)* or <file>(<pathsep><file>)* if (!allowDuplicates && map.containsKey(key)) ! fail(key + " specified more than once to " + option(prefix)); List<String> values = map.computeIfAbsent(key, k -> new ArrayList<>()); int ntargets = 0; for (String s : rhs.split(regex)) { if (s.length() > 0) { values.add(s);
*** 674,687 **** String incubating = null; for (ResolvedModule rm : cf.modules()) { ModuleReference mref = rm.reference(); String mn = mref.descriptor().name(); - // emit warning if module name ends with a non-Java letter - if (!Checks.hasLegalModuleNameLastCharacter(mn)) - warn("Module name \"" + mn + "\" may soon be illegal"); - // emit warning if the WARN_INCUBATING module resolution bit set if (ModuleResolution.hasIncubatingWarning(mref)) { if (incubating == null) { incubating = mn; } else { --- 696,705 ----
*** 703,713 **** static void warn(String m) { System.err.println("WARNING: " + m); } static void warnUnknownModule(String option, String mn) { ! warn("Unknown module: " + mn + " specified in " + option); } static String unableToParse(String option, String text, String value) { return "Unable to parse " + option + " " + text + ": " + value; } --- 721,731 ---- static void warn(String m) { System.err.println("WARNING: " + m); } static void warnUnknownModule(String option, String mn) { ! warn("Unknown module: " + mn + " specified to " + option); } static String unableToParse(String option, String text, String value) { return "Unable to parse " + option + " " + text + ": " + value; }
< prev index next >