Eclipse Java AST解析器:在if / for / while之前插入语句

时间:2015-03-17 23:39:55

标签: java eclipse parsing abstract-syntax-tree eclipse-jdt

我正在使用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之前。

有没有办法实现它?

1 个答案:

答案 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());

注意:代码未经过测试。如果您发现任何问题,请告诉我。