Grails ASTTransformation:如何加载其他类(例如Class.forName(..))?

时间:2012-08-27 21:04:19

标签: java grails groovy classloader abstract-syntax-tree

我正在ASTTransformation - 项目中写Grails(在JAVA中)。

因为我想根据另一个类转换带注释的类,我需要加载另一个类并分析它AST

但是我没有成功加载其他类:

Class.forName("OtherClass") -> ClassNotFoundException
Class.forName("OtherClass", false, classNode.getClassLoader()) -> ClassNotFoundException
OtherClass.class -> ClassNotFoundException

它认为因为AST本身是在编译时执行的,所以另一个类尚未可用。

也许有可能在我的ASTTransformation中获取其他类的来源,然后使用

构建它的AST
new AstBuilder().buildFromCode { ... }

或类似的东西。

但是如何加载资源/代码?

1 个答案:

答案 0 :(得分:0)

我现在找到了解决方案:

ClassNode classNode = (ClassNode) astNode;
classNode.getCompileUnit().getClass("de.foo.bar.OtherClass")

创建一个新的ClassNode,其中包含有关字段,方法,属性等的所有信息。