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


The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
     new 1cf6837db0 GROOVY-11689: Grails reproducible build (fix @Delegate 
method ordering)
1cf6837db0 is described below

commit 1cf6837db0ee2c4bd1e607bbb5da2bc28496dfcf
Author: James Daugherty <[email protected]>
AuthorDate: Sun Jun 1 04:28:49 2025 -0400

    GROOVY-11689: Grails reproducible build (fix @Delegate method ordering)
---
 .../groovy/transform/DelegateASTTransformation.java        | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java 
b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
index 2c79b242e3..f04a19038b 100644
--- a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
@@ -21,6 +21,7 @@ package org.codehaus.groovy.transform;
 import groovy.lang.Delegate;
 import groovy.lang.Lazy;
 import groovy.lang.Reference;
+import org.apache.groovy.ast.tools.MethodNodeUtils;
 import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.ast.AnnotatedNode;
 import org.codehaus.groovy.ast.AnnotationNode;
@@ -40,6 +41,7 @@ import org.codehaus.groovy.control.SourceUnit;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.ListIterator;
@@ -165,7 +167,10 @@ public class DelegateASTTransformation extends 
AbstractASTTransformation {
             if (!checkPropertyOrMethodList(delegate.type, delegate.excludes, 
"excludes", node, MY_TYPE_NAME)) return;
             if (!checkPropertyOrMethodList(delegate.type, delegate.includes, 
"includes", node, MY_TYPE_NAME)) return;
 
-            final Iterable<MethodNode> ownerMethods = 
getAllMethods(delegate.owner);
+            final List<MethodNode> ownerMethods = 
getAllMethods(delegate.owner);
+            if (ownerMethods.size() > 1) {
+                
ownerMethods.sort(Comparator.comparing(MethodNodeUtils::methodDescriptorWithoutReturnType));
+            }
             final Iterable<MethodNode> delegateMethods = 
filterMethods(collectMethods(delegate.type), delegate, allNames, 
includeDeprecated);
 
             for (MethodNode mn : delegateMethods) {
@@ -215,7 +220,8 @@ public class DelegateASTTransformation extends 
AbstractASTTransformation {
     }
 
     private static Collection<MethodNode> collectMethods(final ClassNode type) 
{
-        List<MethodNode> methods = new 
java.util.LinkedList<>(getAllMethods(type));
+        List<MethodNode> methods = getAllMethods(type);
+
         // GROOVY-4320, GROOVY-4516
         for (ListIterator<MethodNode> it = methods.listIterator(); 
it.hasNext();) {
             MethodNode next = it.next();
@@ -250,6 +256,10 @@ public class DelegateASTTransformation extends 
AbstractASTTransformation {
             methods.addAll(face.getMethods());
         }
 
+        if (methods.size() > 1) {
+            
methods.sort(Comparator.comparing(MethodNodeUtils::methodDescriptorWithoutReturnType));
+        }
+
         return methods;
     }
 

Reply via email to