Я получаю AST как строку компилятором jDT как:
MethodDeclaration ArrayType SimpleType SimpleName Объект SimpleName
метод SingleVariableDeclaration PrimitiveType int SimpleName x Блок
VariableDeclarationStatement PrimitiveType int
VariableDeclarationFragment SimpleName y IfStatement NumberLiteral
ReturnStatement NumberLiteral ReturnStatement
InfixExpression + SimpleName xNumberLiteral
для метода:
Object[] method(int x) {
int y;
if(1)
return 1;
else
return x+3;
}
Как я могу преобразовать вышеуказанную строку AST в дерево, которое поможет мне пройти по этому дереву любым методом?
Вот мой код:
srcCode = "class t { Object[] method(int x) {int y;if(1)return 1;else return x+3;}}";
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(srcCode.toCharArray());
parser.setResolveBindings(true);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.accept(new ASTVisitor() {
@Override
public boolean visit(MethodDeclaration node) {
ast += node.getClass().getSimpleName() + " ";
return true;
}
@Override
public boolean visit(VariableDeclarationFragment node) {
// System.out.println(node.getClass().getSimpleName());
ast += node.getClass().getSimpleName() + " ";
return true;
}
@Override
public boolean visit(TypeDeclaration node) {
// System.out.println(node.getClass().getSimpleName());
return true;
}
@Override
public boolean visit(SimpleName node) {
// System.out.println("----> "+node.getClass().getSimpleName() + " " + node);
;
ast += node.getClass().getSimpleName() + " " + node ;
List<ASTNode> children = getChildren(node);
// System.out.println(node.getIdentifier());
return false;
}
public boolean visit(ReturnStatement node) {
// System.out.println(node.getClass().getSimpleName());
ast += node.getClass().getSimpleName() + " ";
System.out.println(node.getParent().getParent());
ASTNode parentNode = node.getParent();
// tree.addNode(node.getClass().getSimpleName(),);
return true;
}
public boolean visit(SingleVariableDeclaration node) { //
System.out.println(node.getClass().getSimpleName());
ast += node.getClass().getSimpleName() + " ";
return true;
}
и т. Д. Для всех подклассов