static BuilderRequiredProperties of(
      ImmutableSet<Property> allProperties, ImmutableSet<Property> requiredProperties) {
    boolean hasDefaults = allProperties.stream().anyMatch(Property::hasDefault);
    return hasDefaults
        ? new WithDefaults(allProperties, requiredProperties)
        : new NoDefaults(requiredProperties);
  }
The source representation of the value this field has when all required properties have been
given a value.
value/src/main/java/com/google/auto/value/processor/BuilderRequiredProperties.java