6

I'm looking for a java library that allows me to parse a java source file and that gives me an AST representation of the code.

Actually I'm only interested in the class and method definitions with their annotations. I don't need the AST of the method code.

I'm using this information for code generation. This is why I can't compile the source file first to get the information from the resulting class file. The code wouldn't compile without errors until I generate some additional classes.

6 Answers 6

10

Java 6 supports this as a native part of the compiler and has standard APIs for it (javax.lang.model). You can read up on it here. It is designed specifically for your use-case (i.e. code generation from annotations and source).

Sign up to request clarification or add additional context in comments.

6 Comments

Yes, this looks good. Can you give me a hint which class is responsible for reading the source file?
You create a compiler "plugin" that you specify to javac on the command line. I think the interface you implement is javax.annotation.processing.Processor
javax.lang.model is based on what is required for processing annotations, rather than being an abstract syntax tree for the whole language. So it has packages, class, methods, fields, parameters and variables, but not expressions or statements.
What a shame. I really need to call the parser from within my generation framework.
What this allows you to do is to build your code generation framework into javac itself. @Pete: I am of course aware of this, question specifies that method bodies are not required.
|
8

ANTLR (http://www.antlr.org/) has a parser for the Java language and it also suports ASTs.

try

options {
    output=AST;
}

in the *.g file (I haven't tried it personally);

2 Comments

OK, I compiled the Java.g but I still don't know how to use it to get an AST. Do you have an example?
All I can offer at this stage (I'm still learning) is: options { output=AST; } in the *.g file
2

You can try JavaCC with a grammar file for java language.

Comments

2

I think NetBeans Javaparser might be something you'll be interested in.

1 Comment

OK, now I've built a jar of this. How can I use it to create an AST from a java source file?
2

I found the project javaparser, which parses a single java file and returns a well formed AST.

Comments

2

@tangens wrote about JavaParser but referenced a now outdated project.

There has been a fork in 2011 that is still actively maintained and now also parses Java 1.7 and 1.8.

You can find it there: https://github.com/javaparser/javaparser

Disclaimer: I am a contributor to that project.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.