意外と簡単。
Parser parser = new Java14Parser();
ASTCompilationUnit acu = (ASTCompilationUnit) parser
.parse(new FileReader("src/Sample.java"));
とやってパーサに読み込ませれば、ツリー構造が出来上がり。acu.dump("");すれば内容が確認できる。こんなクラスをパースさせると、
public class Sample {
int foo(int i) {
return java.lang.Integer.MAX_VALUE + 1;
}
}
こんなのが出来上がる。
CompilationUnit
TypeDeclaration
ClassOrInterfaceDeclaration(Sample)(class)
ClassOrInterfaceBody
ClassOrInterfaceBodyDeclaration
MethodDeclaration:(package private)
ResultType
Type
PrimitiveType:int
MethodDeclarator:foo
FormalParameters
FormalParameter:(package private)
Type
PrimitiveType:int
VariableDeclaratorId:i
Block
BlockStatement
Statement
ReturnStatement
Expression
AdditiveExpression:+
PrimaryExpression
PrimaryPrefix
Name:java.lang.Integer.MAX_VALUE
PrimaryExpression
PrimaryPrefix
Literal:1
で、特定の構造に着目したい時はビジタパターンで抜き出すことができる。たとえばimport文を調べたい場合は、以下のようにすれば良い。
JavaParserVisitorAdapter visitor = new JavaParserVisitorAdapter() {
public Object visit(ASTImportDeclaration node, Object data) {
// ...
return super.visit(node, data);
}
};
visitor.visit(acu, null);