java - 如何使用 ASTRewrite 插入代码片段插入方法体?

标签 java eclipse-jdt

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

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

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

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

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

最佳答案

如果您的方法主体已有 AST,则可以在将其复制到正确的 AST 实例后将其插入到方法中。参见方法org.eclipse.jdt.core.dom.ASTNode.copySubtree(AST, ASTNode)

或者,如果你控制时刻,当ASTRewrite产生TextEdit您也许可以直接添加 InsertEdit在应用所有编辑之前,您自己的。在这种情况下,找到正确的插入偏移量可能是棘手的部分。

关于java - 如何使用 ASTRewrite 插入代码片段插入方法体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45377342/

相关文章:

java - 最终类中的 Powermock 链式方法调用

java - 如何在Firebase中获取 child 的数据

java - 将静态代码分析从单独的进程转移到 Eclipse 插件

java.lang.NoSuchMethodError : java. 语言.NoSuchMethodError

java - 无法找出 Java 查找 "abstract path"

java - 使用 Intent 相机时给图像命名

java - 如何使用 JDT 获取未设置完整代码的语句

eclipse - 以编程方式从 Eclipse 插件添加源文件夹

java - 从左到右的 Sprite 动画,我应该选择什么?动态的还是运动学的?

java - Java 代码生成器的更好方法?