Uploaded image for project: 'JaxMe'
  1. JaxMe
  2. JAXME-77

Java parser chokes on import packagename.*

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 0.5
    • 0.6
    • JaxMeJS
    • None
    • WinXP Pro, Java 1.5.0_03

    Description

      When I use JavaParser to parse a class containing imports of the form "import package.name.*", the parser fails on an IllegalStateException("Unknown token: 87"). Full test case below:

      File: JaxmeTest.java

      import java.io.FileReader;
      import org.apache.ws.jaxme.js.*;
      import org.apache.ws.jaxme.js.util.JavaParser;

      public class JaxmeTest {
      public static void main(String[] args) {
      JavaSourceFactory jsf = new JavaSourceFactory();
      JavaParser parser = new JavaParser(jsf);
      try

      { parser.parse(new FileReader("JaxmeTest.java")); }

      catch(Exception e)

      { e.printStackTrace(); }

      }
      }

      Command line transcript:

      C:\workspace\EventMonitor3.0> javac JaxmeTest.java -cp lib\jaxmejs-0.5.jar;lib\antlr.jar
      C:\workspace\EventMonitor3.0> java -cp .;lib\jaxmejs-0.5.jar;lib\antlr.jar JaxmeTest
      java.lang.IllegalStateException: Unknown token: 87
      at org.apache.ws.jaxme.js.util.JavaParser.parseIdentifier(JavaParser.java:177)
      at org.apache.ws.jaxme.js.util.JavaParser.parseIdentifier(JavaParser.java:166)
      at org.apache.ws.jaxme.js.util.JavaParser.parseIdentifier(JavaParser.java:128)
      at org.apache.ws.jaxme.js.util.JavaParser.parseImportStatement(JavaParser.java:122)
      at org.apache.ws.jaxme.js.util.JavaParser.parseAST(JavaParser.java:457)
      at org.apache.ws.jaxme.js.util.JavaParser.parse(JavaParser.java:108)
      at org.apache.ws.jaxme.js.util.JavaParser.parse(JavaParser.java:80)
      at JaxmeTest.main(JaxmeTest.java:10)

      Looking through the source, it looks like the JavaParser.parseIdentifier() method called by parseImportStatement() expects the identifier to be a primitive or ordinary dotted identifier, but the grammar production used in java15.g is:

      identifierStar
      : IDENT
      ( DOT^ IDENT )*
      ( DOT^ STAR )?
      ;

      This may also have a STAR token, which falls through to the exception case.

      For my purposes, I'd be happy if it just ignored the * and didn't choke on the file.

      Attachments

        1. JAXME-77.patch
          3 kB
          Kenney Westerhof

        Activity

          People

            jochen@apache.org Jochen Wiedmann
            jtang Jonathan Tang
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: