docs: private ImmutableSet<DeclaredType> getValueFieldOfClasses(AnnotationMirror annotationMirror) {
      return getAnnotationValue(annotationMirror, "value")
          .accept(
              new SimpleAnnotationValueVisitor8<ImmutableSet<DeclaredType>, Void>() {
                @Override
                public ImmutableSet<DeclaredType> visitType(TypeMirror typeMirror, Void v) {
                  // TODO(ronshapiro): class literals may not always be declared types, i.e. int.class,
                  // int[].class
                  return ImmutableSet.of(MoreTypes.asDeclared(typeMirror));
                }
  
                @Override
                public ImmutableSet<DeclaredType> visitArray(
                    List<? extends AnnotationValue> values, Void v) {
                  return values
                      .stream()
                      .flatMap(value -> value.accept(this, null).stream())
                      .collect(toImmutableSet());
                }
              },
              null);
    }