Copy annotations to the generated AutoBuilder subclass if requested.
Consistently with `@AutoValue.Builder`, now if your `@AutoBuilder` class has `@CopyAnnotations` then annotations will be copied from that class to its generated subclass.
RELNOTES=An `@AutoBuilder` class can now have `@AutoValue.CopyAnnotations` so annotations are copied from the class to its generated subclass.
PiperOrigin-RevId: 471049554
diff --git a/value/src/it/functional/src/test/java/com/google/auto/value/AutoBuilderTest.java b/value/src/it/functional/src/test/java/com/google/auto/value/AutoBuilderTest.java
index 0d87359..25d1d6d 100644
--- a/value/src/it/functional/src/test/java/com/google/auto/value/AutoBuilderTest.java
+++ b/value/src/it/functional/src/test/java/com/google/auto/value/AutoBuilderTest.java
@@ -25,6 +25,8 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.math.BigInteger;
import java.time.LocalTime;
import java.util.AbstractSet;
@@ -130,6 +132,7 @@
TRUTHY
}
+ @Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value();
@@ -713,4 +716,39 @@
NumberHolder<Integer> instance3 = numberHolderBuilder(instance2).setNumber(17).build();
assertThat(instance3.getNumber()).isEqualTo(17);
}
+
+ @AutoBuilder(callMethod = "of", ofClass = Simple.class)
+ @MyAnnotation("thing")
+ interface AnnotatedSimpleStaticBuilder1 {
+ AnnotatedSimpleStaticBuilder1 anInt(int x);
+
+ AnnotatedSimpleStaticBuilder1 aString(String x);
+
+ Simple build();
+ }
+
+ @Test
+ public void builderAnnotationsNotCopiedByDefault() {
+ assertThat(AutoBuilder_AutoBuilderTest_AnnotatedSimpleStaticBuilder1.class.getAnnotations())
+ .asList()
+ .isEmpty();
+ }
+
+ @AutoBuilder(callMethod = "of", ofClass = Simple.class)
+ @AutoValue.CopyAnnotations
+ @MyAnnotation("thing")
+ interface AnnotatedSimpleStaticBuilder2 {
+ AnnotatedSimpleStaticBuilder2 anInt(int x);
+
+ AnnotatedSimpleStaticBuilder2 aString(String x);
+
+ Simple build();
+ }
+
+ @Test
+ public void builderAnnotationsCopiedIfRequested() {
+ assertThat(AutoBuilder_AutoBuilderTest_AnnotatedSimpleStaticBuilder2.class.getAnnotations())
+ .asList()
+ .contains(myAnnotationBuilder().value("thing").build());
+ }
}
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 620d80d..4cc9a35 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
@@ -211,6 +211,7 @@
String generatedClassName = generatedClassName(autoBuilderType, "AutoBuilder_");
vars.builderName = TypeSimplifier.simpleNameOf(generatedClassName);
vars.builtType = TypeEncoder.encode(builtType);
+ vars.builderAnnotations = copiedClassAnnotations(autoBuilderType);
Optional<String> forwardingClassName = maybeForwardingClass(autoBuilderType, executable);
vars.build =
forwardingClassName