git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1585981 13f79535-47bb-0310-9956-ffa450edef68master
@@ -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, | |||
@@ -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"); | |||
@@ -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++) { | |||
@@ -136,5 +136,5 @@ public class JavaEnvUtilsTest extends TestCase { | |||
"In case the current java version is higher than 9.0 definitely a new algorithem will be needed", | |||
JavaEnvUtils.isAtLeastJavaVersion("9.0")); | |||
} | |||
} |