我正在使用org.eclipse.jdt解析器。
我想重写这段代码:
public void foo(){
...
...
if(a>b)
...
...
}
进入这个:
public void foo(){
...
...
System.out.println("hello");
if(a>b)
...
...
}
假设ifnode是一个IF_STATEMENT节点,我可以做类似的事情:
Block block = ast.newBlock();
TextElement siso = ast.newTextElement();
siso.setText("System.out.println(\"hello\");");
ListRewrite listRewrite = rewriter.getListRewrite(block, Block.STATEMENTS_PROPERTY);
listRewrite.insertFirst(ifnode, null);
listRewrite.insertFirst(siso, null);
rewriter.replace(ifnode, block, null);
但是这会在方法的开头插入syso语句,而我希望它在if之前。
有没有办法实现它?
答案 0 :(得分:0)
您可以使用以下代码来实现此目的(这将在第一个IfStatement
之前添加sysout):
Block block = ast.newBlock();
TextElement siso = ast.newTextElement();
siso.setText("System.out.println(\"hello\");");
ListRewrite listRewrite = rewriter.getListRewrite(block, CompilationUnit.IF_STATEMENT);
listRewrite.insertFirst(siso, null);
TextEdit edits = rewriter.rewriteAST(document, null);
此外,您可以将重写范围限制为IfStatement
:
ASTRewrite rewriter = ASTRewrite.create(ifNode.getAST());
注意:代码未经过测试。如果您发现任何问题,请告诉我。