在编译时或运行时防止在项目类中使用特定注释

时间:2018-04-07 10:39:07

标签: java compilation annotations

我必须阻止在我的项目中使用特定的注释。由于某些特定情况,我必须阻止在项目测试类中使用org.junit.After注释。如果有人使用这个注释,将违反整个测试逻辑。

如果在编译期间或运行时发生这种情况,对我来说并不重要。我的想法是使用Spring AOP创建方面,它会在调用After注释方法上抛出异常。不幸的是,测试类不是Spring bean,因此AOP在这里不起作用。

我该怎么做?是否可以使用一些禁止使用特定注释的编译器指令?

1 个答案:

答案 0 :(得分:0)

您可以编写AnnotationProcessor以在complie period中生成错误

这是注释处理器(find code on github):

@AutoService(Processor.class)
@SupportedAnnotation(After.class)
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class Q49706464 extends XAbstractProcessor {
  @Override
  public boolean processActual(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) throws AssertException {
    roundEnv.getElementsAnnotatedWith(After.class)
        .forEach(e -> error().log("@After is banned.", e));
    return false;
  }
}

对于以下java文件

import org.junit.After;

public class ForQ49706464 {
  @After
  public void after() {

  }
}

您将收到以下编译错误

ForQ49706464.java:7: error: @After is banned.
  public void after() {
              ^

您可以在IDE中集成注释处理器,直接在文本编辑器中查看错误消息。

XAbstractProcessor来自我的图书馆Annotation Processor Toolkit