< prev index next >
src/java.base/share/classes/sun/launcher/LauncherHelper.java
Print this page
*** 83,92 ****
--- 83,93 ----
import java.util.jar.Manifest;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import jdk.internal.misc.VM;
+ import jdk.internal.module.IllegalAccessLogger;
import jdk.internal.module.Modules;
public final class LauncherHelper {
*** 426,443 ****
mainValue = mainAttrs.getValue(MAIN_CLASS);
if (mainValue == null) {
abort(null, "java.launcher.jar.error3", jarname);
}
! // Add-Exports and Add-Opens to break encapsulation
String exports = mainAttrs.getValue(ADD_EXPORTS);
if (exports != null) {
! addExportsOrOpens(exports, false);
}
String opens = mainAttrs.getValue(ADD_OPENS);
if (opens != null) {
! addExportsOrOpens(opens, true);
}
/*
* Hand off to FXHelper if it detects a JavaFX application
* This must be done after ensuring a Main-Class entry
--- 427,450 ----
mainValue = mainAttrs.getValue(MAIN_CLASS);
if (mainValue == null) {
abort(null, "java.launcher.jar.error3", jarname);
}
! // Add-Exports and Add-Opens to allow illegal access
String exports = mainAttrs.getValue(ADD_EXPORTS);
if (exports != null) {
! String warn = getLocalizedMessage("java.launcher.permitaccess.warning",
! jarname, ADD_EXPORTS);
! System.err.println(warn);
! addExportsOrOpens(exports, false, ADD_EXPORTS);
}
String opens = mainAttrs.getValue(ADD_OPENS);
if (opens != null) {
! String warn = getLocalizedMessage("java.launcher.permitaccess.warning",
! jarname, ADD_OPENS);
! System.err.println(warn);
! addExportsOrOpens(opens, true, ADD_OPENS);
}
/*
* Hand off to FXHelper if it detects a JavaFX application
* This must be done after ensuring a Main-Class entry
*** 458,484 ****
/**
* Process the Add-Exports or Add-Opens value. The value is
* {@code <module>/<package> ( <module>/<package>)*}.
*/
! static void addExportsOrOpens(String value, boolean open) {
for (String moduleAndPackage : value.split(" ")) {
String[] s = moduleAndPackage.trim().split("/");
if (s.length == 2) {
String mn = s[0];
String pn = s[1];
Layer.boot().findModule(mn).ifPresent(m -> {
if (m.getDescriptor().packages().contains(pn)) {
if (open) {
Modules.addOpensToAllUnnamed(m, pn);
} else {
Modules.addExportsToAllUnnamed(m, pn);
}
}
});
}
}
}
// From src/share/bin/java.c:
// enum LaunchMode { LM_UNKNOWN = 0, LM_CLASS, LM_JAR, LM_MODULE }
--- 465,504 ----
/**
* Process the Add-Exports or Add-Opens value. The value is
* {@code <module>/<package> ( <module>/<package>)*}.
*/
! static void addExportsOrOpens(String value, boolean open, String how) {
! IllegalAccessLogger.Builder builder;
! IllegalAccessLogger logger = IllegalAccessLogger.illegalAccessLogger();
! if (logger == null) {
! builder = new IllegalAccessLogger.Builder();
! } else {
! builder = logger.toBuilder();
! }
!
for (String moduleAndPackage : value.split(" ")) {
String[] s = moduleAndPackage.trim().split("/");
if (s.length == 2) {
String mn = s[0];
String pn = s[1];
+
Layer.boot().findModule(mn).ifPresent(m -> {
if (m.getDescriptor().packages().contains(pn)) {
if (open) {
+ builder.logAccessToOpenPackage(m, pn, how);
Modules.addOpensToAllUnnamed(m, pn);
} else {
+ builder.logAccessToExportedPackage(m, pn, how);
Modules.addExportsToAllUnnamed(m, pn);
}
}
});
}
}
+
+ IllegalAccessLogger.setIllegalAccessLogger(builder.build());
}
// From src/share/bin/java.c:
// enum LaunchMode { LM_UNKNOWN = 0, LM_CLASS, LM_JAR, LM_MODULE }
< prev index next >