private ImmutableMap<String, String> propertyInitializers(
      TypeElement autoBuilderType, Executable executable) {
    boolean autoAnnotation =
        MoreElements.getAnnotationMirror(executable.executableElement(), AUTO_ANNOTATION_NAME)
            .isPresent();
    if (!autoAnnotation) {
      return ImmutableMap.of();
    }
    // We expect the return type of an @AutoAnnotation method to be an annotation type. If it isn't,
    // AutoAnnotation will presumably complain, so we don't need to complain further.
    TypeMirror returnType = executable.builtType();
    if (!returnType.getKind().equals(TypeKind.DECLARED)) {
      return ImmutableMap.of();
    }
    // This might not actually be an annotation (if the code is wrong), but if that's the case we
    // just won't see any contained ExecutableElement where getDefaultValue() returns something.
    TypeElement annotation = MoreTypes.asTypeElement(returnType);
    ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
    for (ExecutableElement method : methodsIn(annotation.getEnclosedElements())) {
      AnnotationValue defaultValue = method.getDefaultValue();
      if (defaultValue != null) {
        String memberName = method.getSimpleName().toString();
        builder.put(
            memberName,
            AnnotationOutput.sourceFormForInitializer(
                defaultValue, processingEnv, memberName, autoBuilderType));
      }
    }
    return builder.build();
  }
Generates a class that will call the synthetic Kotlin constructor that is used to specify which
optional parameters are defaulted. Because it is synthetic, it can't be called from Java source
code. Instead, Java source code calls the {@code of} method in the class we generate here.
value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java