@Override
    public @Nullable Void visitDouble(double d, StringBuilder sb) {
      if (Double.isNaN(d)) {
        sb.append("Double.NaN");
      } else if (d == Double.POSITIVE_INFINITY) {
        sb.append("Double.POSITIVE_INFINITY");
      } else if (d == Double.NEGATIVE_INFINITY) {
        sb.append("Double.NEGATIVE_INFINITY");
      } else {
        sb.append(d);
      }
      return null;
    }
Visitor that produces a string representation of an annotation value, suitable for inclusion in
a Java source file as an annotation member or as the initializer of a variable of the
appropriate type. The syntax for the two is the same except for annotation members that are
themselves annotations. Within an annotation, an annotation member can be written as
{@code @NestedAnnotation(...)}, while in an initializer it must be written as an object, for
example the construction of an {@code @AutoAnnotation} class. That's why we have this abstract
class and two concrete subclasses.
common/src/main/java/com/google/auto/common/AnnotationOutput.java