Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8217381

Inconvenient errors reported when annotation processor generates source file and errors in the same round

    XMLWordPrintable

    Details

    • Type: Enhancement
    • Status: Resolved
    • Priority: P3
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 13
    • Component/s: tools
    • Subcomponent:
    • Resolved In Build:
      b09

      Description

      Consider an annotation processor that generates source files and errors in the AP round. E.g.:
      ---ProcessorImpl.java
      import java.io.IOException;
      import java.io.Writer;
      import java.util.*;

      import javax.annotation.processing.*;
      import javax.lang.model.SourceVersion;
      import javax.lang.model.element.*;
      import javax.tools.Diagnostic.Kind;

      @SupportedAnnotationTypes("*")
      public class ProcessorImpl extends AbstractProcessor {
          int round = 0;
          @Override
          public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
              if (round++ == 0) {
                  try (Writer w = processingEnv.getFiler().createSourceFile("Extra").openWriter()) {
                      w.write("public class Extra {}");
                  } catch (IOException ex) {
                      throw new IllegalStateException(ex);
                  }
                  processingEnv.getMessager().printMessage(Kind.ERROR, "processor error");
              }
              return false;
          }

          @Override
          public SourceVersion getSupportedSourceVersion() {
              return SourceVersion.latestSupported();
          }
          
      }
      ---

      And consider a source file being compiled with this processor, like:
      ---Test.java
      public class Test extends Extra implements ExtraExtra {}
      ---

      ---
      $ javac -processor ProcessorImpl /tmp/Test.java
      Test.java:1: error: cannot find symbol
      public class Test extends Extra implements ExtraExtra {}
                                ^
        symbol: class Extra
      Test.java:1: error: cannot find symbol
      public class Test extends Extra implements ExtraExtra {}
                                                 ^
        symbol: class ExtraExtra
      error: processor error
      3 errors
      ---

      This is inconvenient for two reasons:
      -the "cannot find Extra" error is resolved by the file the AP generated
      -the error reported by the AP is probably quite important, but is listed after the other errors, some of which are fixed by the AP

        Attachments

          Activity

            People

            Assignee:
            jlahoda Jan Lahoda
            Reporter:
            jlahoda Jan Lahoda
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: