将 AST 节点字符串转换为 groovy 代码

Convert AST nodes string to groovy code

我想使用 AstBuilder 创建 groovy 代码,但之后,我想看看实际的 groovy 代码会是什么样子。 是否可以像这样转换 AST 节点的 toString 输出:

org.codehaus.groovy.ast.stmt.BlockStatement@5b7a5baa[
org.codehaus.groovy.ast.stmt.ExpressionStatement@776aec5c[
expression:org.codehaus.groovy.ast.expr.DeclarationExpression@1d296da[
org.codehaus.groovy.ast.expr.VariableExpression@7c7a06ec[
variable: cl]("=" at 2:17:  "=" )org.codehaus.groovy.ast.expr.ClosureExpression@13c9d689[
]{ org.codehaus.groovy.ast.stmt.BlockStatement@75d4a5c2[
] }]]]

回到groovy代码?

您可以使用我在处理 AST 转换时使用的最喜欢的代码片段:

java.io.StringWriter writer = new java.io.StringWriter();
groovy.inspect.swingui.AstNodeToScriptVisitor visitor = new groovy.inspect.swingui.AstNodeToScriptVisitor(writer);
visitor.visitClass(node); // replace with proper visit****
System.out.println(writer.toString());

它将提供几乎正确的 Groovy 代码。它仍然不是 100% 正确(我的意思是,如果你将它编译回来,那么它可能无法编译),但对于调试来说已经足够了。

宏中的示例Groovy:

https://github.com/bsideup/MacroGroovy/blob/950193cb2d12443bf0c7b7af9635f24712d3bad0/src/main/groovy/ru/trylogic/groovy/macro/MacroTransformation.java#L58