--- old/src/java.base/share/classes/sun/launcher/LauncherHelper.java 2017-03-21 13:44:15.956308871 +0000 +++ new/src/java.base/share/classes/sun/launcher/LauncherHelper.java 2017-03-21 13:44:15.752294872 +0000 @@ -85,6 +85,7 @@ import java.util.stream.Stream; import jdk.internal.misc.VM; +import jdk.internal.module.IllegalAccessLogger; import jdk.internal.module.Modules; @@ -428,14 +429,20 @@ abort(null, "java.launcher.jar.error3", jarname); } - // Add-Exports and Add-Opens to break encapsulation + // Add-Exports and Add-Opens to allow illegal access String exports = mainAttrs.getValue(ADD_EXPORTS); if (exports != null) { - addExportsOrOpens(exports, false); + 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) { - addExportsOrOpens(opens, true); + String warn = getLocalizedMessage("java.launcher.permitaccess.warning", + jarname, ADD_OPENS); + System.err.println(warn); + addExportsOrOpens(opens, true, ADD_OPENS); } /* @@ -460,23 +467,36 @@ * Process the Add-Exports or Add-Opens value. The value is * {@code / ( /)*}. */ - static void addExportsOrOpens(String value, boolean open) { + 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: