我通过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对象本身的变化,我该如何实现?
答案 0 :(得分:0)
在最初构建AST之后,它不再可变(在其上调用IASTTranslationUnit.freeze()
,并且在该AST中调用节点上的setter的任何进一步尝试都将失败)。
这意味着Change.perform()
不能仅在文件上对AST进行更改。要获得反映更改的AST,您需要构建一个新的AST。