【发布时间】:2012-01-13 07:44:48
【问题描述】:
我想实现注释处理器,它将基于现有的“原型”类生成新类。
import java.util.List
@MyAnnotation
class MySuperClassPrototype {
static MySuperClassPrototype createInstance() {
return new MySuperClassPrototype();
}
}
由于下面的代码。将生成以下新的源文件(编译单元):
import java.util.List
class MySuperClass {
static MySuperClass createInstance() {
return new MySuperClass();
}
public void specialAddedMethod() {
/*...*/
}
}
我想复制所有顶级导入语句和静态成员,而不是原型类的静态成员。我已经使用 Compiler Tree API (com.sun.source.tree) 走了很远。我可以打印出 Tree 数据类型,同时用新的类名替换旧的类名。但是有些问题似乎很难。
如果我在树中得到 Tree.Kind.IDENTIFIER,我怎样才能找到它引用的实际类。我需要用 MySuperClass 标识符替换所有出现的 MySuperClassPrototype 标识符,然后打印出整个树。
可行吗?
同样,我需要过滤掉@MyAnnotation 注释,再次用 Tree.Kind.IDENTIFIER 或 Tree.Kind.MEMBER_SELECT 表示。
如何找出这个标识符引用的实际注释类?
另一个问题是打印树。如果我使用 toString 方法,我得到了不错的结果,但是构造函数被打印为具有“
【问题讨论】:
标签: java annotations metaprogramming abstract-syntax-tree