private static ImmutableList<String> buildTestClass() {
    // Some older versions of javac don't handle type annotations at all well in annotation
    // processors. The `witness` method in the generated class is there to detect that, and
    // skip the test if it is the case.
    ImmutableList.Builder<String> builder = ImmutableList.builder();
    builder.add(
        "package pkg;",
        "",
        "import java.util.Set;",
        "",
        "public abstract class TestClass<T> {",
        "  abstract @Nullable T witness();");
    int i = 0;
    for (String typeSpelling : TYPE_SPELLINGS) {
      builder.add(String.format("  %s x%d;\n", typeSpelling, i++));
    }
    builder.add("}");
    return builder.build();
  }
The types that we will compile and then recreate. They are referenced in a context where {@code
Set} is unambiguous but not {@code List}, which allows us to test the placement of annotations
in unqualified types like {@code Set<T>} and qualified types like {@code java.util.List<T>}.
value/src/test/java/com/google/auto/value/processor/SimplifyWithAnnotationsTest.java