如何使用ASTRewrite插入代码片段插入方法的主体?

时间:2017-07-28 15:32:09

标签: java eclipse-jdt

我在Eclipse Neon中使用JDT来编写Java代码生成器插件。在某个时刻,我已经拥有了正确生成的类的AST和一个空体的方法,如下所示:

// Simplified for this question
public class X {
  public void x(void) {
  }
}

现在我在StringBuilder实例中有一个代码片段,可以用作该空方法体的代码。代码写得正确,因此,插入后,它将编译而没有错误。

在浏览了许多帖子,foruns和JDT文档之后,我找不到在AST中插入该代码片段的方法。

PS:我的一个尝试是使用ASTParser类从我的代码片段生成一个新的AST,实际上是有效的。但是,由于片段的AST与目标类AST不同,因此不能将其用作方法体。

1 个答案:

答案 0 :(得分:1)

如果已经为方法体提供了AST,则可以在将其复制到正确的AST实例后将其插入到方法中。请参阅方法org.eclipse.jdt.core.dom.ASTNode.copySubtree(AST, ASTNode)

或者,如果您控制时间,当ASTRewrite生成TextEdit时,您可以直接添加自己的InsertEdit,然后再应用所有修改。在这种情况下,找到正确的插入偏移量可能是棘手的部分。