void appendTypeArguments(DeclaredType type, StringBuilder sb) {
      List<? extends TypeMirror> arguments = type.getTypeArguments();
      if (!arguments.isEmpty()) {
        sb.append("<");
        String sep = "";
        for (TypeMirror argument : arguments) {
          sb.append(sep);
          sep = ", ";
          visit2(argument, sb);
        }
        sb.append(">");
      }
    }
Equivalent to {@code visit(type, sb)} or {@code type.accept(sb)}, except that it fixes a bug
with javac versions up to JDK 8, whereby if the type is a {@code DeclaredType} then the
visitor is called with a version of the type where any annotations have been lost. We can't
override {@code visit} because it is final.
value/src/main/java/com/google/auto/value/processor/TypeEncoder.java