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"));
}
-
+
}