You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by jh...@apache.org on 2014/04/09 16:18:01 UTC

svn commit: r1585981 - in /ant/core/trunk/src: main/org/apache/tools/ant/taskdefs/ main/org/apache/tools/ant/util/ main/org/apache/tools/ant/util/facade/ tests/junit/org/apache/tools/ant/util/

Author: jhm
Date: Wed Apr  9 14:18:00 2014
New Revision: 1585981

URL: http://svn.apache.org/r1585981
Log:
detect Java9

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java
    ant/core/trunk/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
    ant/core/trunk/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java
    ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java?rev=1585981&r1=1585980&r2=1585981&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java Wed Apr  9 14:18:00 2014
@@ -80,6 +80,7 @@ public class Javac extends MatchingTask 
     private static final String FAIL_MSG
         = "Compile failed; see the compiler error output for details.";
 
+    private static final String JAVAC19 = "javac1.9";
     private static final String JAVAC18 = "javac1.8";
     private static final String JAVAC17 = "javac1.7";
     private static final String JAVAC16 = "javac1.6";
@@ -152,6 +153,8 @@ public class Javac extends MatchingTask 
             return JAVAC17;
         } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) {
             return JAVAC18;
+        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_9)) {
+            return JAVAC19;
         } else {
             return CLASSIC;
         }
