- create the CompilerAdapter for J9 - tests of source and target - add detection of J9 to antunit-base.xml git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1587161 13f79535-47bb-0310-9956-ffa450edef68master
@@ -121,7 +121,8 @@ public final class CompilerAdapterFactory { | |||
|| compilerType.equalsIgnoreCase("javac1.5") | |||
|| compilerType.equalsIgnoreCase("javac1.6") | |||
|| compilerType.equalsIgnoreCase("javac1.7") | |||
|| compilerType.equalsIgnoreCase("javac1.8")) { | |||
|| compilerType.equalsIgnoreCase("javac1.8") | |||
|| compilerType.equalsIgnoreCase("javac1.9")) { | |||
// does the modern compiler exist? | |||
if (doesModernCompilerExist()) { | |||
return new Javac13(); | |||
@@ -605,6 +605,15 @@ public abstract class DefaultCompilerAdapter | |||
return assumeJavaXY("javac1.8", JavaEnvUtils.JAVA_1_8); | |||
} | |||
/** | |||
* Shall we assume JDK 1.9 command line switches? | |||
* @return true if JDK 1.9 | |||
* @since Ant 1.9.4 | |||
*/ | |||
protected boolean assumeJava19() { | |||
return assumeJavaXY("javac1.9", JavaEnvUtils.JAVA_1_8); | |||
} | |||
/** | |||
* Shall we assume command line switches for the given version of Java? | |||
* @since Ant 1.8.3 | |||
@@ -27,6 +27,9 @@ | |||
<property name="test3.jar" location="${antunit.tmpdir}/test3.jar"/> | |||
<property name="test4.jar" location="${antunit.tmpdir}/test4.jar"/> | |||
<property name="test5.jar" location="${antunit.tmpdir}/test5.jar"/> | |||
<condition property="jdk1.9+"> | |||
<contains string="${java.version}" substring="1.9."/> | |||
</condition> | |||
<available property="jdk1.8+" classname="java.lang.reflect.Executable"/> | |||
<available property="jdk1.7+" classname="java.nio.file.FileSystem"/> | |||
<available property="jdk1.6+" classname="java.net.CookieStore"/> | |||
@@ -197,4 +197,116 @@ public class Adapter implements CompilerAdapter { | |||
</javac> | |||
<au:assertLogContains text="adapter called" /> | |||
</target> | |||
<target name="testSourceAttributes" xmlns:if="ant:if"> | |||
<delete dir="${javac-dir}/src" /> | |||
<mkdir dir="${javac-dir}/src" /> | |||
<mkdir dir="${javac-dir}/classes" /> | |||
<echo file="${javac-dir}/src/A.java"> | |||
public class A { } | |||
</echo> | |||
<presetdef name="testJavac"> | |||
<javac srcdir="${javac-dir}/src" destdir="${javac-dir}/classes" includeantruntime="false"/> | |||
</presetdef> | |||
<au:expectfailure> | |||
<testJavac source="notValid"/> | |||
</au:expectfailure> | |||
<echo>JDK 1.4+</echo> | |||
<testJavac source="1.4"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
<sequential if:set="jdk1.5+"> | |||
<echo>JDK 1.5+</echo> | |||
<testJavac source="1.5"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.6+"> | |||
<echo>JDK 1.6+</echo> | |||
<testJavac source="1.6"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.7+"> | |||
<echo>JDK 1.7+</echo> | |||
<testJavac source="1.7"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.8+"> | |||
<echo>JDK 1.8+</echo> | |||
<testJavac source="1.8"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.9+"> | |||
<echo>JDK 1.9+</echo> | |||
<testJavac source="1.9"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
</target> | |||
<target name="testTargetAttributes" xmlns:if="ant:if"> | |||
<delete dir="${javac-dir}/src" /> | |||
<mkdir dir="${javac-dir}/src" /> | |||
<mkdir dir="${javac-dir}/classes" /> | |||
<echo file="${javac-dir}/src/A.java"> | |||
public class A { } | |||
</echo> | |||
<presetdef name="testJavac"> | |||
<javac srcdir="${javac-dir}/src" destdir="${javac-dir}/classes" includeantruntime="false"/> | |||
</presetdef> | |||
<au:expectfailure> | |||
<testJavac target="notValid"/> | |||
</au:expectfailure> | |||
<echo>JDK 1.4+</echo> | |||
<testJavac source="1.4" target="1.4"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
<sequential if:set="jdk1.5+"> | |||
<echo>JDK 1.5+</echo> | |||
<testJavac source="1.5" target="1.5"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.6+"> | |||
<echo>JDK 1.6+</echo> | |||
<testJavac source="1.6" target="1.6"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.7+"> | |||
<echo>JDK 1.7+</echo> | |||
<testJavac source="1.7" target="1.7"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.8+"> | |||
<echo>JDK 1.8+</echo> | |||
<testJavac source="1.8" target="1.8"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
<sequential if:set="jdk1.9+"> | |||
<echo>JDK 1.9+</echo> | |||
<testJavac source="1.9" target="1.9"/> | |||
<delete dir="${javac-dir}/classes"/> | |||
<mkdir dir="${javac-dir}/classes"/> | |||
</sequential> | |||
</target> | |||
</project> |
@@ -18,13 +18,21 @@ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Arrays; | |||
import java.util.Date; | |||
import java.util.List; | |||
import junit.framework.TestCase; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | |||
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | |||
import org.apache.tools.ant.taskdefs.compilers.Javac13; | |||
import org.apache.tools.ant.taskdefs.compilers.JavacExternal; | |||
import junit.framework.TestCase; | |||
import org.apache.tools.ant.types.Path; | |||
/** | |||
* Testcase for <javac>. | |||
@@ -133,6 +133,36 @@ public class DefaultCompilerAdapterTest extends TestCase { | |||
testSource(null, "javac1.8", "", "8"); | |||
} | |||
public void testImplicitSourceForJava19() { | |||
commonSourceDowngrades("javac1.9"); | |||
testSource("1.5", "javac1.9", | |||
"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", "javac1.9", | |||
"If you specify -target 1.7 you now must also specify" | |||
+ " -source 1.7", "1.7"); | |||
testSource("1.8", "javac1.9", | |||
"If you specify -target 1.8 you now must also specify" | |||
+ " -source 1.8", "1.8"); | |||
testSource("5", "javac1.9", | |||
"If you specify -target 5 you now must also specify" | |||
+ " -source 5", "5"); | |||
testSource("6", "javac1.9", | |||
"If you specify -target 6 you now must also specify" | |||
+ " -source 6", "6"); | |||
testSource("7", "javac1.9", | |||
"If you specify -target 7 you now must also specify" | |||
+ " -source 7", "7"); | |||
testSource("8", "javac1.9", | |||
"If you specify -target 8 you now must also specify" | |||
+ " -source 8", "8"); | |||
testSource(null, "javac1.9", "", "1.8"); | |||
testSource(null, "javac1.9", "", "8"); | |||
} | |||
private void commonSourceDowngrades(String javaVersion) { | |||
testSource("1.3", javaVersion, | |||
"If you specify -target 1.1 you now must also specify" | |||