https://bz.apache.org/bugzilla/show_bug.cgi?id=65539master
@@ -1,6 +1,14 @@ | |||||
Changes from Ant 1.9.16 TO Ant 1.9.17 | Changes from Ant 1.9.16 TO Ant 1.9.17 | ||||
===================================== | ===================================== | ||||
Fixed bugs: | |||||
----------- | |||||
* Made sure setting build.compiler to the fully qualified classname | |||||
that corresponds to extJavac or modern has the same effect as using | |||||
the shorter alias names. | |||||
Bugzilla Report 65539 | |||||
Changes from Ant 1.9.15 TO Ant 1.9.16 | Changes from Ant 1.9.15 TO Ant 1.9.16 | ||||
===================================== | ===================================== | ||||
@@ -86,21 +86,6 @@ public class Javac extends MatchingTask { | |||||
private static final String FAIL_MSG | private static final String FAIL_MSG | ||||
= "Compile failed; see the compiler error output for details."; | = "Compile failed; see the compiler error output for details."; | ||||
private static final String JAVAC10_PLUS = "javac10+"; | |||||
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"; | |||||
private static final String JAVAC16 = "javac1.6"; | |||||
private static final String JAVAC15 = "javac1.5"; | |||||
private static final String JAVAC14 = "javac1.4"; | |||||
private static final String JAVAC13 = "javac1.3"; | |||||
private static final String JAVAC12 = "javac1.2"; | |||||
private static final String JAVAC11 = "javac1.1"; | |||||
private static final String MODERN = "modern"; | |||||
private static final String CLASSIC = "classic"; | |||||
private static final String EXTJAVAC = "extJavac"; | |||||
private static final char GROUP_START_MARK = '{'; //modulesourcepath group start character | private static final char GROUP_START_MARK = '{'; //modulesourcepath group start character | ||||
private static final char GROUP_END_MARK = '}'; //modulesourcepath group end character | private static final char GROUP_END_MARK = '}'; //modulesourcepath group end character | ||||
private static final char GROUP_SEP_MARK = ','; //modulesourcepath group element separator character | private static final char GROUP_SEP_MARK = ','; //modulesourcepath group element separator character | ||||
@@ -162,21 +147,21 @@ public class Javac extends MatchingTask { | |||||
private String assumedJavaVersion() { | private String assumedJavaVersion() { | ||||
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) { | if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) { | ||||
return JAVAC14; | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_4; | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_5)) { | } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_5)) { | ||||
return JAVAC15; | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_5; | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) { | } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) { | ||||
return JAVAC16; | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_6; | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) { | } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) { | ||||
return JAVAC17; | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_7; | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) { | } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) { | ||||
return JAVAC18; | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_8; | |||||
} else if (JavaEnvUtils.isAtLeastJavaVersion("10")) { | } else if (JavaEnvUtils.isAtLeastJavaVersion("10")) { | ||||
return JAVAC10_PLUS; | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_10_PLUS; | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) { | } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) { | ||||
return JAVAC9; | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_9; | |||||
} else { | } else { | ||||
return CLASSIC; | |||||
return CompilerAdapterFactory.COMPILER_CLASSIC; | |||||
} | } | ||||
} | } | ||||
@@ -886,7 +871,7 @@ public class Javac extends MatchingTask { | |||||
* @return true if this is a forked invocation | * @return true if this is a forked invocation | ||||
*/ | */ | ||||
public boolean isForkedJavac() { | public boolean isForkedJavac() { | ||||
return fork || EXTJAVAC.equalsIgnoreCase(getCompiler()); | |||||
return fork || CompilerAdapterFactory.isForkedJavac(getCompiler()); | |||||
} | } | ||||
/** | /** | ||||
@@ -965,38 +950,22 @@ public class Javac extends MatchingTask { | |||||
} | } | ||||
private String getAltCompilerName(final String anImplementation) { | private String getAltCompilerName(final String anImplementation) { | ||||
if (JAVAC10_PLUS.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC9.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC19.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC18.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC17.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC16.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC15.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC14.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC13.equalsIgnoreCase(anImplementation)) { | |||||
return MODERN; | |||||
if (CompilerAdapterFactory.isModernJdkCompiler(anImplementation)) { | |||||
return CompilerAdapterFactory.COMPILER_MODERN; | |||||
} | } | ||||
if (JAVAC12.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC11.equalsIgnoreCase(anImplementation)) { | |||||
return CLASSIC; | |||||
if (CompilerAdapterFactory.isClassicJdkCompiler(anImplementation)) { | |||||
return CompilerAdapterFactory.COMPILER_CLASSIC; | |||||
} | } | ||||
if (MODERN.equalsIgnoreCase(anImplementation)) { | |||||
if (CompilerAdapterFactory.COMPILER_MODERN.equalsIgnoreCase(anImplementation)) { | |||||
final String nextSelected = assumedJavaVersion(); | final String nextSelected = assumedJavaVersion(); | ||||
if (JAVAC10_PLUS.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC9.equalsIgnoreCase(nextSelected) | |||||
|| JAVAC18.equalsIgnoreCase(nextSelected) | |||||
|| JAVAC17.equalsIgnoreCase(nextSelected) | |||||
|| JAVAC16.equalsIgnoreCase(nextSelected) | |||||
|| JAVAC15.equalsIgnoreCase(nextSelected) | |||||
|| JAVAC14.equalsIgnoreCase(nextSelected) | |||||
|| JAVAC13.equalsIgnoreCase(nextSelected)) { | |||||
if (CompilerAdapterFactory.isModernJdkCompiler(nextSelected)) { | |||||
return nextSelected; | return nextSelected; | ||||
} | } | ||||
} | } | ||||
if (CLASSIC.equalsIgnoreCase(anImplementation)) { | |||||
if (CompilerAdapterFactory.COMPILER_CLASSIC.equalsIgnoreCase(anImplementation)) { | |||||
return assumedJavaVersion(); | return assumedJavaVersion(); | ||||
} | } | ||||
if (EXTJAVAC.equalsIgnoreCase(anImplementation)) { | |||||
if (CompilerAdapterFactory.isForkedJavac(anImplementation)) { | |||||
return assumedJavaVersion(); | return assumedJavaVersion(); | ||||
} | } | ||||
return null; | return null; | ||||
@@ -1256,18 +1225,7 @@ public class Javac extends MatchingTask { | |||||
* "javac1.6", "javac1.7", "javac1.8", "javac1.9", "javac9" or "javac10+". | * "javac1.6", "javac1.7", "javac1.8", "javac1.9", "javac9" or "javac10+". | ||||
*/ | */ | ||||
protected boolean isJdkCompiler(final String compilerImpl) { | protected boolean isJdkCompiler(final String compilerImpl) { | ||||
return MODERN.equals(compilerImpl) | |||||
|| CLASSIC.equals(compilerImpl) | |||||
|| JAVAC10_PLUS.equals(compilerImpl) | |||||
|| JAVAC9.equals(compilerImpl) | |||||
|| JAVAC18.equals(compilerImpl) | |||||
|| JAVAC17.equals(compilerImpl) | |||||
|| JAVAC16.equals(compilerImpl) | |||||
|| JAVAC15.equals(compilerImpl) | |||||
|| JAVAC14.equals(compilerImpl) | |||||
|| JAVAC13.equals(compilerImpl) | |||||
|| JAVAC12.equals(compilerImpl) | |||||
|| JAVAC11.equals(compilerImpl); | |||||
return CompilerAdapterFactory.isJdkCompiler(compilerImpl); | |||||
} | } | ||||
/** | /** | ||||
@@ -1304,7 +1262,7 @@ public class Javac extends MatchingTask { | |||||
String compilerImpl = getCompilerVersion(); | String compilerImpl = getCompilerVersion(); | ||||
if (fork) { | if (fork) { | ||||
if (isJdkCompiler(compilerImpl)) { | if (isJdkCompiler(compilerImpl)) { | ||||
compilerImpl = EXTJAVAC; | |||||
compilerImpl = CompilerAdapterFactory.COMPILER_EXTJAVAC; | |||||
} else { | } else { | ||||
log("Since compiler setting isn't classic or modern, " | log("Since compiler setting isn't classic or modern, " | ||||
+ "ignoring fork setting.", Project.MSG_WARN); | + "ignoring fork setting.", Project.MSG_WARN); | ||||
@@ -18,6 +18,9 @@ | |||||
package org.apache.tools.ant.taskdefs.compilers; | package org.apache.tools.ant.taskdefs.compilers; | ||||
import java.util.Arrays; | |||||
import java.util.List; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
@@ -33,6 +36,83 @@ import org.apache.tools.ant.util.JavaEnvUtils; | |||||
public final class CompilerAdapterFactory { | public final class CompilerAdapterFactory { | ||||
private static final String MODERN_COMPILER = "com.sun.tools.javac.Main"; | private static final String MODERN_COMPILER = "com.sun.tools.javac.Main"; | ||||
public static final String COMPILER_JIKES = "jikes"; | |||||
public static final String COMPILER_GCJ = "gcj"; | |||||
public static final String COMPILER_SYMANTEC_ALIAS = "sj"; | |||||
public static final String COMPILER_SYMANTEC = "symantec"; | |||||
public static final String COMPILER_JVC_ALIAS = "microsoft"; | |||||
public static final String COMPILER_JVC = "jvc"; | |||||
public static final String COMPILER_KJC = "kjc"; | |||||
public static final String COMPILER_JAVAC_1_1 = "javac1.1"; | |||||
public static final String COMPILER_JAVAC_1_2 = "javac1.2"; | |||||
public static final String COMPILER_JAVAC_1_3 = "javac1.3"; | |||||
public static final String COMPILER_JAVAC_1_4 = "javac1.4"; | |||||
public static final String COMPILER_JAVAC_1_5 = "javac1.5"; | |||||
public static final String COMPILER_JAVAC_1_6 = "javac1.6"; | |||||
public static final String COMPILER_JAVAC_1_7 = "javac1.7"; | |||||
public static final String COMPILER_JAVAC_1_8 = "javac1.8"; | |||||
public static final String COMPILER_JAVAC_9_ALIAS = "javac1.9"; | |||||
public static final String COMPILER_JAVAC_9 = "javac9"; | |||||
public static final String COMPILER_JAVAC_10_PLUS = "javac10+"; | |||||
public static final String COMPILER_CLASSIC = "classic"; | |||||
public static final String COMPILER_MODERN = "modern"; | |||||
public static final String COMPILER_EXTJAVAC = "extJavac"; | |||||
public static final String COMPILER_MODERN_CLASSNAME = Javac13.class.getName(); | |||||
public static final String COMPILER_EXTJAVAC_CLASSNAME = JavacExternal.class.getName(); | |||||
private static final List<String> JDK_COMPILERS = Arrays.asList( | |||||
COMPILER_JAVAC_1_1, | |||||
COMPILER_JAVAC_1_2, | |||||
COMPILER_JAVAC_1_3, | |||||
COMPILER_JAVAC_1_4, | |||||
COMPILER_JAVAC_1_5, | |||||
COMPILER_JAVAC_1_6, | |||||
COMPILER_JAVAC_1_7, | |||||
COMPILER_JAVAC_1_8, | |||||
COMPILER_JAVAC_9_ALIAS, | |||||
COMPILER_JAVAC_9, | |||||
COMPILER_JAVAC_10_PLUS, | |||||
COMPILER_CLASSIC, | |||||
COMPILER_MODERN, | |||||
COMPILER_EXTJAVAC, | |||||
COMPILER_MODERN_CLASSNAME, | |||||
COMPILER_EXTJAVAC_CLASSNAME | |||||
); | |||||
private static final List<String> FORKED_JDK_COMPILERS = Arrays.asList( | |||||
COMPILER_EXTJAVAC, | |||||
COMPILER_EXTJAVAC_CLASSNAME | |||||
); | |||||
private static final List<String> JDK_COMPILER_NICKNAMES = Arrays.asList( | |||||
COMPILER_CLASSIC, | |||||
COMPILER_MODERN, | |||||
COMPILER_EXTJAVAC, | |||||
COMPILER_MODERN_CLASSNAME, | |||||
COMPILER_EXTJAVAC_CLASSNAME | |||||
); | |||||
private static final List<String> CLASSIC_JDK_COMPILERS = Arrays.asList( | |||||
COMPILER_JAVAC_1_1, | |||||
COMPILER_JAVAC_1_2 | |||||
); | |||||
private static final List<String> MODERN_JDK_COMPILERS = Arrays.asList( | |||||
COMPILER_JAVAC_1_3, | |||||
COMPILER_JAVAC_1_4, | |||||
COMPILER_JAVAC_1_5, | |||||
COMPILER_JAVAC_1_6, | |||||
COMPILER_JAVAC_1_7, | |||||
COMPILER_JAVAC_1_8, | |||||
COMPILER_JAVAC_9_ALIAS, | |||||
COMPILER_JAVAC_9, | |||||
COMPILER_JAVAC_10_PLUS, | |||||
COMPILER_MODERN_CLASSNAME | |||||
); | |||||
/** This is a singleton -- can't create instances!! */ | /** This is a singleton -- can't create instances!! */ | ||||
private CompilerAdapterFactory() { | private CompilerAdapterFactory() { | ||||
} | } | ||||
@@ -98,33 +178,22 @@ public final class CompilerAdapterFactory { | |||||
public static CompilerAdapter getCompiler(String compilerType, Task task, | public static CompilerAdapter getCompiler(String compilerType, Task task, | ||||
Path classpath) | Path classpath) | ||||
throws BuildException { | throws BuildException { | ||||
if (compilerType.equalsIgnoreCase("jikes")) { | |||||
if (compilerType.equalsIgnoreCase(COMPILER_JIKES)) { | |||||
return new Jikes(); | return new Jikes(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("extjavac")) { | |||||
if (isForkedJavac(compilerType)) { | |||||
return new JavacExternal(); | return new JavacExternal(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("classic") | |||||
|| compilerType.equalsIgnoreCase("javac1.1") | |||||
|| compilerType.equalsIgnoreCase("javac1.2")) { | |||||
if (compilerType.equalsIgnoreCase(COMPILER_CLASSIC) | |||||
|| isClassicJdkCompiler(compilerType)) { | |||||
task.log("This version of java does " | task.log("This version of java does " | ||||
+ "not support the classic " | + "not support the classic " | ||||
+ "compiler; upgrading to modern", | + "compiler; upgrading to modern", | ||||
Project.MSG_WARN); | Project.MSG_WARN); | ||||
compilerType = "modern"; | |||||
compilerType = COMPILER_MODERN; | |||||
} | } | ||||
//on java<=1.3 the modern falls back to classic if it is not found | |||||
//but on java>=1.4 we just bail out early | |||||
if (compilerType.equalsIgnoreCase("modern") | |||||
|| compilerType.equalsIgnoreCase("javac1.3") | |||||
|| compilerType.equalsIgnoreCase("javac1.4") | |||||
|| compilerType.equalsIgnoreCase("javac1.5") | |||||
|| compilerType.equalsIgnoreCase("javac1.6") | |||||
|| compilerType.equalsIgnoreCase("javac1.7") | |||||
|| compilerType.equalsIgnoreCase("javac1.8") | |||||
|| compilerType.equalsIgnoreCase("javac1.9") | |||||
|| compilerType.equalsIgnoreCase("javac9") | |||||
|| compilerType.equalsIgnoreCase("javac10+")) { | |||||
if (compilerType.equalsIgnoreCase(COMPILER_MODERN) | |||||
|| isModernJdkCompiler(compilerType)) { | |||||
// does the modern compiler exist? | // does the modern compiler exist? | ||||
if (doesModernCompilerExist()) { | if (doesModernCompilerExist()) { | ||||
return new Javac13(); | return new Javac13(); | ||||
@@ -142,18 +211,18 @@ public final class CompilerAdapterFactory { | |||||
} | } | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("jvc") | |||||
|| compilerType.equalsIgnoreCase("microsoft")) { | |||||
if (compilerType.equalsIgnoreCase(COMPILER_JVC) | |||||
|| compilerType.equalsIgnoreCase(COMPILER_JVC_ALIAS)) { | |||||
return new Jvc(); | return new Jvc(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("kjc")) { | |||||
if (compilerType.equalsIgnoreCase(COMPILER_KJC)) { | |||||
return new Kjc(); | return new Kjc(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("gcj")) { | |||||
if (compilerType.equalsIgnoreCase(COMPILER_GCJ)) { | |||||
return new Gcj(); | return new Gcj(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("sj") | |||||
|| compilerType.equalsIgnoreCase("symantec")) { | |||||
if (compilerType.equalsIgnoreCase(COMPILER_SYMANTEC_ALIAS) | |||||
|| compilerType.equalsIgnoreCase(COMPILER_SYMANTEC)) { | |||||
return new Sj(); | return new Sj(); | ||||
} | } | ||||
return resolveClassName(compilerType, | return resolveClassName(compilerType, | ||||
@@ -201,4 +270,62 @@ public final class CompilerAdapterFactory { | |||||
CompilerAdapter.class); | CompilerAdapter.class); | ||||
} | } | ||||
/** | |||||
* Is the compiler implementation a forked jdk compiler? | |||||
* | |||||
* @param compilerImpl the name of the compiler implementation | |||||
* @since 1.9.17 | |||||
*/ | |||||
public static boolean isForkedJavac(final String compilerName) { | |||||
return containsIgnoreCase(FORKED_JDK_COMPILERS, compilerName); | |||||
} | |||||
/** | |||||
* Is the compiler implementation a jdk compiler? | |||||
* | |||||
* @param compilerImpl the name of the compiler implementation | |||||
* @since 1.9.17 | |||||
*/ | |||||
public static boolean isJdkCompiler(final String compilerName) { | |||||
return containsIgnoreCase(JDK_COMPILERS, compilerName); | |||||
} | |||||
/** | |||||
* Is the compiler implementation a jdk compiler without specified version? | |||||
* | |||||
* @param compilerImpl the name of the compiler implementation | |||||
* @since 1.9.17 | |||||
*/ | |||||
public static boolean isJdkCompilerNickname(final String compilerName) { | |||||
return containsIgnoreCase(JDK_COMPILER_NICKNAMES, compilerName); | |||||
} | |||||
/** | |||||
* Does the compiler correspond to "classic"? | |||||
* | |||||
* @param compilerImpl the name of the compiler implementation | |||||
* @since 1.9.17 | |||||
*/ | |||||
public static boolean isClassicJdkCompiler(final String compilerName) { | |||||
return containsIgnoreCase(CLASSIC_JDK_COMPILERS, compilerName); | |||||
} | |||||
/** | |||||
* Does the compiler correspond to "modern"? | |||||
* | |||||
* @param compilerImpl the name of the compiler implementation | |||||
* @since 1.9.17 | |||||
*/ | |||||
public static boolean isModernJdkCompiler(final String compilerName) { | |||||
return containsIgnoreCase(MODERN_JDK_COMPILERS, compilerName); | |||||
} | |||||
private static boolean containsIgnoreCase(final List<String> compilers, final String compilerName) { | |||||
for (String compiler : compilers) { | |||||
if (compiler.equalsIgnoreCase(compilerName)) { | |||||
return true; | |||||
} | |||||
} | |||||
return false; | |||||
} | |||||
} | } |
@@ -632,7 +632,8 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.5 | * @since Ant 1.5 | ||||
*/ | */ | ||||
protected boolean assumeJava11() { | protected boolean assumeJava11() { | ||||
return "javac1.1".equals(attributes.getCompilerVersion()); | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_1 | |||||
.equalsIgnoreCase(attributes.getCompilerVersion()); | |||||
} | } | ||||
/** | /** | ||||
@@ -641,7 +642,8 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.5 | * @since Ant 1.5 | ||||
*/ | */ | ||||
protected boolean assumeJava12() { | protected boolean assumeJava12() { | ||||
return "javac1.2".equals(attributes.getCompilerVersion()); | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_2 | |||||
.equalsIgnoreCase(attributes.getCompilerVersion()); | |||||
} | } | ||||
/** | /** | ||||
@@ -650,7 +652,8 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.5 | * @since Ant 1.5 | ||||
*/ | */ | ||||
protected boolean assumeJava13() { | protected boolean assumeJava13() { | ||||
return "javac1.3".equals(attributes.getCompilerVersion()); | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_1_3 | |||||
.equalsIgnoreCase(attributes.getCompilerVersion()); | |||||
} | } | ||||
/** | /** | ||||
@@ -659,7 +662,7 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.6.3 | * @since Ant 1.6.3 | ||||
*/ | */ | ||||
protected boolean assumeJava14() { | protected boolean assumeJava14() { | ||||
return assumeJavaXY("javac1.4", JavaEnvUtils.JAVA_1_4); | |||||
return assumeJavaXY(CompilerAdapterFactory.COMPILER_JAVAC_1_4, JavaEnvUtils.JAVA_1_4); | |||||
} | } | ||||
/** | /** | ||||
@@ -668,7 +671,7 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.6.3 | * @since Ant 1.6.3 | ||||
*/ | */ | ||||
protected boolean assumeJava15() { | protected boolean assumeJava15() { | ||||
return assumeJavaXY("javac1.5", JavaEnvUtils.JAVA_1_5); | |||||
return assumeJavaXY(CompilerAdapterFactory.COMPILER_JAVAC_1_5, JavaEnvUtils.JAVA_1_5); | |||||
} | } | ||||
/** | /** | ||||
@@ -677,7 +680,7 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
protected boolean assumeJava16() { | protected boolean assumeJava16() { | ||||
return assumeJavaXY("javac1.6", JavaEnvUtils.JAVA_1_6); | |||||
return assumeJavaXY(CompilerAdapterFactory.COMPILER_JAVAC_1_6, JavaEnvUtils.JAVA_1_6); | |||||
} | } | ||||
/** | /** | ||||
@@ -686,7 +689,7 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.8.2 | * @since Ant 1.8.2 | ||||
*/ | */ | ||||
protected boolean assumeJava17() { | protected boolean assumeJava17() { | ||||
return assumeJavaXY("javac1.7", JavaEnvUtils.JAVA_1_7); | |||||
return assumeJavaXY(CompilerAdapterFactory.COMPILER_JAVAC_1_7, JavaEnvUtils.JAVA_1_7); | |||||
} | } | ||||
/** | /** | ||||
@@ -695,7 +698,7 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.8.3 | * @since Ant 1.8.3 | ||||
*/ | */ | ||||
protected boolean assumeJava18() { | protected boolean assumeJava18() { | ||||
return assumeJavaXY("javac1.8", JavaEnvUtils.JAVA_1_8); | |||||
return assumeJavaXY(CompilerAdapterFactory.COMPILER_JAVAC_1_8, JavaEnvUtils.JAVA_1_8); | |||||
} | } | ||||
/** | /** | ||||
@@ -705,8 +708,8 @@ public abstract class DefaultCompilerAdapter | |||||
* @deprecated use #assumeJava9 instead | * @deprecated use #assumeJava9 instead | ||||
*/ | */ | ||||
protected boolean assumeJava19() { | protected boolean assumeJava19() { | ||||
return assumeJavaXY("javac1.9", JavaEnvUtils.JAVA_9) | |||||
|| assumeJavaXY("javac9", JavaEnvUtils.JAVA_9); | |||||
return assumeJavaXY(CompilerAdapterFactory.COMPILER_JAVAC_9, JavaEnvUtils.JAVA_9) | |||||
|| assumeJavaXY(CompilerAdapterFactory.COMPILER_JAVAC_9_ALIAS, JavaEnvUtils.JAVA_9); | |||||
} | } | ||||
/** | /** | ||||
@@ -724,13 +727,11 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.9.10 | * @since Ant 1.9.10 | ||||
*/ | */ | ||||
protected boolean assumeJava9Plus() { | protected boolean assumeJava9Plus() { | ||||
return "javac1.9".equals(attributes.getCompilerVersion()) | |||||
|| "javac9".equals(attributes.getCompilerVersion()) | |||||
|| "javac10+".equals(attributes.getCompilerVersion()) | |||||
return CompilerAdapterFactory.COMPILER_JAVAC_9.equalsIgnoreCase(attributes.getCompilerVersion()) | |||||
|| CompilerAdapterFactory.COMPILER_JAVAC_9_ALIAS.equalsIgnoreCase(attributes.getCompilerVersion()) | |||||
|| CompilerAdapterFactory.COMPILER_JAVAC_10_PLUS.equalsIgnoreCase(attributes.getCompilerVersion()) | |||||
|| (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9) | || (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9) | ||||
&& ("classic".equals(attributes.getCompilerVersion()) | |||||
|| "modern".equals(attributes.getCompilerVersion()) | |||||
|| "extJavac".equals(attributes.getCompilerVersion()))); | |||||
&& CompilerAdapterFactory.isJdkCompilerNickname(attributes.getCompilerVersion())); | |||||
} | } | ||||
/** | /** | ||||
@@ -738,11 +739,9 @@ public abstract class DefaultCompilerAdapter | |||||
* @since Ant 1.8.3 | * @since Ant 1.8.3 | ||||
*/ | */ | ||||
private boolean assumeJavaXY(final String javacXY, final String javaEnvVersionXY) { | private boolean assumeJavaXY(final String javacXY, final String javaEnvVersionXY) { | ||||
return javacXY.equals(attributes.getCompilerVersion()) | |||||
return javacXY.equalsIgnoreCase(attributes.getCompilerVersion()) | |||||
|| (JavaEnvUtils.isJavaVersion(javaEnvVersionXY) | || (JavaEnvUtils.isJavaVersion(javaEnvVersionXY) | ||||
&& ("classic".equals(attributes.getCompilerVersion()) | |||||
|| "modern".equals(attributes.getCompilerVersion()) | |||||
|| "extJavac".equals(attributes.getCompilerVersion()))); | |||||
&& CompilerAdapterFactory.isJdkCompilerNickname(attributes.getCompilerVersion())); | |||||
} | } | ||||
/** | /** | ||||
@@ -19,21 +19,24 @@ | |||||
package org.apache.tools.ant.taskdefs; | package org.apache.tools.ant.taskdefs; | ||||
import java.io.File; | import java.io.File; | ||||
import org.apache.tools.ant.BuildException; | |||||
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 org.apache.tools.ant.types.Path; | |||||
import org.junit.Before; | import org.junit.Before; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
import static org.apache.tools.ant.AntAssert.assertContains; | import static org.apache.tools.ant.AntAssert.assertContains; | ||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.types.Path; | |||||
import static org.hamcrest.Matchers.containsString; | |||||
import static org.junit.Assert.assertEquals; | import static org.junit.Assert.assertEquals; | ||||
import static org.junit.Assert.assertNotNull; | import static org.junit.Assert.assertNotNull; | ||||
import static org.junit.Assert.assertNull; | import static org.junit.Assert.assertNull; | ||||
import static org.junit.Assert.assertThat; | |||||
import static org.junit.Assert.assertTrue; | import static org.junit.Assert.assertTrue; | ||||
import static org.junit.Assert.fail; | import static org.junit.Assert.fail; | ||||
@@ -74,6 +77,11 @@ public class JavacTest { | |||||
assertNotNull("fork via property", javac.getJavacExecutable()); | assertNotNull("fork via property", javac.getJavacExecutable()); | ||||
assertContains("name should contain \"javac\"", "javac", javac.getJavacExecutable()); | assertContains("name should contain \"javac\"", "javac", javac.getJavacExecutable()); | ||||
project.setProperty("build.compiler", "org.apache.tools.ant.taskdefs.compilers.JavacExternal"); | |||||
javac.setFork(false); | |||||
assertNotNull("fork via property", javac.getJavacExecutable()); | |||||
assertThat("name should contain \"javac\"", javac.getJavacExecutable(), containsString("javac")); | |||||
project.setProperty("build.compiler", "whatever"); | project.setProperty("build.compiler", "whatever"); | ||||
assertNull("no fork and not extJavac means no executable", | assertNull("no fork and not extJavac means no executable", | ||||
javac.getJavacExecutable()); | javac.getJavacExecutable()); | ||||
@@ -25,17 +25,21 @@ import java.util.Collections; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Set; | import java.util.Set; | ||||
import java.util.TreeSet; | import java.util.TreeSet; | ||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.taskdefs.Javac; | import org.apache.tools.ant.taskdefs.Javac; | ||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.junit.Test; | |||||
import static org.apache.tools.ant.AntAssert.assertContains; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
import org.apache.tools.ant.util.JavaEnvUtils; | |||||
import org.junit.Assert; | import org.junit.Assert; | ||||
import org.junit.Test; | |||||
import static org.apache.tools.ant.AntAssert.assertContains; | |||||
import static org.junit.Assert.assertEquals; | import static org.junit.Assert.assertEquals; | ||||
import static org.junit.Assert.assertFalse; | |||||
import static org.junit.Assert.assertTrue; | |||||
public class DefaultCompilerAdapterTest { | public class DefaultCompilerAdapterTest { | ||||
@@ -449,6 +453,47 @@ public class DefaultCompilerAdapterTest { | |||||
assertEquals("6", args[4]); | assertEquals("6", args[4]); | ||||
} | } | ||||
/** | |||||
* @see "https://bz.apache.org/bugzilla/show_bug.cgi?id=65539" | |||||
*/ | |||||
@Test | |||||
public void assumeJavaXPlusWorksWithBuildCompilerSetToExplicitAdapterName() { | |||||
LogCapturingJavac javac = new LogCapturingJavac(); | |||||
Project p = new Project(); | |||||
p.setProperty("build.compiler", "org.apache.tools.ant.taskdefs.compilers.JavacExternal"); | |||||
javac.setProject(p); | |||||
javac.setFork(true); | |||||
javac.setSourcepath(new Path(p)); | |||||
SourceTargetHelperNoOverride ca = new SourceTargetHelperNoOverride(); | |||||
ca.setJavac(javac); | |||||
if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { | |||||
assertTrue(ca.assumeJava9Plus()); | |||||
assertTrue(ca.assumeJava9()); | |||||
assertTrue(ca.assumeJava19()); | |||||
assertFalse(ca.assumeJava18()); | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) { | |||||
assertFalse(ca.assumeJava9Plus()); | |||||
assertFalse(ca.assumeJava9()); | |||||
assertTrue(ca.assumeJava18()); | |||||
assertFalse(ca.assumeJava17()); | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) { | |||||
assertFalse(ca.assumeJava9Plus()); | |||||
assertFalse(ca.assumeJava18()); | |||||
assertTrue(ca.assumeJava17()); | |||||
assertFalse(ca.assumeJava16()); | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) { | |||||
assertFalse(ca.assumeJava9Plus()); | |||||
assertFalse(ca.assumeJava17()); | |||||
assertTrue(ca.assumeJava16()); | |||||
assertFalse(ca.assumeJava15()); | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_5)) { | |||||
assertFalse(ca.assumeJava9Plus()); | |||||
assertFalse(ca.assumeJava16()); | |||||
assertTrue(ca.assumeJava15()); | |||||
assertFalse(ca.assumeJava14()); | |||||
} | |||||
} | |||||
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" | ||||