冲洗AST CDT

时间:2018-10-14 11:11:14

标签: eclipse-cdt abstract-syntax-tree flush

我通过ASTRewrite在AST中进行了一些更改,并通过Change.perform应用了更改,C文件已使用新更改(插入新节点)正确更新,但是在调试模式下AST对象感觉不到这些更改

    ast.getRawSignature(); // C file code as text
    ASTRewrite rewriter = ASTRewrite.create(ast);
    addNewNode(node, ast, rewriter); //Inserting some node
    Change c = rewriter.rewriteAST();
            try {
                c.perform(new NullProgressMonitor());
            } catch (CoreException e) {
                e.printStackTrace();
            }
    /**WHAT I WANT TO FLUSH THE AST HERE TO FEEL THE CHANGES**/
    ast.getRawSignature(); //it still the same C old code and the C file already updated

我需要刷新AST才能感觉到AST对象本身的变化,我该如何实现?

1 个答案:

答案 0 :(得分:0)

在最初构建AST之后,它不再可变(在其上调用IASTTranslationUnit.freeze(),并且在该AST中调用节点上的setter的任何进一步尝试都将失败)。

这意味着Change.perform()不能仅在文件上对AST进行更改。要获得反映更改的AST,您需要构建一个新的AST。