From 782863a0f21e854dd05a4c5d77479d9f15d814fd Mon Sep 17 00:00:00 2001 From: Paul King Date: Tue, 26 May 2026 20:09:43 +1000 Subject: [PATCH] GROOVY-12040: restore @Builder retention to RUNTIME in 5.0.x --- .../java/groovy/transform/builder/Builder.java | 2 +- .../groovy/transform/BuilderTransformTest.groovy | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/groovy/transform/builder/Builder.java b/src/main/java/groovy/transform/builder/Builder.java index 9e8b3ff2b61..4561635350b 100644 --- a/src/main/java/groovy/transform/builder/Builder.java +++ b/src/main/java/groovy/transform/builder/Builder.java @@ -75,7 +75,7 @@ * @see groovy.transform.builder.InitializerStrategy */ @Documented -@Retention(RetentionPolicy.SOURCE) +@Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD}) @GroovyASTTransformationClass({ "groovy.transform.builder.BuilderASTStubber", diff --git a/src/test/groovy/org/codehaus/groovy/transform/BuilderTransformTest.groovy b/src/test/groovy/org/codehaus/groovy/transform/BuilderTransformTest.groovy index 75870242dcb..b9ae10e80a5 100644 --- a/src/test/groovy/org/codehaus/groovy/transform/BuilderTransformTest.groovy +++ b/src/test/groovy/org/codehaus/groovy/transform/BuilderTransformTest.groovy @@ -839,4 +839,19 @@ final class BuilderTransformTest { assert new Captain(Captain.createInitializer().first('Kathryn').last('Janeway')).toString() == 'Kathryn Janeway' ''' } + + @Test // GROOVY-12040 + void testBuilderAnnotationVisibleAtRuntime() { + assertScript shell, ''' + @Builder(builderStrategy=SimpleStrategy, prefix='') + class ConnectionSettings { + String host = 'localhost' + } + + Builder ann = ConnectionSettings.getAnnotation(Builder) + assert ann != null + assert ann.builderStrategy() == SimpleStrategy + assert ann.prefix() == '' + ''' + } }