提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、Usage
1.parse
public static String path="src/main/java/test.java";
// public static String Srcpath="src/main/java";
JavaParser parser = new JavaParser();
ParseResult<CompilationUnit> cu=null;
try {
cu = parser.parse(new File(path));//---------------WATCH OUT HERE------------
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
2.print
cu.getResult().ifPresent(YamlPrinter::print);
for example
from:
class test{
int ttt=0;
int ddd;
public test() {
ddd=1;
}
public static void main(String[] args) {
add(2);
}
static int add(int x) {
return 0;
}
}
to:
root(Type=CompilationUnit):
types:
- type(Type=ClassOrInterfaceDeclaration):
isInterface: “false”
name(Type=SimpleName):
identifier: “test”
members:
- member(Type=FieldDeclaration):
variables:
- variable(Type=VariableDeclarator):
initializer(Type=IntegerLiteralExpr):
value: “0”
name(Type=SimpleName):
identifier: “ttt”
type(Type=PrimitiveType):
type: “INT”
- member(Type=FieldDeclaration):
variables:
- variable(Type=VariableDeclarator):
name(Type=SimpleName):
identifier: “ddd”
type(Type=PrimitiveType):
type: “INT”
- member(Type=ConstructorDeclaration):
body(Type=BlockStmt):
statements:
- statement(Type=ExpressionStmt):
expression(Type=AssignExpr):
operator: “ASSIGN”
target(Type=NameExpr):
name(Type=SimpleName):
identifier: “ddd”
value(Type=IntegerLiteralExpr):
value: “1”
name(Type=SimpleName):
identifier: “test”
modifiers:
- modifier(Type=Modifier):
keyword: “PUBLIC”
- member(Type=MethodDeclaration):
body(Type=BlockStmt):
statements:
- statement(Type=ExpressionStmt):
expression(Type=MethodCallExpr):
name(Type=SimpleName):
identifier: “add”
arguments:
- argument(Type=IntegerLiteralExpr):
value: “2”
type(Type=VoidType):
name(Type=SimpleName):
identifier: “main”
modifiers:
- modifier(Type=Modifier):
keyword: “PUBLIC”
- modifier(Type=Modifier):
keyword: “STATIC”
parameters:
- parameter(Type=Parameter):
isVarArgs: “false”
name(Type=SimpleName):
identifier: “args”
type(Type=ArrayType):
origin: “TYPE”
componentType(Type=ClassOrInterfaceType):
name(Type=SimpleName):
identifier: “String”
- member(Type=MethodDeclaration):
body(Type=BlockStmt):
statements:
- statement(Type=ReturnStmt):
expression(Type=IntegerLiteralExpr):
value: “0”
type(Type=PrimitiveType):
type: “INT”
name(Type=SimpleName):
identifier: “add”
modifiers:
- modifier(Type=Modifier):
keyword: “STATIC”
parameters:
- parameter(Type=Parameter):
isVarArgs: “false”
name(Type=SimpleName):
identifier: “x”
type(Type=PrimitiveType):
type: “INT”
…
4.symbolSolver
the content on web or official book are too old
here is what i found through trial
class visitor extends VoidVisitorAdapter<Void> {
CombinedTypeSolver solver = new CombinedTypeSolver();
public visitor() {
super();
solver.add(new JavaParserTypeSolver(Main.Srcpath) );
}
@Override
public void visit(MethodDeclaration md, Void arg) {super.visit(md,arg);
//do what you like here
System.out.println(md.getName());
System.out.println(md.getBody());
System.out.println(md.getType());
System.out.println(md.getDeclarationAsString());
System.out.println(md.get)
}
@Override
public void visit(MethodCallExpr n, Void arg) {
//do what you like here
// ResolvedType type= JavaParserFacade.get(solver).getType(n);
// MethodUsage tsype = JavaParserFacade.get(solver).solveMethodAsUsage(n);
// System.out.println(type);
// System.out.println(tsype.getCorrespondingDeclaration());
// System.out.println(tsype.getDeclaration());
// System.out.println(tsype.getClass());
// System.out.println(tsype.getQualifiedSignature());
super.visit(n, arg);
}
}
use it :
visitor visitor=new visitor();
visitor.visit(cu.getResult().get(), null);