如何排除使用注释处理编译的java类?

时间:2015-08-23 19:19:11

标签: java annotations annotation-processing

我有两个注释:

@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;
    }
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

以下是从注释处理中排除某些Java类的两种常规方法:

  1. 运行编译器两次。第一次,编译整个项目而不运行注释处理器。第二次,命令行应包含注释处理器,并且应仅列出要运行注释处理器的文件。只有编译器编译的文件才能进行注释处理。这包括在命令行上传递的文件,以及那些依赖于.class文件不是最新的文件。

  2. 在注释处理器中编写逻辑以跳过某些文件的处理。

  3. 方法#1是我使用的方法。