This is an automated email from the ASF dual-hosted git repository.

sunlan 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 ec5d81bc11 Trivial refactor: eliminate duplicated code
ec5d81bc11 is described below

commit ec5d81bc11b64ab6ed7832a8f676e3604ae06909
Author: Daniel Sun <sun...@apache.org>
AuthorDate: Sun Jun 1 02:25:12 2025 +0900

    Trivial refactor: eliminate duplicated code
    
    (cherry picked from commit f42b327929620d0e1e4f01f535c72ade57516246)
---
 .../transform/AbstractASTTransformation.java       | 62 +++++++++++-----------
 1 file changed, 31 insertions(+), 31 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java 
b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
index 3e56632cf7..b7c57072ea 100644
--- a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
@@ -279,57 +279,57 @@ public abstract class AbstractASTTransformation 
implements ASTTransformation, Er
     }
 
     public static boolean shouldSkipOnDescriptorUndefinedAware(boolean 
checkReturn, Map genericsSpec, MethodNode mNode,
-                                                  List<ClassNode> 
excludeTypes, List<ClassNode> includeTypes) {
+                                                               List<ClassNode> 
excludeTypes, List<ClassNode> includeTypes) {
         String descriptor = mNode.getTypeDescriptor();
         String descriptorNoReturn = 
MethodNodeUtils.methodDescriptorWithoutReturnType(mNode);
-        if (excludeTypes != null) {
-            for (ClassNode cn : excludeTypes) {
-                List<ClassNode> remaining = new LinkedList<>();
-                remaining.add(cn);
-                Map updatedGenericsSpec = new HashMap(genericsSpec);
-                while (!remaining.isEmpty()) {
-                    ClassNode next = remaining.remove(0);
-                    if (!isObjectType(next)) {
-                        updatedGenericsSpec = 
GenericsUtils.createGenericsSpec(next, updatedGenericsSpec);
-                        for (MethodNode mn : next.getMethods()) {
-                            MethodNode correctedMethodNode = 
GenericsUtils.correctToGenericsSpec(updatedGenericsSpec, mn);
-                            if (checkReturn) {
-                                String md = 
correctedMethodNode.getTypeDescriptor();
-                                if (md.equals(descriptor)) return true;
-                            } else {
-                                String md = 
MethodNodeUtils.methodDescriptorWithoutReturnType(correctedMethodNode);
-                                if (md.equals(descriptorNoReturn)) return true;
-                            }
-                        }
-                        remaining.addAll(Arrays.asList(next.getInterfaces()));
-                    }
-                }
-            }
+
+        // Check excludes first - if any match is found, we should skip
+        if (excludeTypes != null && hasMatchingMethodDescriptor(checkReturn, 
genericsSpec, descriptor, descriptorNoReturn, excludeTypes)) {
+            return true;
         }
-        if (includeTypes == null) return false;
-        for (ClassNode cn : includeTypes) {
+
+        // Then check includes - if any defined but none match, we should skip
+        if (includeTypes != null && !hasMatchingMethodDescriptor(checkReturn, 
genericsSpec, descriptor, descriptorNoReturn, includeTypes)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    private static boolean hasMatchingMethodDescriptor(boolean checkReturn, 
Map genericsSpec, String descriptor,
+                                                       String 
descriptorNoReturn, List<ClassNode> types) {
+        for (ClassNode cn : types) {
             List<ClassNode> remaining = new LinkedList<>();
             remaining.add(cn);
             Map updatedGenericsSpec = new HashMap(genericsSpec);
+
             while (!remaining.isEmpty()) {
                 ClassNode next = remaining.remove(0);
                 if (!isObjectType(next)) {
                     updatedGenericsSpec = 
GenericsUtils.createGenericsSpec(next, updatedGenericsSpec);
                     for (MethodNode mn : next.getMethods()) {
                         MethodNode correctedMethodNode = 
GenericsUtils.correctToGenericsSpec(updatedGenericsSpec, mn);
+                        String md;
+                        String compareTo;
+
                         if (checkReturn) {
-                            String md = 
correctedMethodNode.getTypeDescriptor();
-                            if (md.equals(descriptor)) return false;
+                            md = correctedMethodNode.getTypeDescriptor();
+                            compareTo = descriptor;
                         } else {
-                            String md = 
MethodNodeUtils.methodDescriptorWithoutReturnType(correctedMethodNode);
-                            if (md.equals(descriptorNoReturn)) return false;
+                            md = 
MethodNodeUtils.methodDescriptorWithoutReturnType(correctedMethodNode);
+                            compareTo = descriptorNoReturn;
+                        }
+
+                        if (md.equals(compareTo)) {
+                            return true; // Found a match
                         }
                     }
                     remaining.addAll(Arrays.asList(next.getInterfaces()));
                 }
             }
         }
-        return true;
+
+        return false; // No match found
     }
 
     protected boolean checkIncludeExcludeUndefinedAware(AnnotationNode node, 
List<String> excludes, List<String> includes, String typeName) {

Reply via email to