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



我正在Grails-项目中编写一个ASTTransformation(用JAVA)。

因为我想基于另一个类来转换带注释的类,所以我需要加载另一个类别并分析它的AST

但我没有成功加载另一个类:

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

它认为,因为AST本身是在编译时执行的,所以其他类还不可用。

也许可以在我的ASTTransformation中获得另一个类的源,然后用构建它的AST

new AstBuilder().buildFromCode { ... }

或者类似的东西。

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

我现在找到了解决方案:

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

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

相关内容

最新更新