我制作的每个注释处理器似乎都有这个问题。例如,@Constant
注释:
package annotations;
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface Constant {
}
处理器:
package processor;
@SupportedAnnotationTypes("annotations.Constant")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public final class ConstantProcessor extends AbstractProcessor {
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for(Element element : roundEnv.getElementsAnnotatedWith(Constant.class)) {
Set<Modifier> modifiers = element.getModifiers();
if(!modifiers.contains(Modifier.PUBLIC) || !modifiers.contains(Modifier.STATIC) || !modifiers.contains(Modifier.FINAL)) {
processingEnv.getMessager().printMessage(Kind.ERROR, "A constant must be public, static and final", element);
}
}
return false;
}
}
如果使用@Constant
注释的字段不是public static final
,则会引发编译错误。
问题是,在我保存文件之前,错误不会出现。同样的错误消失了。如果我解决了问题,那么错误将一直存在,直到我保存文件。
我正在使用Eclipse Luna和Java 8u31。有什么方法可以阻止这种情况吗?