diff --git a/WHATSNEW b/WHATSNEW index a5301d5f9..7d49b309b 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -273,6 +273,8 @@ Other changes: * New task to make a list of targets bound to some specified extension point. + * Initial support for OpenJDK7 has been added. + Changes from Ant 1.8.0 TO Ant 1.8.1 =================================== diff --git a/docs/manual/Tasks/javac.html b/docs/manual/Tasks/javac.html index 049ce36ea..168f6b9cb 100644 --- a/docs/manual/Tasks/javac.html +++ b/docs/manual/Tasks/javac.html @@ -72,11 +72,12 @@ attribute are:

  • classic (the standard compiler of JDK 1.1/1.2) – javac1.1 and javac1.2 can be used as aliases.
  • -
  • modern (the standard compiler of JDK 1.3/1.4/1.5/1.6) – +
  • modern (the standard compiler of JDK 1.3/1.4/1.5/1.6/1.7) – javac1.3 and javac1.4 and javac1.5 and - javac1.6 can be used as aliases.
  • + javac1.6 and + javac1.7 (since Ant 1.8.2) can be used as aliases.
  • jikes (the Jikes compiler).
  • diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java index 93341c801..8cad7544b 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javac.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java @@ -79,6 +79,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 JAVAC17 = "javac1.7"; private static final String JAVAC16 = "javac1.6"; private static final String JAVAC15 = "javac1.5"; private static final String JAVAC14 = "javac1.4"; @@ -143,6 +144,8 @@ public class Javac extends MatchingTask { return JAVAC15; } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) { return JAVAC16; + } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) { + return JAVAC17; } else { return CLASSIC; } @@ -594,7 +597,7 @@ public class Javac extends MatchingTask { /** * Sets the target VM that the classes will be compiled for. Valid * values depend on the compiler, for jdk 1.4 the valid values are - * "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "5" and "6". + * "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "5", "6" and "7". * @param target the target VM */ public void setTarget(String target) { @@ -758,7 +761,8 @@ public class Javac extends MatchingTask { } private String getAltCompilerName(String anImplementation) { - if (JAVAC16.equalsIgnoreCase(anImplementation) + if (JAVAC17.equalsIgnoreCase(anImplementation) + || JAVAC16.equalsIgnoreCase(anImplementation) || JAVAC15.equalsIgnoreCase(anImplementation) || JAVAC14.equalsIgnoreCase(anImplementation) || JAVAC13.equalsIgnoreCase(anImplementation)) { @@ -770,7 +774,8 @@ public class Javac extends MatchingTask { } if (MODERN.equalsIgnoreCase(anImplementation)) { String nextSelected = assumedJavaVersion(); - if (JAVAC16.equalsIgnoreCase(nextSelected) + if (JAVAC17.equalsIgnoreCase(nextSelected) + || JAVAC16.equalsIgnoreCase(nextSelected) || JAVAC15.equalsIgnoreCase(nextSelected) || JAVAC14.equalsIgnoreCase(nextSelected) || JAVAC13.equalsIgnoreCase(nextSelected)) { @@ -965,6 +970,7 @@ public class Javac extends MatchingTask { protected boolean isJdkCompiler(String compilerImpl) { return MODERN.equals(compilerImpl) || CLASSIC.equals(compilerImpl) + || JAVAC17.equals(compilerImpl) || JAVAC16.equals(compilerImpl) || JAVAC15.equals(compilerImpl) || JAVAC14.equals(compilerImpl) diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java index e934bc727..da7d1742b 100644 --- a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java +++ b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java @@ -119,7 +119,8 @@ public final class CompilerAdapterFactory { || compilerType.equalsIgnoreCase("javac1.3") || compilerType.equalsIgnoreCase("javac1.4") || compilerType.equalsIgnoreCase("javac1.5") - || compilerType.equalsIgnoreCase("javac1.6")) { + || compilerType.equalsIgnoreCase("javac1.6") + || compilerType.equalsIgnoreCase("javac1.7")) { // does the modern compiler exist? if (doesModernCompilerExist()) { return new Javac13(); diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java index de21af058..510dc4e09 100644 --- a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java +++ b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java @@ -332,13 +332,12 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { String source = attributes.getSource(); if (source.equals("1.1") || source.equals("1.2")) { // support for -source 1.1 and -source 1.2 has been - // added with JDK 1.4.2 - and isn't present in 1.5.0 - // or 1.6.0 either + // added with JDK 1.4.2 - and isn't present in 1.5.0+ cmd.createArgument().setValue("1.3"); } else { cmd.createArgument().setValue(source); } - } else if ((assumeJava15() || assumeJava16()) + } else if ((assumeJava15() || assumeJava16() || assumeJava17()) && attributes.getTarget() != null) { String t = attributes.getTarget(); if (t.equals("1.1") || t.equals("1.2") || t.equals("1.3") @@ -348,19 +347,12 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { // 1.5.0 doesn't support -source 1.1 s = "1.2"; } - attributes.log("", Project.MSG_WARN); - attributes.log(" WARNING", Project.MSG_WARN); - attributes.log("", Project.MSG_WARN); - attributes.log("The -source switch defaults to 1.5 in JDK 1.5 and 1.6.", - Project.MSG_WARN); - attributes.log("If you specify -target " + t - + " you now must also specify -source " + s - + ".", Project.MSG_WARN); - attributes.log("Ant will implicitly add -source " + s - + " for you. Please change your build file.", - Project.MSG_WARN); - cmd.createArgument().setValue("-source"); - cmd.createArgument().setValue(s); + setImplicitSourceSwitch((assumeJava15() || assumeJava16()) + ? "1.5 in JDK 1.5 and 1.6" + : "1.7 in JDK 1.7", + cmd, s, t); + } else if (assumeJava17() && (t.equals("1.5") || t.equals("1.6"))) { + setImplicitSourceSwitch("1.7 in JDK 1.7", cmd, t, t); } } return cmd; @@ -619,6 +611,21 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)); } + /** + * Shall we assume JDK 1.7 command line switches? + * @return true if JDK 1.7 + * @since Ant 1.8.2 + */ + protected boolean assumeJava17() { + return "javac1.7".equals(attributes.getCompilerVersion()) + || ("classic".equals(attributes.getCompilerVersion()) + && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) + || ("modern".equals(attributes.getCompilerVersion()) + && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) + || ("extJavac".equals(attributes.getCompilerVersion()) + && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)); + } + /** * Combines a user specified bootclasspath with the system * bootclasspath taking build.sysclasspath into account. @@ -647,5 +654,23 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { protected String getNoDebugArgument() { return assumeJava11() ? null : "-g:none"; } + + private void setImplicitSourceSwitch(String defaultDetails, Commandline cmd, + String target, String source) { + attributes.log("", Project.MSG_WARN); + attributes.log(" WARNING", Project.MSG_WARN); + attributes.log("", Project.MSG_WARN); + attributes.log("The -source switch defaults to " + defaultDetails + ".", + Project.MSG_WARN); + attributes.log("If you specify -target " + target + + " you now must also specify -source " + source + + ".", Project.MSG_WARN); + attributes.log("Ant will implicitly add -source " + source + + " for you. Please change your build file.", + Project.MSG_WARN); + cmd.createArgument().setValue("-source"); + cmd.createArgument().setValue(source); + } + }