我编写了一个 Groovy AST 转换,它仅在 Grails 自动重新加载要应用的类时为我运行。如果我清理项目并使用 run-app 启动应用程序,则 AST 转换不会运行。触摸类以便 grails 自动重新加载会导致转换运行。
注释和 ASTTransformation 实现是 groovy 类,位于我的 Grails 应用程序的 src/groovy 目录中。注释用于域类,在域目录中以 groovy 编写。
这是否可能是由 groovy 文件的编译顺序或类加载器加载它们时引起的?如果是这样,我如何确保在域类之前编译/加载我的 ast 转换?
注释:
@Target([ElementType.TYPE])
@Retention(RetentionPolicy.RUNTIME)
@GroovyASTTransformationClass(["com.abc.annotation.SecuredObjectASTTransformation"])
public @interface SecuredObject {
}
ASTTransforamtion 实现:
@GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
class SecuredObjectASTTransformation implements ASTTransformation {
@Override
public void visit(ASTNode[] nodes, SourceUnit sourceUnit) {
// add some new properties...
}
}
Grails 版本是 2.1.0。