@SupportedAnnotationTypes({"com.tg.annotation.Table", "com.tg.annotation.Test"})
public class TgDaoGenerateProcessor extends AbstractProcessor {
private Messager messager;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
messager = processingEnv.getMessager();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
messager.printMessage(Diagnostic.Kind.NOTE, "annotations size " + annotations.size());
}
在我的項目有一個類註釋@Table
和類註釋@Test
關於Java AbstractProcessor的一些問題?
我乾淨的輸出目錄和在建的IntelliJ,輸出兩行:
annotations size 2
annotations size 0
爲什麼有兩行呢? javac做了什麼?
如果我重建它沒有打印。我想我不修改源代碼,所以javac不會生成新的.class
。如果我修改了一個註解爲@Table
並重建的類,則輸出爲:annotations size 1
。 APT得到@Table
信息,無法獲得@Test
註釋類信息,因爲我不修改註釋類@Test
?
我想獲得帶註釋的課程信息@Table
和@Test
並使用它們生成一個xml文件。舉一個例子:A級註釋爲@Table
,B級註釋爲@Test
,APT將獲得A類和B類的字段和方法,然後將它們寫入新文件。因此,如果只修改類A,更改一些字段和方法。構建和APT處理器不能獲得註釋爲@Test
的類B,缺少這些信息我無法生成最新的xml文件。當然,我清理輸出目錄並重建,它會工作,但沒有人願意這樣做。所以改變任何一個班級,如何讓APT Processor可以獲得所有班級的信息。
問題不明確,請參見[問]。 – EJoshuaS
您應該閱讀['Processor']的文檔(http://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html)。它有更多的細節,並解釋了這種事情。 – Radiodef