如何添加一段代码,方法体JDT / AST(How to add a code snippet to

2019-08-03 19:26发布

我试图生成JDT / AST Java源代码。 我现在有MethodDeclaration ,想添加一段代码(从另一来源)的方法体。 代码段可以包含任何Java代码, 甚至语法上是无效的代码 。 我只是找不到这样做的方式。

随着JCodeModel你会使用JBlock#directStatement(String s)已方法 。

有没有一种方法与JDT / AST做到这一点?

Answer 1:

既然你的应用程序的其余部分,良好的树,你想在一个特定的地方插入非形成井文本,你几乎无法与标准树节点插入机制,做到这一点。

要紧的是,你生产用在正确的地方插入片段中的有效程序文本的文本。 某处必须有一块逻辑的一个打印AST为文本。 什么,你需要做的是要问的是,AST打印为文本,并抓住它在这个过程中间,在必要的精确点,您插入任意文本。

我们的DMS软件再造工具包在其prettyprinter进入/退出打印节点挂钩,允许这种情况发生的事情。

如果JDT / AST不存在这样的事情,你可以尝试修改其prettyprinter给你的那个勾。 另外,您也可以考虑通过添加另一个目录树节点类型,是不是定的标准,简单地持有任意文本,但就像一个方法节点的一部分修改JDT / AST。 据推测每个节点控制被打印的东西; 那么你可以定义该树节点以漂亮的方式,以使其输出的文本。

最后真的哈克解决方案:插入一个完全有效的AST在任意文本会去,含有某处具有独特的名称,例如,ZZZ虚假标识。 然后,打印AST为一个字符串,和后处理的字符串替换包含与实际用户文本的唯一名称的假树。



Answer 2:

首先,您需要解析的代码片段的AST。 您可以使用ASTParser API用于此目的。

这是可能得到一个编译单元的编译问题(见CompilationUnit.getProblems()

有一对夫妇的方式来使用JDT修改Java代码 。 我建议你考虑ASTRewrite的修改方法的主体API。



文章来源: How to add a code snippet to method body with JDT/AST