messager.printMessage

时间:2019-05-01 12:51:44

标签: java eclipse annotations annotation-processing annotations-processing-messager

根据Java.docMessager有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将错误显示为错误

0 个答案:

没有答案