You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2004/07/30 12:55:34 UTC
cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc JJDoc.java JJTree.java JavaCC.java
bodewig 2004/07/30 03:55:34
Modified: src/main/org/apache/tools/ant/taskdefs/optional/javacc
JJDoc.java JJTree.java JavaCC.java
Log:
Base version decision on classpath instead of archive names, this allows Gump to effectivly ignore javacchome
Revision Changes Path
1.10 +3 -3 ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java
Index: JJDoc.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- JJDoc.java 9 Mar 2004 16:48:29 -0000 1.9
+++ JJDoc.java 30 Jul 2004 10:55:34 -0000 1.10
@@ -132,13 +132,13 @@
cmdl.createArgument().setValue(target.getAbsolutePath());
- cmdl.setClassname(JavaCC.getMainClass(javaccHome,
- JavaCC.TASKDEF_TYPE_JJDOC));
-
final Path classpath = cmdl.createClasspath(getProject());
final File javaccJar = JavaCC.getArchiveFile(javaccHome);
classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
classpath.addJavaRuntime();
+
+ cmdl.setClassname(JavaCC.getMainClass(classpath,
+ JavaCC.TASKDEF_TYPE_JJDOC));
final Commandline.Argument arg = cmdl.createVmArgument();
arg.setValue("-mx140M");
1.33 +3 -3 ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
Index: JJTree.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- JJTree.java 9 Mar 2004 16:48:29 -0000 1.32
+++ JJTree.java 30 Jul 2004 10:55:34 -0000 1.33
@@ -235,13 +235,13 @@
cmdl.createArgument().setValue(target.getAbsolutePath());
- cmdl.setClassname(JavaCC.getMainClass(javaccHome,
- JavaCC.TASKDEF_TYPE_JJTREE));
-
final Path classpath = cmdl.createClasspath(getProject());
final File javaccJar = JavaCC.getArchiveFile(javaccHome);
classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
classpath.addJavaRuntime();
+
+ cmdl.setClassname(JavaCC.getMainClass(classpath,
+ JavaCC.TASKDEF_TYPE_JJTREE));
final Commandline.Argument arg = cmdl.createVmArgument();
arg.setValue("-mx140M");
1.31 +61 -52 ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
Index: JavaCC.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- JavaCC.java 9 Mar 2004 16:48:29 -0000 1.30
+++ JavaCC.java 30 Jul 2004 10:55:34 -0000 1.31
@@ -18,10 +18,12 @@
package org.apache.tools.ant.taskdefs.optional.javacc;
import java.io.File;
+import java.io.InputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.zip.ZipFile;
+import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
@@ -307,14 +309,14 @@
}
cmdl.createArgument().setValue(target.getAbsolutePath());
- cmdl.setClassname(JavaCC.getMainClass(javaccHome,
- JavaCC.TASKDEF_TYPE_JAVACC));
-
final Path classpath = cmdl.createClasspath(getProject());
final File javaccJar = JavaCC.getArchiveFile(javaccHome);
classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
classpath.addJavaRuntime();
+ cmdl.setClassname(JavaCC.getMainClass(classpath,
+ JavaCC.TASKDEF_TYPE_JAVACC));
+
final Commandline.Argument arg = cmdl.createVmArgument();
arg.setValue("-mx140M");
arg.setValue("-Dinstall.root=" + javaccHome.getAbsolutePath());
@@ -347,15 +349,33 @@
protected static String getMainClass(File home, int type)
throws BuildException {
- int majorVersion = getMajorVersionNumber(home);
+ Path p = new Path(null);
+ p.createPathElement().setLocation(getArchiveFile(home));
+ p.addJavaRuntime();
+ return getMainClass(p, type);
+ }
+
+ /**
+ * Helper method to retrieve main class which is different from versions.
+ * @param path classpath to search in.
+ * @param type the taskdef.
+ * @throws BuildException thrown if the home directory is invalid
+ * or if the archive could not be found despite attempts to do so.
+ * @return the main class for the taskdef.
+ * @since Ant 1.7
+ */
+ protected static String getMainClass(Path path, int type)
+ throws BuildException {
String packagePrefix = null;
String mainClass = null;
- switch (majorVersion) {
- case 1:
- case 2:
+ AntClassLoader l = new AntClassLoader();
+ l.setClassPath(path.concatSystemClasspath("ignore"));
+ String javaccClass = COM_PACKAGE + COM_JAVACC_CLASS;
+ InputStream is = l.getResourceAsStream(javaccClass.replace('.', '/')
+ + ".class");
+ if (is != null) {
packagePrefix = COM_PACKAGE;
-
switch (type) {
case TASKDEF_TYPE_JAVACC:
mainClass = COM_JAVACC_CLASS;
@@ -372,58 +392,47 @@
break;
}
-
- break;
-
- case 3:
- /*
- * This is where the fun starts, JavaCC 3.0 uses
- * org.netbeans.javacc, 3.1 uses org.javacc - I wonder
- * which version is going to use net.java.javacc.
- *
- * Look into to the archive to pick up the best
- * package.
- */
- ZipFile zf = null;
- try {
- zf = new ZipFile(getArchiveFile(home));
- if (zf.getEntry(ORG_PACKAGE_3_0.replace('.', '/')) != null) {
+ } else {
+ javaccClass = ORG_PACKAGE_3_1 + ORG_JAVACC_CLASS;
+ is = l.getResourceAsStream(javaccClass.replace('.', '/')
+ + ".class");
+ if (is != null) {
+ packagePrefix = ORG_PACKAGE_3_1;
+ } else {
+ javaccClass = ORG_PACKAGE_3_0 + ORG_JAVACC_CLASS;
+ is = l.getResourceAsStream(javaccClass.replace('.', '/')
+ + ".class");
+ if (is != null) {
packagePrefix = ORG_PACKAGE_3_0;
- } else {
- packagePrefix = ORG_PACKAGE_3_1;
- }
- } catch (IOException e) {
- throw new BuildException("Error reading javacc.jar", e);
- } finally {
- if (zf != null) {
- try {
- zf.close();
- } catch (IOException e) {
- throw new BuildException(e);
- }
}
}
- switch (type) {
- case TASKDEF_TYPE_JAVACC:
- mainClass = ORG_JAVACC_CLASS;
-
- break;
-
- case TASKDEF_TYPE_JJTREE:
- mainClass = ORG_JJTREE_CLASS;
-
- break;
-
- case TASKDEF_TYPE_JJDOC:
- mainClass = ORG_JJDOC_CLASS;
-
+ if (is != null) {
+ switch (type) {
+ case TASKDEF_TYPE_JAVACC:
+ mainClass = ORG_JAVACC_CLASS;
+
break;
+
+ case TASKDEF_TYPE_JJTREE:
+ mainClass = ORG_JJTREE_CLASS;
+
+ break;
+
+ case TASKDEF_TYPE_JJDOC:
+ mainClass = ORG_JJDOC_CLASS;
+
+ break;
+ }
}
-
- break;
}
+ if (packagePrefix == null) {
+ throw new BuildException("failed to load JavaCC");
+ }
+ if (mainClass == null) {
+ throw new BuildException("unknown task type " + type);
+ }
return packagePrefix + mainClass;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org