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());
注意:代码未经测试。如果您发现任何问题,请告诉我。
我正在使用 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());
注意:代码未经测试。如果您发现任何问题,请告诉我。