Как построить дерево из строки в JDT Eclipse? - PullRequest
0 голосов
/ 21 января 2019

Я получаю 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;
        }

и т. Д. Для всех подклассов

...