【发布时间】:2014-07-31 07:54:05
【问题描述】:
我目前正在尝试实现一些 Groovy 编译时 AST 转换,但遇到了麻烦:
如何为字段赋值语句指定 AST 转换?即 AST 转换应该转换以下代码:
class MyClass {
@MyTransformation
String myField
public void init() {
}
}
变成类似的东西
class MyClass {
String myField
public void init() {
this.myField = "initialized!"
}
}
我尝试使用这个 AST 构建器调用:
def ast = new AstBuilder().buildFromSpec {
expression{
declaration {
variable "myField"
token "="
constant "initialized!"
}
}
}
但是在声明类的“init”方法中插入结果语句后,它反而插入了一个变量赋值,如
java.lang.Object myField = "initialized!"
我查看了Ast Builder TestCase 中包含的示例,但它们仅涵盖类主体中的字段声明,而不是对字段的分配。我自己使用fieldNode 的尝试都导致了编译器错误。我将编译阶段设置为INSTRUCTION_SELECTION;我觉得应该没问题。
我如何实现这一目标?首选基于AstBuilder#buildFromSpec 方法的解决方案,但我们将非常感谢任何帮助。
【问题讨论】:
标签: groovy abstract-syntax-tree