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

Erroneous parameterized type represented as <any>

    XMLWordPrintable

Details

    • Task
    • Resolution: Fixed
    • P4
    • 24
    • 24
    • tools
    • None
    • b13

    Description

      Reported here:
      https://mail.openjdk.org/pipermail/compiler-dev/2024-August/027572.html

      Consider code like:
      ```
      class C {
          Undefined u1;
          Undefined<UndefinedParam> u2;
      }
      ```

      And consider annotation processor like:
      ```
      import java.util.Set;
      import javax.annotation.processing.AbstractProcessor;
      import javax.annotation.processing.RoundEnvironment;
      import javax.annotation.processing.SupportedAnnotationTypes;
      import javax.lang.model.element.Element;
      import javax.lang.model.element.TypeElement;
      import javax.lang.model.element.VariableElement;
      import javax.lang.model.util.ElementFilter;

      @SupportedAnnotationTypes("*")
      public class TestAP extends AbstractProcessor {

          @Override
          public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
              for (Element root : roundEnv.getRootElements()) {
                  for (VariableElement field : ElementFilter.fieldsIn(root.getEnclosedElements())) {
                      System.err.println("" + field.getSimpleName() +
                                         "'s type: " + field.asType() +
                                         ", of kind: " + field.asType().getKind() +
                                         ", with underlying Element:" + processingEnv.getTypeUtils().asElement(field.asType()));
                  }
              }
              return false;
          }
          
      }
      ```

      Then running it leads to:
      ```
      $ javac -classpath ... -processor TestAP /tmp/C.java
      u1's type: Undefined, of kind: ERROR, with underlying Element:Undefined
      u2's type: <any>, of kind: ERROR, with underlying Element:<any>
      warning: No SupportedSourceVersion annotation found on TestAP, returning RELEASE_6.
      warning: Supported source version 'RELEASE_6' from annotation processor 'TestAP' less than -source '21'
      /tmp/C.java:2: error: cannot find symbol
          Undefined u1;
          ^
        symbol: class Undefined
        location: class C
      /tmp/C.java:3: error: cannot find symbol
          Undefined<UndefinedParam> u2;
          ^
        symbol: class Undefined
        location: class C
      /tmp/C.java:3: error: cannot find symbol
          Undefined<UndefinedParam> u2;
                    ^
        symbol: class UndefinedParam
        location: class C
      3 errors
      2 warnings
      ```

      Note that for the simple undefined type, the erroneous type has some potentially interesting information available, but there is no information available for the parameterized type - the type arguments are lost, as is any information related to the parameterized type itself. It would be good if more information about the type could be recovered.

      Attachments

        Issue Links

          Activity

            People

              jlahoda Jan Lahoda
              jlahoda Jan Lahoda
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: