diff options
author | Éamonn McManus <emcmanus@google.com> | 2021-06-24 13:56:13 -0700 |
---|---|---|
committer | Google Java Core Libraries <java-libraries-firehose+copybara@google.com> | 2021-06-24 13:57:00 -0700 |
commit | 05ea13561169d5c6c0ea6711f1b7b3eb1492920d (patch) | |
tree | b227d4b2cef17d95e0e792c38ca469e080599284 /value/src/main/java/com | |
parent | e688dd708e2202e0ac8a00be49fca0b9bcf252df (diff) | |
download | auto-05ea13561169d5c6c0ea6711f1b7b3eb1492920d.tar.gz |
Ensure that AutoBuilder works with property builders.
Previously it worked, but only if the builder interface also had a setter for the property. Otherwise you would get an exception because the template referenced the `$toBuilderMethods` variable, which was undefined.
RELNOTES=Fixed a bug with AutoBuilder and property builder methods.
PiperOrigin-RevId: 381330964
Diffstat (limited to 'value/src/main/java/com')
3 files changed, 8 insertions, 4 deletions
diff --git a/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java b/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java index 7a700431..b6a578fc 100644 --- a/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java +++ b/value/src/main/java/com/google/auto/value/processor/AutoBuilderProcessor.java @@ -143,6 +143,7 @@ public class AutoBuilderProcessor extends AutoValueishProcessor { vars.build = build(executable); vars.types = typeUtils(); vars.toBuilderConstructor = false; + vars.toBuilderMethods = ImmutableList.of(); defineSharedVarsForType(autoBuilderType, ImmutableSet.of(), vars); String text = vars.toText(); text = TypeEncoder.decode(text, processingEnv, vars.pkg, autoBuilderType.asType()); diff --git a/value/src/main/java/com/google/auto/value/processor/AutoValueOrBuilderTemplateVars.java b/value/src/main/java/com/google/auto/value/processor/AutoValueOrBuilderTemplateVars.java index 83aab3ce..86cf4974 100644 --- a/value/src/main/java/com/google/auto/value/processor/AutoValueOrBuilderTemplateVars.java +++ b/value/src/main/java/com/google/auto/value/processor/AutoValueOrBuilderTemplateVars.java @@ -131,6 +131,13 @@ abstract class AutoValueOrBuilderTemplateVars extends AutoValueishTemplateVars { Boolean toBuilderConstructor; /** + * Any {@code toBuilder()} methods, that is methods that return the builder type. AutoBuilder does + * not currently support this, but it's included in these shared variables to simplify the + * template. + */ + ImmutableList<SimpleMethod> toBuilderMethods; + + /** * Whether to include identifiers in strings in the generated code. If false, exception messages * will not mention properties by name, and {@code toString()} will include neither property names * nor the name of the {@code @AutoValue} class. diff --git a/value/src/main/java/com/google/auto/value/processor/AutoValueTemplateVars.java b/value/src/main/java/com/google/auto/value/processor/AutoValueTemplateVars.java index d68466a4..e53b92e9 100644 --- a/value/src/main/java/com/google/auto/value/processor/AutoValueTemplateVars.java +++ b/value/src/main/java/com/google/auto/value/processor/AutoValueTemplateVars.java @@ -15,7 +15,6 @@ */ package com.google.auto.value.processor; -import com.google.common.collect.ImmutableList; import com.google.escapevelocity.Template; /** @@ -42,9 +41,6 @@ class AutoValueTemplateVars extends AutoValueOrBuilderTemplateVars { */ String modifiers; - /** Any {@code toBuilder()} methods, that is methods that return the builder type. */ - ImmutableList<SimpleMethod> toBuilderMethods; - private static final Template TEMPLATE = parsedTemplateForResource("autovalue.vm"); @Override |