0

我正在我的项目中写一个ASTTransformation(用 JAVA 语言)Grails

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

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

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

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

也许有可能在 my 中获取另一个类的来源,ASTTransformation然后AST

new AstBuilder().buildFromCode { ... }

或类似的东西。

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

4

1 回答 1

0

我现在找到了解决方案:

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

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

于 2012-08-28T07:38:21.647 回答