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

Annotation processing leads to types being incompatible with it self

XMLWordPrintable

    • generic
    • generic

      ==> A.java <==
      package test;

      /**
       * @author brandon-enochs
       */
      public class A {

              @X
              public void foo() {
              }

      }

      ==> XAnnotationProcessor.java <==
      import java.util.Set;

      import javax.annotation.processing.AbstractProcessor;
      import javax.annotation.processing.RoundEnvironment;
      import javax.annotation.processing.SupportedAnnotationTypes;
      import javax.annotation.processing.SupportedOptions;
      import javax.annotation.processing.SupportedSourceVersion;
      import javax.lang.model.SourceVersion;
      import javax.lang.model.element.TypeElement;

      /**
       * @author brandon-enochs
       */
      @SupportedAnnotationTypes("*")
      @SupportedOptions({})
      @SupportedSourceVersion(SourceVersion.RELEASE_6)
      public class XAnnotationProcessor extends AbstractProcessor {

      // ------------------------ INTERFACE METHODS ------------------------

      // --------------------- Interface Processor ---------------------

              public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
                      return false;
              }



      }

      ==> X.java <==
      package test;

      /**
       * @author brandon-enochs
       */
      public @interface X {

              Y y() default Y.A;

              String a() default Z.BAR;

      }

      ==> Y.java <==
      package test;

      /**
       * @author brandon-enochs
       */
      public enum Y {

              A,
              B,
              C

      }

      ==> Z.java <==
      package test;

      /**
       * @author brandon-enochs
       */
      public class Z {

              public static final String BAR = "Bar";

      }
      $ javac XAnnotationProcessor.java
      $ javac -processor XAnnotationProcessor A.java X.java Y.java Z.java
      X.java:8: incompatible types
      found : test.Y
      required: test.Y
              Y y() default Y.A;
                             ^
      X.java:10: incompatible types
      found : java.lang.String
      required: java.lang.String
              String a() default Z.BAR;
                                  ^
      2 errors
      $ javac A.java X.java Y.java Z.java
      $

            darcy Joe Darcy
            ahe Peter Ahe
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: