# HG changeset patch # User ksrini # Date 1399163031 25200 # Node ID 2da866863b98ee3c70fdb6ea3082fbf2da5b71c3 # Parent ce29e10e4b4108f3969b13ea064eb0fdcd0bf835 8035782: sun/launcher/LauncherHelper$FXHelper loaded unnecessarily Reviewed-by: ddehaven, kcr, ksrini, mchung Contributed-by: neil.toda@oracle.com diff -r ce29e10e4b41 -r 2da866863b98 jdk/src/share/classes/sun/launcher/LauncherHelper.java --- a/jdk/src/share/classes/sun/launcher/LauncherHelper.java Fri May 02 11:25:07 2014 -0700 +++ b/jdk/src/share/classes/sun/launcher/LauncherHelper.java Sat May 03 17:23:51 2014 -0700 @@ -69,6 +69,14 @@ public enum LauncherHelper { INSTANCE; + + // used to identify JavaFX applications + private static final String JAVAFX_APPLICATION_MARKER = + "JavaFX-Application-Class"; + private static final String JAVAFX_APPLICATION_CLASS_NAME = + "javafx.application.Application"; + private static final String JAVAFX_FXHELPER_CLASS_NAME_SUFFIX = + "sun.launcher.LauncherHelper$FXHelper"; private static final String MAIN_CLASS = "Main-Class"; private static StringBuilder outBuf = new StringBuilder(); @@ -418,7 +426,8 @@ * exists to enforce compliance with the jar specification */ if (mainAttrs.containsKey( - new Attributes.Name(FXHelper.JAVAFX_APPLICATION_MARKER))) { + new Attributes.Name(JAVAFX_APPLICATION_MARKER))) { + FXHelper.setFXLaunchParameters(jarname, LM_JAR); return FXHelper.class.getName(); } @@ -516,9 +525,9 @@ * the main class may or may not have a main method, so do this before * validating the main class. */ - if (mainClass.equals(FXHelper.class) || - FXHelper.doesExtendFXApplication(mainClass)) { - // Will abort() if there are problems with the FX runtime + if (JAVAFX_FXHELPER_CLASS_NAME_SUFFIX.equals(mainClass.getName()) || + doesExtendFXApplication(mainClass)) { + // Will abort() if there are problems with FX runtime FXHelper.setFXLaunchParameters(what, mode); return FXHelper.class; } @@ -537,6 +546,21 @@ return appClass; } + /* + * Check if the given class is a JavaFX Application class. This is done + * in a way that does not cause the Application class to load or throw + * ClassNotFoundException if the JavaFX runtime is not available. + */ + private static boolean doesExtendFXApplication(Class mainClass) { + for (Class sc = mainClass.getSuperclass(); sc != null; + sc = sc.getSuperclass()) { + if (sc.getName().equals(JAVAFX_APPLICATION_CLASS_NAME)) { + return true; + } + } + return false; + } + // Check the existence and signature of main and abort if incorrect static void validateMainClass(Class mainClass) { Method mainMethod; @@ -545,7 +569,7 @@ } catch (NoSuchMethodException nsme) { // invalid main or not FX application, abort with an error abort(null, "java.launcher.cls.error4", mainClass.getName(), - FXHelper.JAVAFX_APPLICATION_CLASS_NAME); + JAVAFX_APPLICATION_CLASS_NAME); return; // Avoid compiler issues } @@ -668,11 +692,7 @@ } static final class FXHelper { - // Marker entry in jar manifest that designates a JavaFX application jar - private static final String JAVAFX_APPLICATION_MARKER = - "JavaFX-Application-Class"; - private static final String JAVAFX_APPLICATION_CLASS_NAME = - "javafx.application.Application"; + private static final String JAVAFX_LAUNCHER_CLASS_NAME = "com.sun.javafx.application.LauncherImpl"; @@ -742,21 +762,6 @@ } } - /* - * Check if the given class is a JavaFX Application class. This is done - * in a way that does not cause the Application class to load or throw - * ClassNotFoundException if the JavaFX runtime is not available. - */ - private static boolean doesExtendFXApplication(Class mainClass) { - for (Class sc = mainClass.getSuperclass(); sc != null; - sc = sc.getSuperclass()) { - if (sc.getName().equals(JAVAFX_APPLICATION_CLASS_NAME)) { - return true; - } - } - return false; - } - public static void main(String... args) throws Exception { if (fxLauncherMethod == null || fxLaunchMode == null diff -r ce29e10e4b41 -r 2da866863b98 jdk/test/tools/launcher/FXLauncherTest.java --- a/jdk/test/tools/launcher/FXLauncherTest.java Fri May 02 11:25:07 2014 -0700 +++ b/jdk/test/tools/launcher/FXLauncherTest.java Sat May 03 17:23:51 2014 -0700 @@ -23,7 +23,7 @@ /* * @test - * @bug 8001533 8004547 + * @bug 8001533 8004547 8035782 * @summary Test launching FX application with java -jar * Test uses main method and blank main method, a jfx app class and an incorrest * jfx app class, a main-class for the manifest, a bogus one and none. @@ -373,6 +373,11 @@ System.out.println(tr); throw new Exception("jfxrt.jar is being loaded, it should not be!"); } + if (!tr.notContains("sun.launcher.LauncherHelper$FXHelper")) { + System.out.println("testing for extraneous 'sun.launcher.LauncherHelper$FXHelper'"); + System.out.println(tr); + throw new Exception("FXHelper is being loaded, it should not be!"); + } for (String p : APP_PARMS) { if (!tr.contains(p)) { System.err.println("ERROR: Did not find "