我想實現基於現有「原型」類生成新類的註釋處理器。Java靜態元編程
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() {
/*...*/
}
}
我想複製所有頂級import語句和靜態成員和原型類的不是靜態成員。我使用Compiler Tree API(com.sun.source.tree)進行了很多改進。我可以打印出Tree數據類型,同時替換舊的類名。但有些問題似乎很難。
如果我在樹中得到Tree.Kind.IDENTIFIER,我怎麼才能找到它引用的實際類。我需要用MySuperClass標識符替換所有出現的MySuperClassPrototype標識符,並打印出整棵樹。
可行嗎?
同樣,我需要過濾出@MyAnnotation註釋,並再次用Tree.Kind.IDENTIFIER或Tree.Kind.MEMBER_SELECT表示它。
如何找到由此標識符引用的實際註釋類?
另一個問題是打印出樹。如果我使用toString方法,我得到了不錯的結果,但構造函數打印爲具有「<init>」名稱的方法,而不是與它的類具有相同名稱的方法,因此我需要手動打印每種樹節點。