From da89ca486a9afa85b4dd1edd137f94cc8f8b44be Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Mon, 25 Sep 2000 14:39:29 +0000 Subject: [PATCH] Make JavaCC use the correct path when checking whether the generated files are up to date. Submitted by: Adam Murdoch git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268035 13f79535-47bb-0310-9956-ffa450edef68 --- .../ant/taskdefs/optional/javacc/JavaCC.java | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java index 4921a98ec..20e2530ed 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java @@ -228,8 +228,9 @@ public class JavaCC extends Task { if (target == null || !target.isFile()) { throw new BuildException("Invalid target: " + target); } - final File javaFile = new File( - target.toString().substring(0, target.toString().indexOf(".jj")) + ".java"); + + // determine if the generated java file is up-to-date + final File javaFile = getOutputJavaFile(outputDirectory, target); if (javaFile.exists() && target.lastModified() < javaFile.lastModified()) { project.log("Target is already built - skipping (" + target + ")"); return; @@ -264,4 +265,36 @@ public class JavaCC extends Task { throw new BuildException("Failed to launch JavaCC: " + e); } } + + /** + * Determines the output Java file to be generated by the given grammar + * file. + * + */ + private File getOutputJavaFile(File outputdir, File srcfile) + { + String path = srcfile.getPath(); + + // Extract file's base-name + int startBasename = path.lastIndexOf(File.separator); + if ( startBasename != -1 ) { + path = path.substring(startBasename+1); + } + + // Replace the file's extension with '.java' + int startExtn = path.lastIndexOf('.'); + if (startExtn != -1) { + path = path.substring(0, startExtn) + ".java"; + } + else { + path += ".java"; + } + + // Change the directory + if (outputdir != null) { + path = outputdir + File.separator + path; + } + + return new File(path); + } }