Don't generate the toBuilder constructor in AutoValue builders unless there actually is a toBuilder method. Fixes https://github.com/google/auto/issues/437. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=148800259
diff --git a/value/src/it/functional/src/test/java/com/google/auto/value/AutoValueTest.java b/value/src/it/functional/src/test/java/com/google/auto/value/AutoValueTest.java index 5460ccf..333e6ec 100644 --- a/value/src/it/functional/src/test/java/com/google/auto/value/AutoValueTest.java +++ b/value/src/it/functional/src/test/java/com/google/auto/value/AutoValueTest.java
@@ -1252,6 +1252,15 @@ } } + @Test + public void testBasicWithBuilderHasOnlyOneConstructor() throws Exception { + Class<?> builderClass = AutoValue_AutoValueTest_BasicWithBuilder.Builder.class; + Constructor<?>[] constructors = builderClass.getDeclaredConstructors(); + assertThat(constructors).hasLength(1); + Constructor<?> constructor = constructors[0]; + assertThat(constructor.getParameterTypes()).isEmpty(); + } + @AutoValue public abstract static class EmptyWithBuilder { public static Builder builder() {
diff --git a/value/src/main/java/com/google/auto/value/processor/autovalue.vm b/value/src/main/java/com/google/auto/value/processor/autovalue.vm index 69a32c7..1a5ed34 100644 --- a/value/src/main/java/com/google/auto/value/processor/autovalue.vm +++ b/value/src/main/java/com/google/auto/value/processor/autovalue.vm
@@ -221,16 +221,20 @@ Builder() { } + #if (!$toBuilderMethods.empty) + private Builder(${origClass}${actualTypes} source) { - #foreach ($p in $props) + #foreach ($p in $props) this.$p = source.${p.getter}(); - #end + #end } + #end + #foreach ($p in $props) ## The following is either null or an instance of PropertyBuilderClassifier.PropertyBuilder