@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