我正在尝试使用 eclipse jdt/ast 内联 java 方法。
例如,我想做这个代码
class Hello {
static void hello() {
System.out.println("hello");
}
public static void main(String[] args) {
hello();
System.out.println("z");
hello();
System.out.println("h");
hello();
}
}
进入这个。
class Hello {
public static void main(String[] args) {
System.out.println("hello");
System.out.println("z");
System.out.println("hello");
System.out.println("h");
System.out.println("hello");
}
}
我可以将 hello() 方法的主体块存储在Block bl
.
我也有 main() 方法的主体块存储在 中Block block
,我可以删除 hello(); ExpressionStatement
s 在块中。
然后,我需要将 插入Block bl
到hello();
调用的位置。我试过
block.statements().add(position, bl.getAST());
和
block.statements().add(position, bl);
whereposition
是 statements() 中方法的位置hello()
,但它们都会引发错误。
可能有什么问题?Block
照原样,Statement
我猜一个可以插入Block
。Block#statements()
添加
基于sevenforce的回答,我可以插入块,但我已经{
包含了}
。
class Hello {
public static void main(String[] args) {
{
System.out.println("hello");
}
System.out.println("z");
{
System.out.println("hello");
}
System.out.println("h");
{
System.out.println("hello");
}
}
}
有什么办法可以去除它们吗?
添加2
使用此代码:
ASTNode singleStmt = (ASTNode) bl.statements().get(0);
block.statements().add(position, ASTNode.copySubtree(bl.getAST(), singleStmt));
它仅显示方法中的第一条语句hello()
。例如,与
static void hello() {
System.out.println("hello");
System.out.println("hello2");
}
我只System.out.println("hello");
内联。