不使用注释创建自定义Java编译器错误

时间:2013-04-04 19:22:11

标签: java compiler-errors apt

有没有办法在不进行注释的情况下将处理器添加到编译器中?

基本上,如果用户没有正确实现接口(即不满足后置条件),我希望构建失败。在编译时,我想检查一个类是否实现了一个接口,如果是,则运行一些代码来检查实现是否正确。

例如,我想确保实现getErrorMoniker()的类在camelCase中返回一个字符串。

public interface MyError {
  public String getErrorMoniker();
}

public class MyErrorImplemented1 {
  @Override
  public String getErrorMoniker() { return "goodErrorMoniker"; }
}

public class MyErrorImplemented2 {
  @Override
  public String getErrorMoniker() {
    return "BADERRORMONIKER"; // I would like a compile error here
  }
}

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用@SupportedAnnotationTypes("*")注释的处理器理论上应该能够处理所有源文件,因为它也适用于一组空注释。来自documentation

  

如果不存在注释类型,则仍会出现注释处理,但只有支持处理“*”的通用处理器才能声明(空)注释类型集。

虽然您检查返回值的目标可能不起作用,因为这发生在编译时,而不是运行时。