bodewig 00/09/25 07:39:31
Modified: src/main/org/apache/tools/ant/taskdefs/optional/javacc
JavaCC.java
Log:
Make JavaCC use the correct path when checking whether the generated
files are up to date.
Submitted by: Adam Murdoch <[EMAIL PROTECTED]>
Revision Changes Path
1.6 +35 -2
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
Index: JavaCC.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- JavaCC.java 2000/08/17 16:02:21 1.5
+++ JavaCC.java 2000/09/25 14:39:29 1.6
@@ -228,8 +228,9 @@
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;
@@ -263,5 +264,37 @@
catch (IOException e) {
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);
}
}