В соответствии с Java.doc , Messager
имеет 4 следа printMessage:
printMessage(Diagnostic.Kind kind, CharSequence msg)
printMessage(Diagnostic.Kind kind, CharSequence msg, Element e)
printMessage(Diagnostic.Kind kind, CharSequence msg, Element e, AnnotationMirror a)
printMessage(Diagnostic.Kind kind, CharSequence msg, Element e, AnnotationMirror a, AnnotationValue v)
Интерфейс аннотации:
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface AddBuilder {
public boolean lazyBuild() default false;
}
Я хочу, чтобы он работал только с неабстрактным классом и проверял абстрактность в Processor
. Причина: Я хочу знать, как я могу делать проверки в процессоре .
Второй вариант работает:
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Set<? extends Element> classesForBuilder = roundEnv.getElementsAnnotatedWith(AddBuilder.class);
for(Element classElement : classesForBuilder){
if (classElement.getModifiers().contains(Modifier.ABSTRACT) ) {
messager.printMessage(Kind.ERROR, "AnnoBuilder cannot be applied to an abstract class.", classElement);
return true;
}
...
Ошибка замечена в аннотированном элементе и в Problems
представлении
, но не отображается в журнале ошибок.
Если я использую первую форму, ожидая найти ошибку в журнале проблем или ошибок:
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
messager.printMessage(Kind.ERROR, "Some problem with annotations.");
return true;
- Никаких проблем не наблюдается вообще, в проблемах или в исходном файле. А в Журнале ошибок есть «Некоторая проблема с аннотациями». строка, но это не ошибка или, по крайней мере, предупреждение, а строка info . В реальной жизни такая линия наверняка останется без внимания. Как я могу заставить Eclipse отображать ошибку как error ?