我有两个注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Ann {
public String description() default "AAA";
public String template() default "BBB";
}
和
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface AnotherAnn {
public String text() default "Text";
}
带注释方法的简单类:
public class App {
@Ann(description = "Desc", template = "Templ")
public void someMethod(){}
}
我想创建App
类的新副本,并将副本类(@Ann
方法之前)中的someMethod
注释替换为@AnotherAnn
。
E.q.注释处理后App
类的副本:
public class AppCopy {
@AnotherAnn(text = "Text")
public void someMethod(){}
}
然后我应该排除App
类被编译。
处理器:
@SupportedAnnotationTypes("alexiuscrow.annotation.Ann")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class Proc extends AbstractProcessor {
public Proc() {
super();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
/* TODO CREATE COPY & EXCLUDE ORIGINAL */
return true;
}
}
我该怎么做?
答案 0 :(得分:0)
以下是从注释处理中排除某些Java类的两种常规方法:
运行编译器两次。第一次,编译整个项目而不运行注释处理器。第二次,命令行应包含注释处理器,并且应仅列出要运行注释处理器的文件。只有编译器编译的文件才能进行注释处理。这包括在命令行上传递的文件,以及那些依赖于.class文件不是最新的文件。
在注释处理器中编写逻辑以跳过某些文件的处理。
方法#1是我使用的方法。