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

Eclipse Java AST parser: insert statement before if/for/while

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

有没有办法实现?

您可以使用以下代码来实现此目的(这将在第一个 IfStatement 之前添加系统输出):

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

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