diff --git a/src/etc/testcases/taskdefs/optional/antlr/antlr.xml b/src/etc/testcases/taskdefs/optional/antlr/antlr.xml
index fb849dd91..3fa0d1596 100644
--- a/src/etc/testcases/taskdefs/optional/antlr/antlr.xml
+++ b/src/etc/testcases/taskdefs/optional/antlr/antlr.xml
@@ -73,6 +73,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java b/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
index e5feef482..fc8dd7acf 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
@@ -275,7 +275,11 @@ public class ANTLR extends Task {
public void execute() throws BuildException {
validateAttributes();
//TODO: use ANTLR to parse the grammer file to do this.
- if (target.lastModified() > getGeneratedFile().lastModified()) {
+ File generatedFile = getGeneratedFile();
+ if (target.lastModified() > generatedFile.lastModified()) {
+ log("Compiling " + target + " as it is newer than "
+ + generatedFile, Project.MSG_VERBOSE);
+
populateAttributes();
commandline.createArgument().setValue(target.toString());
@@ -291,7 +295,8 @@ public class ANTLR extends Task {
}
}
} else {
- log("Skipped grammar file. Generated file is newer.", Project.MSG_VERBOSE);
+ log("Skipped grammar file. Generated file " + generatedFile
+ + "is newer.", Project.MSG_VERBOSE);
}
}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java
index 19718de35..99b0fb374 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java
@@ -169,6 +169,28 @@ public class ANTLRTest extends BuildFileTest {
public void test13() {
executeTarget("test13");
}
+
+ public void testNoRecompile() {
+ executeTarget("test9");
+ assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
+ executeTarget("noRecompile");
+ assertTrue(-1 != getFullLog().indexOf("Skipped grammar file."));
+ }
+
+ public void testNormalRecompile() {
+ executeTarget("test9");
+ assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
+ executeTarget("normalRecompile");
+ assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
+ }
+
+ // Bugzilla Report 12961
+ public void testSupergrammarChangeRecompile() {
+ executeTarget("test9");
+ assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
+ executeTarget("supergrammarChangeRecompile");
+ assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
+ }
}
class CalcFileFilter implements FilenameFilter {