bodewig     2003/07/07 02:08:44

  Modified:    src/main/org/apache/tools/ant/taskdefs/optional/javacc
                        JavaCC.java
  Log:
  Add support for JavaCC 3.1
  
  Revision  Changes    Path
  1.23      +59 -30    
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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- JavaCC.java       4 Apr 2003 09:08:52 -0000       1.22
  +++ JavaCC.java       7 Jul 2003 09:08:44 -0000       1.23
  @@ -55,8 +55,10 @@
   package org.apache.tools.ant.taskdefs.optional.javacc;
   
   import java.io.File;
  +import java.io.IOException;
   import java.util.Enumeration;
   import java.util.Hashtable;
  +import java.util.zip.ZipFile;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.Task;
  @@ -120,6 +122,7 @@
       protected static final String COM_JJDOC_CLASS = "jjdoc.JJDocMain";
   
       protected static final String ORG_PACKAGE = "org.netbeans.javacc.";
  +    protected static final String ORG_JAVACC_PACKAGE = "org.javacc.";
       protected static final String ORG_JAVACC_CLASS = "parser.Main";
       protected static final String ORG_JJTREE_CLASS = COM_JJTREE_CLASS;
       protected static final String ORG_JJDOC_CLASS = COM_JJDOC_CLASS;
  @@ -313,7 +316,7 @@
               throw new BuildException("Outputdir not a directory.");
           }
           cmdl.createArgument().setValue("-OUTPUT_DIRECTORY:"
  -            + outputDirectory.getAbsolutePath());
  +                                       + outputDirectory.getAbsolutePath());
   
           // determine if the generated java file is up-to-date
           final File javaFile = getOutputJavaFile(outputDirectory, target);
  @@ -368,50 +371,76 @@
           String mainClass = null;
   
           switch (majorVersion) {
  -            case 1:
  -            case 2:
  -                packagePrefix = COM_PACKAGE;
  +        case 1:
  +        case 2:
  +            packagePrefix = COM_PACKAGE;
  +
  +            switch (type) {
  +            case TASKDEF_TYPE_JAVACC:
  +                mainClass = COM_JAVACC_CLASS;
   
  -                switch (type) {
  -                    case TASKDEF_TYPE_JAVACC:
  -                        mainClass = COM_JAVACC_CLASS;
  -
  -                        break;
  -
  -                    case TASKDEF_TYPE_JJTREE:
  -                        mainClass = COM_JJTREE_CLASS;
  +                break;
   
  -                        break;
  +            case TASKDEF_TYPE_JJTREE:
  +                mainClass = COM_JJTREE_CLASS;
   
  -                    case TASKDEF_TYPE_JJDOC:
  -                        mainClass = COM_JJDOC_CLASS;
  +                break;
   
  -                        break;
  -                }
  +            case TASKDEF_TYPE_JJDOC:
  +                mainClass = COM_JJDOC_CLASS;
   
                   break;
  +            }
   
  -            case 3:
  -                packagePrefix = ORG_PACKAGE;
  +            break;
   
  -                switch (type) {
  -                    case TASKDEF_TYPE_JAVACC:
  -                        mainClass = ORG_JAVACC_CLASS;
  +        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.replace('.', '/')) != null) {
  +                    packagePrefix = ORG_PACKAGE;
  +                } else {
  +                    packagePrefix = ORG_JAVACC_PACKAGE;
  +                }
  +            } 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);
  +                    }
  +                }
  +            }
   
  -                        break;
  +            switch (type) {
  +            case TASKDEF_TYPE_JAVACC:
  +                mainClass = ORG_JAVACC_CLASS;
   
  -                    case TASKDEF_TYPE_JJTREE:
  -                        mainClass = ORG_JJTREE_CLASS;
  +                break;
   
  -                        break;
  +            case TASKDEF_TYPE_JJTREE:
  +                mainClass = ORG_JJTREE_CLASS;
   
  -                    case TASKDEF_TYPE_JJDOC:
  -                        mainClass = ORG_JJDOC_CLASS;
  +                break;
   
  -                        break;
  -                }
  +            case TASKDEF_TYPE_JJDOC:
  +                mainClass = ORG_JJDOC_CLASS;
   
                   break;
  +            }
  +
  +            break;
           }
   
           return packagePrefix + mainClass;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to