Browse Source

Base version decision on classpath instead of archive names, this allows Gump to effectivly ignore javacchome

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276736 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 21 years ago
parent
commit
22b84e3a90
3 changed files with 67 additions and 58 deletions
  1. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java
  2. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
  3. +61
    -52
      src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java

+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java View File

@@ -132,13 +132,13 @@ public class JJDoc extends Task {


cmdl.createArgument().setValue(target.getAbsolutePath()); cmdl.createArgument().setValue(target.getAbsolutePath());


cmdl.setClassname(JavaCC.getMainClass(javaccHome,
JavaCC.TASKDEF_TYPE_JJDOC));

final Path classpath = cmdl.createClasspath(getProject()); final Path classpath = cmdl.createClasspath(getProject());
final File javaccJar = JavaCC.getArchiveFile(javaccHome); final File javaccJar = JavaCC.getArchiveFile(javaccHome);
classpath.createPathElement().setPath(javaccJar.getAbsolutePath()); classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
classpath.addJavaRuntime(); classpath.addJavaRuntime();
cmdl.setClassname(JavaCC.getMainClass(classpath,
JavaCC.TASKDEF_TYPE_JJDOC));


final Commandline.Argument arg = cmdl.createVmArgument(); final Commandline.Argument arg = cmdl.createVmArgument();
arg.setValue("-mx140M"); arg.setValue("-mx140M");


+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java View File

@@ -235,14 +235,14 @@ public class JJTree extends Task {


cmdl.createArgument().setValue(target.getAbsolutePath()); cmdl.createArgument().setValue(target.getAbsolutePath());


cmdl.setClassname(JavaCC.getMainClass(javaccHome,
JavaCC.TASKDEF_TYPE_JJTREE));

final Path classpath = cmdl.createClasspath(getProject()); final Path classpath = cmdl.createClasspath(getProject());
final File javaccJar = JavaCC.getArchiveFile(javaccHome); final File javaccJar = JavaCC.getArchiveFile(javaccHome);
classpath.createPathElement().setPath(javaccJar.getAbsolutePath()); classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
classpath.addJavaRuntime(); classpath.addJavaRuntime();


cmdl.setClassname(JavaCC.getMainClass(classpath,
JavaCC.TASKDEF_TYPE_JJTREE));

final Commandline.Argument arg = cmdl.createVmArgument(); final Commandline.Argument arg = cmdl.createVmArgument();
arg.setValue("-mx140M"); arg.setValue("-mx140M");
arg.setValue("-Dinstall.root=" + javaccHome.getAbsolutePath()); arg.setValue("-Dinstall.root=" + javaccHome.getAbsolutePath());


+ 61
- 52
src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java View File

@@ -18,10 +18,12 @@
package org.apache.tools.ant.taskdefs.optional.javacc; package org.apache.tools.ant.taskdefs.optional.javacc;


import java.io.File; import java.io.File;
import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;
@@ -307,14 +309,14 @@ public class JavaCC extends Task {
} }
cmdl.createArgument().setValue(target.getAbsolutePath()); cmdl.createArgument().setValue(target.getAbsolutePath());


cmdl.setClassname(JavaCC.getMainClass(javaccHome,
JavaCC.TASKDEF_TYPE_JAVACC));

final Path classpath = cmdl.createClasspath(getProject()); final Path classpath = cmdl.createClasspath(getProject());
final File javaccJar = JavaCC.getArchiveFile(javaccHome); final File javaccJar = JavaCC.getArchiveFile(javaccHome);
classpath.createPathElement().setPath(javaccJar.getAbsolutePath()); classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
classpath.addJavaRuntime(); classpath.addJavaRuntime();


cmdl.setClassname(JavaCC.getMainClass(classpath,
JavaCC.TASKDEF_TYPE_JAVACC));

final Commandline.Argument arg = cmdl.createVmArgument(); final Commandline.Argument arg = cmdl.createVmArgument();
arg.setValue("-mx140M"); arg.setValue("-mx140M");
arg.setValue("-Dinstall.root=" + javaccHome.getAbsolutePath()); arg.setValue("-Dinstall.root=" + javaccHome.getAbsolutePath());
@@ -347,15 +349,33 @@ public class JavaCC extends Task {
protected static String getMainClass(File home, int type) protected static String getMainClass(File home, int type)
throws BuildException { 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 packagePrefix = null;
String mainClass = 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; packagePrefix = COM_PACKAGE;

switch (type) { switch (type) {
case TASKDEF_TYPE_JAVACC: case TASKDEF_TYPE_JAVACC:
mainClass = COM_JAVACC_CLASS; mainClass = COM_JAVACC_CLASS;
@@ -372,58 +392,47 @@ public class JavaCC extends Task {


break; 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; 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; 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; return packagePrefix + mainClass;
} }




Loading…
Cancel
Save