【问题标题】:How to use ASTRewrite to insert a code snippet insert a method's body?如何使用 ASTRewrite 插入代码片段插入方法的主体?
【发布时间】:2017-07-29 05:24:26
【问题描述】:

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

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

现在我在StringBuilder 实例中有一个代码sn-p,可以用作该空方法体的代码。代码写得正确,所以插入后编译不会出错。

在浏览了许多帖子、论坛和 JDT 文档后,我找不到将代码 sn-p 插入 AST 的方法。

PS.:我的一个尝试是使用 ASTParser 类从我的 sn-p 生成一个新的 AST,这实际上是有效的。但是由于sn-p的AST与目标类AST不同,所以不能作为方法体。

【问题讨论】:

    标签: java eclipse-jdt


    【解决方案1】:

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

    或者,如果您控制时间,当ASTRewrite 产生TextEdits 时,您也许可以直接添加您自己的InsertEdit,然后再应用所有编辑。在这种情况下,找到正确的插入偏移量可能会很棘手。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2021-09-10
      • 2021-04-28
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多