如何使用 ASTRewrite 插入代码片段插入方法的主体?
How to use ASTRewrite to insert a code snippet insert a method's body?
我在 Eclipse Neon 中使用 JDT 编写 Java 代码生成器插件。在某个时刻,我已经有了正确生成的 class 的 AST 和一个空体的方法,如下所示:
// Simplified for this question
public class X {
public void x(void) {
}
}
现在我在 StringBuilder
实例中有一个代码片段可以用作该空方法体的代码。代码写的是正确的,插入后编译无误
在浏览了很多帖子、论坛和 JDT 文档之后,我找不到在 AST 中插入该代码片段的方法。
PS.: 我的一个尝试是使用 ASTParser
class 从我的代码片段中生成一个新的 AST,这实际上是有效的。但是,由于代码段的 AST 与目标 class AST 不同,因此不能用作方法体。
如果您的方法主体已经有 AST,则可以在将其复制到正确的 AST 实例后将其插入到方法中。见方法org.eclipse.jdt.core.dom.ASTNode.copySubtree(AST, ASTNode)
或者,如果您控制时刻,当 ASTRewrite
生成 TextEdit
时,您可以直接添加自己的 InsertEdit
,然后再应用所有编辑。在这种情况下,找到正确的插入偏移量可能是棘手的部分。
我在 Eclipse Neon 中使用 JDT 编写 Java 代码生成器插件。在某个时刻,我已经有了正确生成的 class 的 AST 和一个空体的方法,如下所示:
// Simplified for this question
public class X {
public void x(void) {
}
}
现在我在 StringBuilder
实例中有一个代码片段可以用作该空方法体的代码。代码写的是正确的,插入后编译无误
在浏览了很多帖子、论坛和 JDT 文档之后,我找不到在 AST 中插入该代码片段的方法。
PS.: 我的一个尝试是使用 ASTParser
class 从我的代码片段中生成一个新的 AST,这实际上是有效的。但是,由于代码段的 AST 与目标 class AST 不同,因此不能用作方法体。
如果您的方法主体已经有 AST,则可以在将其复制到正确的 AST 实例后将其插入到方法中。见方法org.eclipse.jdt.core.dom.ASTNode.copySubtree(AST, ASTNode)
或者,如果您控制时刻,当 ASTRewrite
生成 TextEdit
时,您可以直接添加自己的 InsertEdit
,然后再应用所有编辑。在这种情况下,找到正确的插入偏移量可能是棘手的部分。