我想实现一个基于现有"prototype"类生成新类的注释处理器.
import java.util.List
@MyAnnotation
class MySuperClassPrototype {
static MySuperClassPrototype createInstance() {
return new MySuperClassPrototype();
}
}
Run Code Online (Sandbox Code Playgroud)
由于下面的代码.将生成以下新源文件(编译单元):
import java.util.List
class MySuperClass {
static MySuperClass createInstance() {
return new MySuperClass();
}
public void specialAddedMethod() {
/*...*/
}
}
Run Code Online (Sandbox Code Playgroud)
我想复制所有顶级import语句和静态成员,而不是原型类的静态成员.我在Compiler Tree API(com.sun.source.tree)上走得很远.我可以打印出Tree数据类型,同时用new class name替换old.但是有些问题看起来很难.
如果我在树中获得Tree.Kind.IDENTIFIER,我如何找到它引用的实际类.我需要用MySuperClass标识符替换所有出现的MySuperClassPrototype标识符,然后打印出整个树.
这可行吗?
类似地,我需要过滤掉@MyAnnotation注释,然后再用Tree.Kind.IDENTIFIER或Tree.Kind.MEMBER_SELECT表示.
如何找到此标识符引用的实际注释类?
另一个问题是打印树.如果我使用toString方法,我得到了不错的结果,但是构造函数被打印为具有"<init>"名称的方法而不是与其类同名的方法,因此我需要手动打印每种树节点.
你可以看到我在这里附带的代码