This is an automated email from the ASF dual-hosted git repository. paulk pushed a commit to branch GROOVY_4_0_X in repository https://gitbox.apache.org/repos/asf/groovy.git
commit cab5a66af365970eb6e0472dd48eca384dd98b9b Author: Paul King <[email protected]> AuthorDate: Thu Jul 17 23:16:53 2025 +1000 GROOVY-11715: Grails reproducible build part 3: @DelegatesTo ordering --- .../java/org/codehaus/groovy/classgen/AsmClassGenerator.java | 10 ++++++---- .../codehaus/groovy/classgen/asm/TypeAnnotationsTest.groovy | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java index 8cff784bdc..5aea4908e2 100644 --- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java +++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java @@ -130,6 +130,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.TreeMap; import java.util.function.Consumer; import static org.apache.groovy.ast.tools.ClassNodeUtils.getField; @@ -2162,10 +2163,11 @@ public class AsmClassGenerator extends ClassGenerator { * @param av the visitor to use */ private void visitAnnotationAttributes(final AnnotationNode an, final AnnotationVisitor av) { - Map<String, Object> constantAttrs = new HashMap<>(); - Map<String, PropertyExpression> enumAttrs = new HashMap<>(); - Map<String, Object> atAttrs = new HashMap<>(); - Map<String, ListExpression> arrayAttrs = new HashMap<>(); + // GROOVY-11715 TODO If we can determine what was causing the issues mentioned on that ticket, we should change these back to LinkedHashMap + Map<String, Object> constantAttrs = new TreeMap<>(); + Map<String, PropertyExpression> enumAttrs = new TreeMap<>(); + Map<String, Object> atAttrs = new TreeMap<>(); + Map<String, ListExpression> arrayAttrs = new TreeMap<>(); for (Map.Entry<String, Expression> member : an.getMembers().entrySet()) { String name = member.getKey(); diff --git a/src/test/groovy/org/codehaus/groovy/classgen/asm/TypeAnnotationsTest.groovy b/src/test/groovy/org/codehaus/groovy/classgen/asm/TypeAnnotationsTest.groovy index aada167cc5..d48ebc7eb4 100644 --- a/src/test/groovy/org/codehaus/groovy/classgen/asm/TypeAnnotationsTest.groovy +++ b/src/test/groovy/org/codehaus/groovy/classgen/asm/TypeAnnotationsTest.groovy @@ -199,7 +199,7 @@ final class TypeAnnotationsTest extends AbstractBytecodeTestCase { assert bytecode.hasSequence([ 'public sizeZeroOrPositive(Ljava/util/List;)Z', '@Lnet/jqwik/api/Property;()', - '@Lnet/jqwik/api/constraints/IntRange;(min=0, max=10) : METHOD_FORMAL_PARAMETER 0, 0;', + '@Lnet/jqwik/api/constraints/IntRange;(max=10, min=0) : METHOD_FORMAL_PARAMETER 0, 0;', '// annotable parameter count: 1 (visible)', '@Lnet/jqwik/api/ForAll;() // parameter 0' ])
