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() メソッドの body ブロックも に格納されているBlock blockので、hello(); を削除できます。ExpressionStatementはブロックにあります。
次に、が呼び出されBlock blた場所にを挿入する必要があります。hello();私は試した
block.statements().add(position, bl.getAST());
と
block.statements().add(position, bl);
wherepositionは statement() のメソッドの場所ですhello()が、どちらもエラーが発生します。
何が間違っている可能性がありますか? そのまま、に挿入できるBlockとStatement思います。BlockBlock#statements()

追加した
セブンフォースの回答に基づいて、ブロックを挿入できましたが{、}含まれています。
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()methodの最初のステートメントのみを示しています。たとえば、
static void hello() {
System.out.println("hello");
System.out.println("hello2");
}
私はSystem.out.println("hello");インライン化しただけです。