private ImmutableSet<Property> propertySet(
      Executable executable,
      Map<String, String> propertyToGetterName,
      ImmutableMap<String, String> builderInitializers,
      Nullables nullables) {
    // Fix any parameter names that are reserved words in Java. Java source code can't have
    // such parameter names, but Kotlin code might, for example.
    Map<VariableElement, String> identifiers =
        executable.parameters().stream().collect(toMap(v -> v, v -> v.getSimpleName().toString()));
    fixReservedIdentifiers(identifiers);
    return executable.parameters().stream()
        .map(
            v -> {
              String name = v.getSimpleName().toString();
              Property p =
                  newProperty(
                      v,
                      identifiers.get(v),
                      propertyToGetterName.get(name),
                      Optional.ofNullable(builderInitializers.get(name)),
                      executable.isOptional(name),
                      nullables);
              if (p.isNullable() && v.asType().getKind().isPrimitive()) {
                errorReporter()
                    .reportError(
                        v, "[AutoBuilderNullPrimitive] Primitive types cannot be @Nullable");
              }
              return p;
            })
        .collect(toImmutableSet());
  }
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