- 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.5") | ||||
|| compilerType.equalsIgnoreCase("javac1.6") | || compilerType.equalsIgnoreCase("javac1.6") | ||||
|| compilerType.equalsIgnoreCase("javac1.7") | || compilerType.equalsIgnoreCase("javac1.7") | ||||
|| compilerType.equalsIgnoreCase("javac1.8")) { | |||||
|| compilerType.equalsIgnoreCase("javac1.8") | |||||
|| compilerType.equalsIgnoreCase("javac1.9")) { | |||||
// does the modern compiler exist? | // does the modern compiler exist? | ||||
if (doesModernCompilerExist()) { | if (doesModernCompilerExist()) { | ||||
return new Javac13(); | return new Javac13(); | ||||
@@ -605,6 +605,15 @@ public abstract class DefaultCompilerAdapter | |||||
return assumeJavaXY("javac1.8", JavaEnvUtils.JAVA_1_8); | 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? | * Shall we assume command line switches for the given version of Java? | ||||
* @since Ant 1.8.3 | * @since Ant 1.8.3 | ||||
@@ -27,6 +27,9 @@ | |||||
<property name="test3.jar" location="${antunit.tmpdir}/test3.jar"/> | <property name="test3.jar" location="${antunit.tmpdir}/test3.jar"/> | ||||
<property name="test4.jar" location="${antunit.tmpdir}/test4.jar"/> | <property name="test4.jar" location="${antunit.tmpdir}/test4.jar"/> | ||||
<property name="test5.jar" location="${antunit.tmpdir}/test5.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.8+" classname="java.lang.reflect.Executable"/> | ||||
<available property="jdk1.7+" classname="java.nio.file.FileSystem"/> | <available property="jdk1.7+" classname="java.nio.file.FileSystem"/> | ||||
<available property="jdk1.6+" classname="java.net.CookieStore"/> | <available property="jdk1.6+" classname="java.net.CookieStore"/> | ||||
@@ -197,4 +197,116 @@ public class Adapter implements CompilerAdapter { | |||||
</javac> | </javac> | ||||
<au:assertLogContains text="adapter called" /> | <au:assertLogContains text="adapter called" /> | ||||
</target> | </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> | </project> |
@@ -18,13 +18,21 @@ | |||||
package org.apache.tools.ant.taskdefs; | 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.Project; | ||||
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | ||||
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | ||||
import org.apache.tools.ant.taskdefs.compilers.Javac13; | import org.apache.tools.ant.taskdefs.compilers.Javac13; | ||||
import org.apache.tools.ant.taskdefs.compilers.JavacExternal; | import org.apache.tools.ant.taskdefs.compilers.JavacExternal; | ||||
import junit.framework.TestCase; | |||||
import org.apache.tools.ant.types.Path; | |||||
/** | /** | ||||
* Testcase for <javac>. | * Testcase for <javac>. | ||||
@@ -133,6 +133,36 @@ public class DefaultCompilerAdapterTest extends TestCase { | |||||
testSource(null, "javac1.8", "", "8"); | 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) { | private void commonSourceDowngrades(String javaVersion) { | ||||
testSource("1.3", javaVersion, | testSource("1.3", javaVersion, | ||||
"If you specify -target 1.1 you now must also specify" | "If you specify -target 1.1 you now must also specify" | ||||