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