如何使用JDT / AST将代码段添加到方法主体中

问题描述 投票:16回答:3

我正在尝试使用JDT / AST生成Java源代码。我现在有MethodDeclaration,并想将代码片段(来自另一个来源)添加到方法主体中。该代码段可以包含任何Java代码,甚至是语法上无效的代码。我只是找不到做到这一点的方法。

对于JCodeModel,您将使用JBlock#directStatement(String s) method

是否有使用JDT / AST进行此操作的方法?

java code-generation abstract-syntax-tree eclipse-jdt
3个回答
9
投票

由于您在应用程序的其余部分中都有一棵格式正确的树,并且您想要在特定位置插入格式不正确的文本,因此使用标准的树节点插入机制几乎无法做到这一点。] >

重要的是,您为有效的程序文本生成了文本,并且在正确的位置插入了片段。在其中的某处必须有一条逻辑将AST打印为文本。您需要做的是要求将AST打印为文本,并在该过程的中间,在必要的准确点插入它,以插入您的任意文本。

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

如果JDT / AST中不存在此类内容,则可以尝试修改其prettyprinter以提供该挂钩。或者,您可以考虑通过添加另一种不属于标准集的树节点类型来修改JDT / AST,该树节点类型仅包含任意文本,但其作用类似于方法节点。大概每个节点都控制打印内容。那么您可以为该树节点定义prettyprinting,以使其输出其文本。

最终的真正骇人听闻的解决方案:在任意文本将插入的地方插入一个完全有效的AST,在某处包含带有唯一名称(例如ZZZ)的伪造标识符。然后,将AST打印到字符串,然后对该字符串进行后处理,以将包含唯一名称的伪造树替换为实际用户文本。


3
投票

[您首先需要将代码段解析为AST。为此,您可以使用ASTParser API。


0
投票

您可以使用ASTParser API操作AST-甚至不需要编译输出。

© www.soinside.com 2019 - 2024. All rights reserved.