javax.annotation.processing.SupportedAnnotationTypes Java Examples

The following examples show how to use javax.annotation.processing.SupportedAnnotationTypes. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: AutoValueCompilationTest.java    From auto with Apache License 2.0 4 votes vote down vote up
@Test
public void testTypeParametersWithAnnotationsOnBounds() {
  @SupportedAnnotationTypes("*")
  class CompilerBugProcessor extends AbstractProcessor {
    boolean checkedAnnotationsOnTypeBounds;
    boolean reportsAnnotationsOnTypeBounds;

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

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
      if (roundEnv.processingOver()) {
        TypeElement test = processingEnv.getElementUtils().getTypeElement("com.example.Test");
        TypeParameterElement t = test.getTypeParameters().get(0);
        this.checkedAnnotationsOnTypeBounds = true;
        this.reportsAnnotationsOnTypeBounds =
            !t.getBounds().get(0).getAnnotationMirrors().isEmpty();
      }
      return false;
    }
  }
  CompilerBugProcessor compilerBugProcessor = new CompilerBugProcessor();
  JavaFileObject nullableTypeFileObject =
      JavaFileObjects.forSourceLines(
          "foo.bar.NullableType",
          "package foo.bar;",
          "",
          "import java.lang.annotation.ElementType;",
          "import java.lang.annotation.Target;",
          "",
          "@Target(ElementType.TYPE_USE)",
          "public @interface NullableType {}");
  JavaFileObject autoValueFileObject =
      JavaFileObjects.forSourceLines(
          "com.example.Test",
          "package com.example;",
          "",
          "import com.google.auto.value.AutoValue;",
          "import foo.bar.NullableType;",
          "",
          "@AutoValue",
          "abstract class Test<T extends @NullableType Object & @NullableType Cloneable> {}");
  Compilation compilation =
      javac()
          .withProcessors(new AutoValueProcessor(), compilerBugProcessor)
          .withOptions("-Xlint:-processing", "-implicit:none")
          .compile(nullableTypeFileObject, autoValueFileObject);
  assertThat(compilation).succeededWithoutWarnings();
  assertThat(compilerBugProcessor.checkedAnnotationsOnTypeBounds).isTrue();
  if (compilerBugProcessor.reportsAnnotationsOnTypeBounds) {
    assertThat(compilation)
        .generatedSourceFile("com.example.AutoValue_Test")
        .contentsAsUtf8String()
        .contains(
            "class AutoValue_Test<T extends @NullableType Object & @NullableType Cloneable>"
                + " extends Test<T> {");
  }
}