ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bode...@apache.org
Subject [3/3] ant git commit: nobody is going to call Java 9 1.9 anymore
Date Mon, 25 Jul 2016 10:22:50 GMT
nobody is going to call Java 9 1.9 anymore

https://bz.apache.org/bugzilla/show_bug.cgi?id=59863


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/625d3d37
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/625d3d37
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/625d3d37

Branch: refs/heads/1.9.x
Commit: 625d3d371fc6454232e69cb6d0c68373341feb71
Parents: dda54c6
Author: Stefan Bodewig <bodewig@apache.org>
Authored: Mon Jul 25 12:21:47 2016 +0200
Committer: Stefan Bodewig <bodewig@apache.org>
Committed: Mon Jul 25 12:21:47 2016 +0200

----------------------------------------------------------------------
 WHATSNEW                                        |  3 +
 manual/Tasks/javac.html                         |  3 +-
 manual/properties.html                          |  2 +-
 .../org/apache/tools/ant/taskdefs/Javac.java    | 14 ++--
 .../compilers/CompilerAdapterFactory.java       |  3 +-
 .../compilers/DefaultCompilerAdapter.java       | 33 +++++---
 .../org/apache/tools/ant/util/JavaEnvUtils.java | 83 +++++++++++++-------
 .../compilers/DefaultCompilerAdapterTest.java   | 31 ++++++++
 .../apache/tools/ant/util/JavaEnvUtilsTest.java |  5 +-
 9 files changed, 122 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/WHATSNEW
----------------------------------------------------------------------
diff --git a/WHATSNEW b/WHATSNEW
index e79166f..3e4e90b 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -9,6 +9,9 @@ Changes that could break older environments:
    same instance. This will now cause the build to fail.
    Bugzilla Report 59402
 
+ * The ant.java.version property will now hold the value "9" rather
+   than "1.9" if running on Java 9.
+
 Fixed bugs:
 -----------
 

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/manual/Tasks/javac.html
----------------------------------------------------------------------
diff --git a/manual/Tasks/javac.html b/manual/Tasks/javac.html
index cfddb58..a5fc56c 100644
--- a/manual/Tasks/javac.html
+++ b/manual/Tasks/javac.html
@@ -79,7 +79,8 @@ attribute are:</a></p>
       <code>javac1.6</code> and
       <code>javac1.7</code> (<em>since Ant 1.8.2</em>) and
       <code>javac1.8</code> (<em>since Ant 1.8.3</em>) and</li>
-      <code>javac1.9</code> (<em>since Ant 1.9.5</em>) can be used
as aliases.</li>
+      <code>javac1.9</code> (<em>since Ant 1.9.5</em>) and</li>
+      <code>javac9</code> (<em>since Ant 1.9.8</em>) can be used
as aliases.</li>
   <li><code>jikes</code> (the <a
     href="http://jikes.sourceforge.net/" target="_top">Jikes</a>
     compiler).</li>

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/manual/properties.html
----------------------------------------------------------------------
diff --git a/manual/properties.html b/manual/properties.html
index 96646e1..226972a 100644
--- a/manual/properties.html
+++ b/manual/properties.html
@@ -84,7 +84,7 @@ ant.project.invoked-targets
                     will contain the project's default target in this
                     case for tasks nested into targets..
 ant.java.version    the JVM version Ant detected; currently it can hold
-                    the values &quot;1.9&quot;, &quot;1.8&quot;,
+                    the values &quot;9&quot;, &quot;1.8&quot;,
                     &quot;1.7&quot;, &quot;1.6&quot;, &quot;1.5&quot;,
                     &quot;1.4&quot;, &quot;1.3&quot; and
                     &quot;1.2&quot;.

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/src/main/org/apache/tools/ant/taskdefs/Javac.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java
index 9bb3e74..892c0f1 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Javac.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java
@@ -85,6 +85,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 JAVAC9 = "javac9";
     private static final String JAVAC19 = "javac1.9";
     private static final String JAVAC18 = "javac1.8";
     private static final String JAVAC17 = "javac1.7";
@@ -166,8 +167,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 if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) {
+            return JAVAC9;
         } else {
             return CLASSIC;
         }
@@ -912,7 +913,8 @@ public class Javac extends MatchingTask {
     }
 
     private String getAltCompilerName(final String anImplementation) {
-        if (JAVAC19.equalsIgnoreCase(anImplementation)
+        if (JAVAC9.equalsIgnoreCase(anImplementation)
+                || JAVAC19.equalsIgnoreCase(anImplementation)
                 || JAVAC18.equalsIgnoreCase(anImplementation)
                 || JAVAC17.equalsIgnoreCase(anImplementation)
                 || JAVAC16.equalsIgnoreCase(anImplementation)
@@ -927,7 +929,7 @@ public class Javac extends MatchingTask {
         }
         if (MODERN.equalsIgnoreCase(anImplementation)) {
             final String nextSelected = assumedJavaVersion();
-            if (JAVAC19.equalsIgnoreCase(nextSelected)
+            if (JAVAC9.equalsIgnoreCase(nextSelected)
                     || JAVAC18.equalsIgnoreCase(nextSelected)
                     || JAVAC17.equalsIgnoreCase(nextSelected)
                     || JAVAC16.equalsIgnoreCase(nextSelected)
@@ -1194,12 +1196,12 @@ 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",
-     * "javac1.6", "javac1.7", "javac1.8" or "javac1.9".
+     * "javac1.6", "javac1.7", "javac1.8", "javac1.9" or "javac9".
      */
     protected boolean isJdkCompiler(final String compilerImpl) {
         return MODERN.equals(compilerImpl)
             || CLASSIC.equals(compilerImpl)
-            || JAVAC19.equals(compilerImpl)
+            || JAVAC9.equals(compilerImpl)
             || JAVAC18.equals(compilerImpl)
             || JAVAC17.equals(compilerImpl)
             || JAVAC16.equals(compilerImpl)

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
index aeecb4a..8712715 100644
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
+++ b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
@@ -122,7 +122,8 @@ public final class CompilerAdapterFactory {
                 || compilerType.equalsIgnoreCase("javac1.6")
                 || compilerType.equalsIgnoreCase("javac1.7")
                 || compilerType.equalsIgnoreCase("javac1.8")
-                || compilerType.equalsIgnoreCase("javac1.9")) {
+                || compilerType.equalsIgnoreCase("javac1.9")
+                || compilerType.equalsIgnoreCase("javac9")) {
                 // does the modern compiler exist?
                 if (doesModernCompilerExist()) {
                     return new Javac13();

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
index d1a9cb3..db6cd85 100644
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
+++ b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
@@ -672,12 +672,23 @@ public abstract class DefaultCompilerAdapter
     }
 
     /**
-     * Shall we assume JDK 1.9 command line switches?
-     * @return true if JDK 1.9
+     * Shall we assume JDK 9 command line switches?
+     * @return true if JDK 9
      * @since Ant 1.9.4
+     * @deprecated use #assumeJava9 instead
      */
     protected boolean assumeJava19() {
-        return assumeJavaXY("javac1.9", JavaEnvUtils.JAVA_1_9);
+        return assumeJavaXY("javac1.9", JavaEnvUtils.JAVA_9)
+            || assumeJavaXY("javac9", JavaEnvUtils.JAVA_9);
+    }
+
+    /**
+     * Shall we assume JDK 9 command line switches?
+     * @return true if JDK 9
+     * @since Ant 1.9.8
+     */
+    protected boolean assumeJava9() {
+        return assumeJava19();
     }
 
     /**
@@ -686,12 +697,10 @@ public abstract class DefaultCompilerAdapter
      */
     private boolean assumeJavaXY(final String javacXY, final String javaEnvVersionXY) {
         return javacXY.equals(attributes.getCompilerVersion())
-            || ("classic".equals(attributes.getCompilerVersion())
-                && JavaEnvUtils.isJavaVersion(javaEnvVersionXY))
-            || ("modern".equals(attributes.getCompilerVersion())
-                && JavaEnvUtils.isJavaVersion(javaEnvVersionXY))
-            || ("extJavac".equals(attributes.getCompilerVersion())
-                && JavaEnvUtils.isJavaVersion(javaEnvVersionXY));
+            || (JavaEnvUtils.isJavaVersion(javaEnvVersionXY) &&
+                ("classic".equals(attributes.getCompilerVersion())
+                 || "modern".equals(attributes.getCompilerVersion())
+                 || "extJavac".equals(attributes.getCompilerVersion())));
     }
 
     /**
@@ -755,8 +764,8 @@ public abstract class DefaultCompilerAdapter
         if (assumeJava18()) {
             return "1.8 in JDK 1.8";
         }
-        if (assumeJava19()) {
-            return "1.9 in JDK 1.9";
+        if (assumeJava9()) {
+            return "9 in JDK 9";
         }
         return "";
     }
@@ -782,7 +791,7 @@ public abstract class DefaultCompilerAdapter
                 && !assumeJava15() && !assumeJava16())
             || (t.equals("7") && !assumeJava17())
             || (t.equals("8") && !assumeJava18())
-            || (t.equals("9") && !assumeJava19());
+            || (t.equals("9") && !assumeJava9());
     }
 
 

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
index 4f244da..a551c0f 100644
--- a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
+++ b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
@@ -55,6 +55,9 @@ public final class JavaEnvUtils {
     /** floating version of the JVM */
     private static int javaVersionNumber;
 
+    /** Version of currently running VM. */
+    private static final DeweyDecimal parsedJavaVersion;
+
     /** Version constant for Java 1.0 */
     public static final String JAVA_1_0 = "1.0";
     /** Number Version constant for Java 1.0 */
@@ -100,11 +103,28 @@ 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 */
+    /**
+     * Version constant for Java 1.9
+     * @deprecated use #JAVA_9 instead
+     */
     public static final String JAVA_1_9 = "1.9";
-    /** Number Version constant for Java 1.9 */
+    /**
+     * Number Version constant for Java 1.9
+     * @deprecated use #VERSION_9 instead
+     */
     public static final int VERSION_1_9 = 19;
 
+    /**
+     * Version constant for Java 9
+     * @since Ant 1.9.8
+     */
+    public static final String JAVA_9 = "9";
+    /**
+     * Number Version constant for Java 9
+     * @since Ant 1.9.8
+     */
+    public static final int VERSION_9 = 90;
+
     /** Whether this is the Kaffe VM */
     private static boolean kaffeDetected;
 
@@ -158,13 +178,14 @@ public final class JavaEnvUtils {
             Class.forName("java.lang.reflect.Executable");
             javaVersion = JAVA_1_8;
             javaVersionNumber++;
-            checkForJava9();
-            javaVersion = JAVA_1_9;
-            javaVersionNumber++;
+            Class.forName("java.lang.module.ModuleDescriptor");
+            javaVersion = JAVA_9;
+            javaVersionNumber = VERSION_9;
         } catch (Throwable t) {
             // swallow as we've hit the max class version that
             // we have
         }
+        parsedJavaVersion = new DeweyDecimal(javaVersion);
         kaffeDetected = false;
         try {
             Class.forName("kaffe.util.NotImplemented");
@@ -197,7 +218,11 @@ public final class JavaEnvUtils {
 
     /**
      * Returns the version of Java this class is running under.
-     * @return the version of Java as a String, e.g. "1.6"
+     *
+     * <p>Up until Java 8 Java version numbers were 1.VERSION -
+     * e.g. 1.8.x for Java 8, starting with Java 9 it became 9.x.</p>
+     *
+     * @return the version of Java as a String, e.g. "1.6" or "9"
      */
     public static String getJavaVersion() {
         return javaVersion;
@@ -205,31 +230,28 @@ 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 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
+     * Returns the version of Java this class is running under.
+     * <p>This number can be used for comparisons.</p>
+     * @return the version of Java as a number 10x the major/minor,
+     * e.g Java1.5 has a value of 15 and Java9 the value 90 - major
+     * will be 1 for all versions of Java prior to Java 9, minor will
+     * be 0 for all versions of Java starting with Java 9.
+     * @deprecated use #getParsedJavaVersion instead
      */
-    private static void checkForJava9() throws Exception {
-    	Class<?> clazz = Class.forName("javax.lang.model.SourceVersion");
-    	clazz.getDeclaredField("RELEASE_9");
+    public static int getJavaVersionNumber() {
+        return javaVersionNumber;
     }
 
-
     /**
      * 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,
-     * e.g Java1.5 has a value of 15
+     * <p>This number can be used for comparisons.</p>
+     * @return the version of Java as major.minor, e.g Java1.5 has a
+     * value of 1.5 and Java9 the value 9 - major will be 1 for all
+     * versions of Java prior to Java 9, minor will be 0 for all
+     * versions of Java starting with Java 9.
      */
-    public static int getJavaVersionNumber() {
-        return javaVersionNumber;
+    public static DeweyDecimal getParsedJavaVersion() {
+        return parsedJavaVersion;
     }
 
     /**
@@ -243,7 +265,8 @@ public final class JavaEnvUtils {
      * @since Ant 1.5
      */
     public static boolean isJavaVersion(String version) {
-        return javaVersion.equals(version);
+        return javaVersion.equals(version)
+            || (javaVersion.equals(JAVA_9) && JAVA_1_9.equals(version));
     }
 
     /**
@@ -258,7 +281,7 @@ public final class JavaEnvUtils {
      * @since Ant 1.7
      */
     public static boolean isAtLeastJavaVersion(String version) {
-        return javaVersion.compareTo(version) >= 0;
+        return parsedJavaVersion.compareTo(new DeweyDecimal(version)) >= 0;
     }
 
     /**
@@ -385,7 +408,7 @@ public final class JavaEnvUtils {
             // fall back to JRE bin directory, also catches JDK 1.0 and 1.1
             // where java.home points to the root of the JDK and Mac OS X where
             // the whole directory layout is different from Sun's
-            // and also catches JDK 1.9 (and probably later) which
+            // and also catches JDK 9 (and probably later) which
             // merged JDK and JRE dirs
             return getJreExecutable(command);
         }
@@ -427,7 +450,7 @@ public final class JavaEnvUtils {
     private static void buildJrePackages() {
         jrePackages = new Vector<String>();
         switch(javaVersionNumber) {
-            case VERSION_1_9:
+            case VERSION_9:
             case VERSION_1_8:
             case VERSION_1_7:
                 jrePackages.addElement("jdk");
@@ -482,7 +505,7 @@ public final class JavaEnvUtils {
         Vector<String> tests = new Vector<String>();
         tests.addElement("java.lang.Object");
         switch(javaVersionNumber) {
-            case VERSION_1_9:
+            case VERSION_9:
             case VERSION_1_8:
             case VERSION_1_7:
                 tests.addElement("jdk.net.Sockets");

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
b/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
index 646154d..3064876 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java
@@ -186,6 +186,37 @@ public class DefaultCompilerAdapterTest {
     }
 
     @Test
+    public void testImplicitSourceForJava9() {
+        commonSourceDowngrades("javac9");
+        testSource("1.5", "javac9",
+                   "If you specify -target 1.5 you now must also specify"
+                   + " -source 1.5", "1.5");
+        testSource("1.6", "javac1.9",
+                   "If you specify -target 1.6 you now must also specify"
+                   + " -source 1.6", "1.6");
+        testSource("1.7", "javac9",
+                   "If you specify -target 1.7 you now must also specify"
+                   + " -source 1.7", "1.7");
+        testSource("1.8", "javac9",
+                   "If you specify -target 1.8 you now must also specify"
+                   + " -source 1.8", "1.8");
+        testSource("5", "javac9",
+                   "If you specify -target 5 you now must also specify"
+                   + " -source 5", "5");
+        testSource("6", "javac9",
+                   "If you specify -target 6 you now must also specify"
+                   + " -source 6", "6");
+        testSource("7", "javac9",
+                   "If you specify -target 7 you now must also specify"
+                   + " -source 7", "7");
+        testSource("8", "javac9",
+                   "If you specify -target 8 you now must also specify"
+                   + " -source 8", "8");
+        testSource(null, "javac9", "", "1.9");
+        testSource(null, "javac9", "", "9");
+    }
+
+    @Test
     public void testSingleModuleCompilation() throws IOException {
         final File workDir = createWorkDir("testSMC");
         try {

http://git-wip-us.apache.org/repos/asf/ant/blob/625d3d37/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
----------------------------------------------------------------------
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 14387e7..aef4f1b 100644
--- a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
+++ b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
@@ -116,7 +116,7 @@ public class JavaEnvUtilsTest {
                    j.startsWith(javaHomeParent));
 
         if ((Os.isFamily("mac") && JavaEnvUtils.getJavaVersionNumber() <= JavaEnvUtils.VERSION_1_6)
-            || JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_9)) {
+            || JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
             assertTrue(j+" is normalized and in the JRE dir",
                        j.startsWith(javaHome));
         } else {
@@ -136,9 +136,6 @@ public class JavaEnvUtilsTest {
         assertTrue(
                 "Current java version is not at least the current java version...",
                 JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.getJavaVersion()));
-        assertFalse(
-                "In case the current java version is higher than 9.0 definitely a new algorithem
will be needed",
-                JavaEnvUtils.isAtLeastJavaVersion("9.0"));
     }
   
 }


Mime
View raw message