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);
+ }
+
}