@Override
    public StringBuilder visitArray(ArrayType type, StringBuilder sb) {
      visit2(type.getComponentType(), sb);
      List<? extends AnnotationMirror> annotationMirrors = getTypeAnnotations.apply(type);
      if (!annotationMirrors.isEmpty()) {
        sb.append(" ");
        appendAnnotationsWithExclusions(annotationMirrors, sb);
      }
      return sb.append("[]");
    }
{@inheritDoc} The result respects the Java syntax, whereby {@code Foo @Bar []} is an
annotation on the array type itself, while {@code @Bar Foo[]} would be an annotation on the
component type.
value/src/main/java/com/google/auto/value/processor/TypeEncoder.java