我想在另一条评论之后插入节点
/**************/
/* Prototypes */
/**************/
--->want to declare function prototype here
int x = 5;
所以我通过这段代码在ast中获得了注释节点
@Override
protected int visit(IASTComment comment) {
if(comment.getRawSignature().contains("Prototypes")) {
prototypeNode = comment;
}
return super.visit(comment);
}
然后我想在评论
之后插入此节点INodeFactory factory = ast.getASTNodeFactory();
IASTSimpleDeclaration simpleDeclaration = factory.newSimpleDeclaration(functionDef.getDeclSpecifier());
simpleDeclaration.addDeclarator(functionDef.getDeclarator());
ASTRewrite rewriter = ASTRewrite.create(ast);
//I want to insert the simpleDeclaration node after the comment node
**enter code here**
Change c = rewriter.rewriteAST();
try {
c.perform(new NullProgressMonitor());
} catch (CoreException e) {
e.printStackTrace();
}
答案 0 :(得分:0)
ASTRewrite
有一个insertBefore(IASTNode parent, IASTNode insertionPoint, IASTNode newNode, TextEditGroup editGroup)
方法,您可以将其用于此目的。
在您的情况下,您希望通过以下方式调用它:
simpleDeclaration
作为newNode
int x = 5;
的声明(您将在遍历期间找到)作为insertionPoint
的参数insertionPoint
的父级(可能是IASTTranslationUnit
)作为parent
的参数null
参数传递editGroup
。 (基于CDT代码库中ASTRewrite的现有用法,似乎这个可选参数的目的是将一组编辑与描述/标签相关联,以后可以在例如重构UI中显示。)