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 { | ||||