git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274363 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -73,6 +73,25 @@ | |||||
| <antlr target="antlr.g" outputdirectory="${tmp.dir}" traceLexer="yes" traceParser="yes" traceTreeWalker="yes"/> | <antlr target="antlr.g" outputdirectory="${tmp.dir}" traceLexer="yes" traceParser="yes" traceTreeWalker="yes"/> | ||||
| </target> | </target> | ||||
| <!-- test9 will have been run before that --> | |||||
| <target name="noRecompile"> | |||||
| <antlr target="${tmp.dir}/extended.calc.g" glib="${tmp.dir}/antlr.g"/> | |||||
| </target> | |||||
| <!-- test9 will have been run before that --> | |||||
| <target name="normalRecompile"> | |||||
| <sleep seconds="2"/> | |||||
| <touch file="${tmp.dir}/extended.calc.g"/> | |||||
| <antlr target="${tmp.dir}/extended.calc.g" glib="${tmp.dir}/antlr.g"/> | |||||
| </target> | |||||
| <!-- test9 will have been run before that --> | |||||
| <target name="supergrammarChangeRecompile"> | |||||
| <sleep seconds="2"/> | |||||
| <touch file="${tmp.dir}/antlr.g"/> | |||||
| <antlr target="${tmp.dir}/extended.calc.g" glib="${tmp.dir}/antlr.g"/> | |||||
| </target> | |||||
| <target name="cleanup"> | <target name="cleanup"> | ||||
| <delete dir="${tmp.dir}" /> | <delete dir="${tmp.dir}" /> | ||||
| <delete file="../../../../../../CalcParserTokenTypes.txt"/> | <delete file="../../../../../../CalcParserTokenTypes.txt"/> | ||||
| @@ -275,7 +275,11 @@ public class ANTLR extends Task { | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| validateAttributes(); | validateAttributes(); | ||||
| //TODO: use ANTLR to parse the grammer file to do this. | //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(); | populateAttributes(); | ||||
| commandline.createArgument().setValue(target.toString()); | commandline.createArgument().setValue(target.toString()); | ||||
| @@ -291,7 +295,8 @@ public class ANTLR extends Task { | |||||
| } | } | ||||
| } | } | ||||
| } else { | } else { | ||||
| log("Skipped grammar file. Generated file is newer.", Project.MSG_VERBOSE); | |||||
| log("Skipped grammar file. Generated file " + generatedFile | |||||
| + "is newer.", Project.MSG_VERBOSE); | |||||
| } | } | ||||
| } | } | ||||
| @@ -169,6 +169,28 @@ public class ANTLRTest extends BuildFileTest { | |||||
| public void test13() { | public void test13() { | ||||
| executeTarget("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 { | class CalcFileFilter implements FilenameFilter { | ||||