@@ -767,8 +770,9 @@ public class Javac extends MatchingTask 
     }
 
     private String getAltCompilerName(String anImplementation) {
-        if (JAVAC17.equalsIgnoreCase(anImplementation)
+        if (JAVAC19.equalsIgnoreCase(anImplementation)
                 || JAVAC18.equalsIgnoreCase(anImplementation)
+                || JAVAC17.equalsIgnoreCase(anImplementation)
                 || JAVAC16.equalsIgnoreCase(anImplementation)
                 || JAVAC15.equalsIgnoreCase(anImplementation)
                 || JAVAC14.equalsIgnoreCase(anImplementation)
@@ -781,8 +785,9 @@ public class Javac extends MatchingTask 
         }
         if (MODERN.equalsIgnoreCase(anImplementation)) {
             String nextSelected = assumedJavaVersion();
-            if (JAVAC17.equalsIgnoreCase(nextSelected)
+            if (JAVAC19.equalsIgnoreCase(nextSelected)
                     || JAVAC18.equalsIgnoreCase(nextSelected)
+                    || JAVAC17.equalsIgnoreCase(nextSelected)
                     || JAVAC16.equalsIgnoreCase(nextSelected)
                     || JAVAC15.equalsIgnoreCase(nextSelected)
                     || JAVAC14.equalsIgnoreCase(nextSelected)
@@ -1013,12 +1018,13 @@ public class Javac extends MatchingTask 
      *
      * @param compilerImpl the name of the compiler implementation
      * @return true if compilerImpl is "modern", "classic",
-     * "javac1.1", "javac1.2", "javac1.3", "javac1.4", "javac1.5" or
-     * "javac1.6".
+     * "javac1.1", "javac1.2", "javac1.3", "javac1.4", "javac1.5",
+     * "javac1.6", "javac1.7", "javac1.8" or "javac1.9".
      */
     protected boolean isJdkCompiler(String compilerImpl) {
         return MODERN.equals(compilerImpl)
             || CLASSIC.equals(compilerImpl)
+            || JAVAC19.equals(compilerImpl)
             || JAVAC18.equals(compilerImpl)
             || JAVAC17.equals(compilerImpl)
             || JAVAC16.equals(compilerImpl)
@@ -1243,6 +1249,7 @@ public class Javac extends MatchingTask 
             }
         }
     }
+
     private static final byte[] PACKAGE_INFO_CLASS_HEADER = {
         (byte) 0xca, (byte) 0xfe, (byte) 0xba, (byte) 0xbe, 0x00, 0x00, 0x00,
         0x31, 0x00, 0x07, 0x07, 0x00, 0x05, 0x07, 0x00, 0x06, 0x01, 0x00, 0x0a,
@@ -1250,6 +1257,7 @@ public class Javac extends MatchingTask 
         0x11, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2d, 0x69, 0x6e, 0x66,
         0x6f, 0x2e, 0x6a, 0x61, 0x76, 0x61, 0x01
     };
+
     private static final byte[] PACKAGE_INFO_CLASS_FOOTER = {
         0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2d, 0x69, 0x6e, 0x66,
         0x6f, 0x01, 0x00, 0x10, 0x6a, 0x61, 0x76, 0x61, 0x2f, 0x6c, 0x61, 0x6e,

Modified: ant/core/trunk/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/JavaEnvUtils.java?rev=1585981&r1=1585980&r2=1585981&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/JavaEnvUtils.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/JavaEnvUtils.java Wed Apr  9 14:18:00 2014
@@ -17,11 +17,12 @@
  */
 package org.apache.tools.ant.util;
 
+import java.io.BufferedWriter;
 import java.io.File;
-import java.io.IOException;
 import java.io.FileWriter;
-import java.io.BufferedWriter;
+import java.io.IOException;
 import java.util.Vector;
+
 import org.apache.tools.ant.taskdefs.condition.Os;
 
 /**
@@ -99,6 +100,11 @@ public final class JavaEnvUtils {
     /** Number Version constant for Java 1.8 */
     public static final int VERSION_1_8 = 18;
 
+    /** Version constant for Java 1.9 */
+    public static final String JAVA_1_9 = "1.9";
+    /** Number Version constant for Java 1.9 */
+    public static final int VERSION_1_9 = 19;
+
     /** Whether this is the Kaffe VM */
     private static boolean kaffeDetected;
 
@@ -152,6 +158,9 @@ public final class JavaEnvUtils {
             Class.forName("java.lang.reflect.Executable");
             javaVersion = JAVA_1_8;
             javaVersionNumber++;
+            checkForJava9();
+            javaVersion = JAVA_1_9;
+            javaVersionNumber++;
         } catch (Throwable t) {
             // swallow as we've hit the max class version that
             // we have
@@ -196,6 +205,24 @@ public final class JavaEnvUtils {
 
 
     /**
+     * Checks for a give Java 9 runtime.
+     * At the time of writing the actual version of the JDK was 1.9.0_b06.
+     * Searching for new classes gave no hits, so we need another aproach.
+     * Searching for changes (grep -r -i -n "@since 1.9" .) in the sources gave
+     * only one hit: a new constant in the class SourceVersion.
+     * So we have to check that ...
+     * 
+     * @throws An exception if we can't load the class or don't find the new constant.
+     *    This is the behavior when searching for new features on older versions.
+     * @since Ant 1.9.4
+     */
+    private static void checkForJava9() throws Exception {
+    	Class<?> clazz = Class.forName("javax.lang.model.SourceVersion");
+    	clazz.getDeclaredField("RELEASE_9");
+	}
+
+
+	/**
      * Returns the version of Java this class is running under.
      * This number can be used for comparisons; it will always be
      * @return the version of Java as a number 10x the major/minor,
@@ -398,6 +425,7 @@ public final class JavaEnvUtils {
     private static void buildJrePackages() {
         jrePackages = new Vector<String>();
         switch(javaVersionNumber) {
+        	case VERSION_1_9:
             case VERSION_1_8:
             case VERSION_1_7:
             case VERSION_1_6:
@@ -446,20 +474,22 @@ public final class JavaEnvUtils {
      * Testing helper method; kept here for unification of changes.
      * @return a list of test classes depending on the java version.
      */
-    public static Vector getJrePackageTestCases() {
-        Vector tests = new Vector();
+    public static Vector<String> getJrePackageTestCases() {
+        Vector<String> tests = new Vector<String>();
         tests.addElement("java.lang.Object");
         switch(javaVersionNumber) {
+            case VERSION_1_9:
             case VERSION_1_8:
             case VERSION_1_7:
             case VERSION_1_6:
             case VERSION_1_5:
                 tests.addElement(
                     "com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl ");
-                // Fall tru
+                // Fall through
             case VERSION_1_4:
                 tests.addElement("sun.audio.AudioPlayer");
                 if (javaVersionNumber == VERSION_1_4) {
+                	// only for 1.4, not for higher versions which fall through
                     tests.addElement("org.apache.crimson.parser.ContentModel");
                     tests.addElement("org.apache.xalan.processor.ProcessorImport");
                     tests.addElement("org.apache.xml.utils.URI");

Modified: ant/core/trunk/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java?rev=1585981&r1=1585980&r2=1585981&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java Wed Apr  9 14:18:00 2014
@@ -19,8 +19,8 @@
 package org.apache.tools.ant.util.facade;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
+
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.types.Path;
 
@@ -37,7 +37,7 @@ public class FacadeTaskHelper {
     /**
      * Command line arguments.
      */
-    private List args = new ArrayList();
+    private List<ImplementationSpecificArgument> args = new ArrayList<ImplementationSpecificArgument>();
 
     /**
      * The explicitly chosen implementation.
@@ -126,10 +126,8 @@ public class FacadeTaskHelper {
      * @return an array of command line arguments.
      */
     public String[] getArgs() {
-        List tmp = new ArrayList(args.size());
-        for (Iterator e = args.iterator(); e.hasNext();) {
-            ImplementationSpecificArgument arg =
-                ((ImplementationSpecificArgument) e.next());
+        List<String> tmp = new ArrayList<String>(args.size());
+        for (ImplementationSpecificArgument arg : args) {
             String[] curr = arg.getParts(getImplementation());
             if (curr != null) {
                 for (int i = 0; i < curr.length; i++) {

Modified: ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java?rev=1585981&r1=1585980&r2=1585981&view=diff
==============================================================================
--- ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java (original)
+++ ant/core/trunk/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java Wed Apr  9 14:18:00 2014
@@ -136,5 +136,5 @@ public class JavaEnvUtilsTest extends Te
                 "In case the current java version is higher than 9.0 definitely a new algorithem will be needed",
                 JavaEnvUtils.isAtLeastJavaVersion("9.0"));
     }
-
+  
 }