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
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.