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 {