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

时间:2016-03-12 17:15:03

标签: groovy abstract-syntax-tree

我想使用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代码?

1 个答案:

答案 0 :(得分:3)

您可以使用我在使用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%正确(我的意思是,如果你将它编译回来然后它可能无法编译),但绰绰有余的调试。

MacroGroovy中的示例:

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