在保存文件之前,不会删除自定义编译器错误(修复后)

时间:2015-04-13 03:39:32

标签: java eclipse compiler-errors annotation-processing

我制作的每个注释处理器似乎都有这个问题。例如,@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。有什么方法可以阻止这种情况吗?

2 个答案:

答案 0 :(得分:3)

在保存文件之前,编译器不会运行。这就是无法确定编译器错误的原因(直到保存文件)。不,没有什么可以解决的(这就是设计工作的方式)。

答案 1 :(得分:0)

我不知道如何在不保存的情况下消除错误(不确定是否可能),但我想下一个最好的事情是自动保存文件。

查看these plugins。您还可以调整他们保存的频率。