From d49dacf854f8996fc980fca977ea2bf825e1e062 Mon Sep 17 00:00:00 2001 From: jkf Date: Sat, 15 Jun 2019 13:42:21 +0200 Subject: [PATCH] JavaEnvUtils - Suppot of JDK1.8+ only Updated JavaEnvUtils to reflect that we are running JDK 1.8+, and removal of checks that have become obsolete as a consequence thereof --- .../tools/ant/taskdefs/GenerateKey.java | 7 +- .../org/apache/tools/ant/taskdefs/Javac.java | 20 +- .../apache/tools/ant/taskdefs/Javadoc.java | 6 +- .../apache/tools/ant/util/JavaEnvUtils.java | 204 ++++++++---------- .../tools/ant/util/JavaEnvUtilsTest.java | 23 ++ 5 files changed, 114 insertions(+), 146 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java b/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java index e853a905d..e713e8689 100644 --- a/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java +++ b/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java @@ -195,12 +195,7 @@ public class GenerateKey extends Task { * @since Ant 1.9.14 */ public void setSaname(final String saname) { - if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_7)) { - this.saname = saname; - } else { - log("The SubjectAlternativeName extension is not available for " - +"the Java Version being used."); - } + this.saname = saname; } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java index b28c298a9..bdb0cc765 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javac.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java @@ -160,28 +160,16 @@ public class Javac extends MatchingTask { } private String assumedJavaVersion() { - if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) { - return JAVAC14; - } - if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_5)) { - return JAVAC15; - } - if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) { - return JAVAC16; - } - if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) { - return JAVAC17; - } if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) { return JAVAC18; } - if (JavaEnvUtils.isAtLeastJavaVersion("10")) { - return JAVAC10_PLUS; - } if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) { return JAVAC9; } - return CLASSIC; + if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_10)) { + return JAVAC10_PLUS; + } + return MODERN; // as we are assumed to be 1.8+ and classic refers to the really old ones, default to modern } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java index 3e6473006..ee53c50ef 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java @@ -86,10 +86,6 @@ import org.apache.tools.ant.util.JavaEnvUtils; * @ant.task category="java" */ public class Javadoc extends Task { - // Whether *this VM* is 1.4+ (but also check executable != null). - - private static final boolean JAVADOC_5 = - !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4); private static final String LOAD_FRAME = "function loadFrames() {"; private static final int LOAD_FRAME_LEN = LOAD_FRAME.length(); @@ -1851,7 +1847,7 @@ public class Javadoc extends Task { doModuleArguments(toExecute); doJava14(toExecute); - if (breakiterator && (doclet == null || JAVADOC_5)) { + if (breakiterator) { toExecute.createArgument().setValue("-breakiterator"); } // If using an external file, write the command line options to it diff --git a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java index bd5e65318..fe5a02498 100644 --- a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java +++ b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java @@ -127,6 +127,42 @@ public final class JavaEnvUtils { * @since Ant 1.9.8 */ public static final int VERSION_9 = 90; + + /** + * Version constant for Java 10 + * @since Ant 1.10.7 + */ + public static final String JAVA_10 = "10"; + /** + * Number Version constant for Java 10 + * @since Ant 1.10.7 + */ + public static final int VERSION_10 = 100; + + /** + * Version constant for Java 11 + * @since Ant 1.10.7 + */ + public static final String JAVA_11 = "11"; + /** + * Number Version constant for Java 11 + * @since Ant 1.10.7 + */ + public static final int VERSION_11 = 110; + + /** + * Version constant for Java 12 + * @since Ant 1.10.7 + */ + + public static final String JAVA_12 = "12"; + /** + * Number Version constant for Java 12 + * @since Ant 1.10.7 + */ + public static final int VERSION_12 = 120; + + /** Whether this is the Kaffe VM */ private static boolean kaffeDetected; @@ -148,44 +184,11 @@ public final class JavaEnvUtils { static { - // Determine the Java version by looking at available classes - // java.net.Proxy was introduced in JDK 1.5 - // java.lang.CharSequence was introduced in JDK 1.4 - // java.lang.StrictMath was introduced in JDK 1.3 - // java.lang.ThreadLocal was introduced in JDK 1.2 - // java.lang.Void was introduced in JDK 1.1 - // Count up version until a NoClassDefFoundError ends the try - try { - javaVersion = JAVA_1_0; - javaVersionNumber = VERSION_1_0; - Class.forName("java.lang.Void"); - javaVersion = JAVA_1_1; - javaVersionNumber++; - Class.forName("java.lang.ThreadLocal"); - javaVersion = JAVA_1_2; - javaVersionNumber++; - Class.forName("java.lang.StrictMath"); - javaVersion = JAVA_1_3; - javaVersionNumber++; - Class.forName("java.lang.CharSequence"); - javaVersion = JAVA_1_4; - javaVersionNumber++; - Class.forName("java.net.Proxy"); - javaVersion = JAVA_1_5; - javaVersionNumber++; - Class.forName("java.net.CookieStore"); - javaVersion = JAVA_1_6; - javaVersionNumber++; - Class.forName("java.nio.file.FileSystem"); - javaVersion = JAVA_1_7; - javaVersionNumber++; - Class.forName("java.lang.reflect.Executable"); + // only java 1.8 up supported. javaVersion = JAVA_1_8; - javaVersionNumber++; + javaVersionNumber = VERSION_1_8; Class.forName("java.lang.module.ModuleDescriptor"); - javaVersion = JAVA_9; - javaVersionNumber = VERSION_9; // at least Java9 and this should properly support the purely numeric version property String v = System.getProperty("java.specification.version"); DeweyDecimal pv = new DeweyDecimal(v); @@ -462,97 +465,60 @@ public final class JavaEnvUtils { */ private static void buildJrePackages() { - jrePackages = new Vector<>(); - if (isAtLeastJavaVersion(JAVA_1_1)) { - //things like sun.reflection, sun.misc, sun.net - jrePackages.addElement("sun"); - jrePackages.addElement("java"); - jrePackages.addElement("javax"); - } - if (isAtLeastJavaVersion(JAVA_1_2)) { - jrePackages.addElement("com.sun.java"); - jrePackages.addElement("com.sun.image"); - // are there any here that we forgot? - } - if (isAtLeastJavaVersion(JAVA_1_3)) { - jrePackages.addElement("org.omg"); - jrePackages.addElement("com.sun.corba"); - jrePackages.addElement("com.sun.jndi"); - jrePackages.addElement("com.sun.media"); - jrePackages.addElement("com.sun.naming"); - jrePackages.addElement("com.sun.org.omg"); - jrePackages.addElement("com.sun.rmi"); - jrePackages.addElement("sunw.io"); - jrePackages.addElement("sunw.util"); - } - if (isAtLeastJavaVersion(JAVA_1_4)) { - if (javaVersionNumber == VERSION_1_4) { - jrePackages.addElement("org.apache.crimson"); - jrePackages.addElement("org.apache.xalan"); - jrePackages.addElement("org.apache.xml"); - jrePackages.addElement("org.apache.xpath"); - } - jrePackages.addElement("org.ietf.jgss"); - jrePackages.addElement("org.w3c.dom"); - jrePackages.addElement("org.xml.sax"); - } - if (isAtLeastJavaVersion(JAVA_1_5)) { - //In Java1.5, the apache stuff moved. - jrePackages.addElement("com.sun.org.apache"); - } - if (isAtLeastJavaVersion(JAVA_1_7)) { - jrePackages.addElement("jdk"); - } - } + // do we still need this? As we only support java 1.8 upwards this would be the fixed list + // is this list correct for java 9 and above? + jrePackages = new Vector<>(); + jrePackages.addElement("sun"); + jrePackages.addElement("java"); + jrePackages.addElement("javax"); + jrePackages.addElement("com.sun.java"); + jrePackages.addElement("com.sun.image"); + jrePackages.addElement("org.omg"); + jrePackages.addElement("com.sun.corba"); + jrePackages.addElement("com.sun.jndi"); + jrePackages.addElement("com.sun.media"); + jrePackages.addElement("com.sun.naming"); + jrePackages.addElement("com.sun.org.omg"); + jrePackages.addElement("com.sun.rmi"); + jrePackages.addElement("sunw.io"); + jrePackages.addElement("sunw.util"); + jrePackages.addElement("org.ietf.jgss"); + jrePackages.addElement("org.w3c.dom"); + jrePackages.addElement("org.xml.sax"); + jrePackages.addElement("com.sun.org.apache"); + jrePackages.addElement("jdk"); + } /** * Testing helper method; kept here for unification of changes. * @return a list of test classes depending on the java version. */ public static Vector getJrePackageTestCases() { + // do we still need this? As we only support java 1.8 upwards this would be the fixed list + // is this list correct for java 9 and above? Vector tests = new Vector<>(); - tests.addElement("java.lang.Object"); - if (isAtLeastJavaVersion(JAVA_1_1)) { - //things like sun.reflection, sun.misc, sun.net - tests.addElement("sun.reflect.SerializationConstructorAccessorImpl"); - tests.addElement("sun.net.www.http.HttpClient"); - tests.addElement("sun.audio.AudioPlayer"); - } - if (isAtLeastJavaVersion(JAVA_1_2)) { - tests.addElement("javax.accessibility.Accessible"); - tests.addElement("sun.misc.BASE64Encoder"); - tests.addElement("com.sun.image.codec.jpeg.JPEGCodec"); - } - if (isAtLeastJavaVersion(JAVA_1_3)) { - tests.addElement("org.omg.CORBA.Any"); - tests.addElement("com.sun.corba.se.internal.corba.AnyImpl"); - tests.addElement("com.sun.jndi.ldap.LdapURL"); - tests.addElement("com.sun.media.sound.Printer"); - tests.addElement("com.sun.naming.internal.VersionHelper"); - tests.addElement("com.sun.org.omg.CORBA.Initializer"); - tests.addElement("sunw.io.Serializable"); - tests.addElement("sunw.util.EventListener"); - } - if (isAtLeastJavaVersion(JAVA_1_4)) { - tests.addElement("sun.audio.AudioPlayer"); - if (javaVersionNumber == VERSION_1_4) { - // only for 1.4, not for higher versions - tests.addElement("org.apache.crimson.parser.ContentModel"); - tests.addElement("org.apache.xalan.processor.ProcessorImport"); - tests.addElement("org.apache.xml.utils.URI"); - tests.addElement("org.apache.xpath.XPathFactory"); - } - tests.addElement("org.ietf.jgss.Oid"); - tests.addElement("org.w3c.dom.Attr"); - tests.addElement("org.xml.sax.XMLReader"); - } - if (isAtLeastJavaVersion(JAVA_1_5)) { - tests.addElement("com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl"); - } - if (isAtLeastJavaVersion(JAVA_1_7)) { - tests.addElement("jdk.net.Sockets"); - } - return tests; + tests.addElement("java.lang.Object"); + tests.addElement("sun.reflect.SerializationConstructorAccessorImpl"); + tests.addElement("sun.net.www.http.HttpClient"); + tests.addElement("sun.audio.AudioPlayer"); + tests.addElement("javax.accessibility.Accessible"); + tests.addElement("sun.misc.BASE64Encoder"); + tests.addElement("com.sun.image.codec.jpeg.JPEGCodec"); + tests.addElement("org.omg.CORBA.Any"); + tests.addElement("com.sun.corba.se.internal.corba.AnyImpl"); + tests.addElement("com.sun.jndi.ldap.LdapURL"); + tests.addElement("com.sun.media.sound.Printer"); + tests.addElement("com.sun.naming.internal.VersionHelper"); + tests.addElement("com.sun.org.omg.CORBA.Initializer"); + tests.addElement("sunw.io.Serializable"); + tests.addElement("sunw.util.EventListener"); + tests.addElement("sun.audio.AudioPlayer"); + tests.addElement("org.ietf.jgss.Oid"); + tests.addElement("org.w3c.dom.Attr"); + tests.addElement("org.xml.sax.XMLReader"); + tests.addElement("com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl"); + tests.addElement("jdk.net.Sockets"); + return tests; } /** * get a vector of strings of packages built into diff --git a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java index 10b96be3f..65631d5ca 100644 --- a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java +++ b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java @@ -144,5 +144,28 @@ public class JavaEnvUtilsTest { assertTrue(JavaEnvUtils.isJavaVersion("10")); assertTrue(JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)); } + + @Test + @SuppressWarnings("deprecation") + public void java11IsDetectedProperly() { + assumeTrue("11".equals(System.getProperty("java.specification.version"))); + assertEquals("11", JavaEnvUtils.getJavaVersion()); + assertEquals(110, JavaEnvUtils.getJavaVersionNumber()); + assertEquals(new DeweyDecimal("11"), JavaEnvUtils.getParsedJavaVersion()); + assertTrue(JavaEnvUtils.isJavaVersion("11")); + assertTrue(JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)); + } + + @Test + @SuppressWarnings("deprecation") + public void java12IsDetectedProperly() { + assumeTrue("12".equals(System.getProperty("java.specification.version"))); + assertEquals("12", JavaEnvUtils.getJavaVersion()); + assertEquals(120, JavaEnvUtils.getJavaVersionNumber()); + assertEquals(new DeweyDecimal("12"), JavaEnvUtils.getParsedJavaVersion()); + assertTrue(JavaEnvUtils.isJavaVersion("12")); + assertTrue(JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)); + } + }