Странная работа или двухпараметрическая форма messager.printMessage - PullRequest
1 голос
/ 01 мая 2019

В соответствии с 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 представлении

enter image description here

, но не отображается в журнале ошибок.


Если я использую первую форму, ожидая найти ошибку в журнале проблем или ошибок:

public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    messager.printMessage(Kind.ERROR, "Some problem with annotations.");
    return true;
  • Никаких проблем не наблюдается вообще, в проблемах или в исходном файле. А в Журнале ошибок есть «Некоторая проблема с аннотациями». строка, но это не ошибка или, по крайней мере, предупреждение, а строка info . В реальной жизни такая линия наверняка останется без внимания. Как я могу заставить Eclipse отображать ошибку как error ?
...