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

emilles pushed a commit to branch GROOVY-9634
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit ee3737a79ce4a36eb8cabedb2cbf0ec9ecab90fb
Author: Eric Milles <[email protected]>
AuthorDate: Thu Jul 9 13:57:26 2020 -0500

    GROOVY-9634: use getDeclaredMethods(String), not getMethods(String)
---
 .../java/org/codehaus/groovy/ast/ClassNode.java    | 56 ++++++++++------------
 1 file changed, 24 insertions(+), 32 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/ClassNode.java 
b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
index f6bf3e3..9eaf47c 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
@@ -1241,71 +1241,65 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
     }
 
     /**
-     * Returns true if the given method has a possibly matching instance 
method with the given name and arguments.
+     * Determines if the type has a possibly-matching instance method with the 
given name and arguments.
      *
      * @param name      the name of the method of interest
      * @param arguments the arguments to match against
      * @return true if a matching method was found
      */
-    public boolean hasPossibleMethod(String name, Expression arguments) {
-        int count = 0;
-
+    public boolean hasPossibleMethod(final String name, final Expression 
arguments) {
+        int count;
         if (arguments instanceof TupleExpression) {
-            TupleExpression tuple = (TupleExpression) arguments;
-            // TODO this won't strictly be true when using list expansion in 
argument calls
-            count = tuple.getExpressions().size();
+            // TODO: this won't strictly be true when using list expansion in 
argument calls
+            count = ((TupleExpression) arguments).getExpressions().size();
+        } else {
+            count = 0;
         }
-        ClassNode node = this;
-        do {
-            for (MethodNode method : getMethods(name)) {
-                if (hasCompatibleNumberOfArgs(method, count) && 
!method.isStatic()) {
+
+        for (ClassNode cn = this; cn != null; cn = cn.getSuperClass()) {
+            for (MethodNode mn : getDeclaredMethods(name)) {
+                if (!mn.isStatic() && hasCompatibleNumberOfArgs(mn, count)) {
                     return true;
                 }
             }
-            node = node.getSuperClass();
         }
-        while (node != null);
 
         return false;
     }
 
-    public MethodNode tryFindPossibleMethod(String name, Expression arguments) 
{
-        int count = 0;
-
-        if (arguments instanceof TupleExpression) {
-            TupleExpression tuple = (TupleExpression) arguments;
-            // TODO this won't strictly be true when using list expansion in 
argument calls
-            count = tuple.getExpressions().size();
-        } else {
+    public MethodNode tryFindPossibleMethod(final String name, final 
Expression arguments) {
+        if (!(arguments instanceof TupleExpression)) {
             return null;
         }
 
-        MethodNode res = null;
-        ClassNode node = this;
+        // TODO: this won't strictly be true when using list expansion in 
argument calls
         TupleExpression args = (TupleExpression) arguments;
-        do {
-            for (MethodNode method : node.getMethods(name)) {
-                if (hasCompatibleNumberOfArgs(method, count)) {
+        int count = args.getExpressions().size();
+        MethodNode res = null;
+
+        for (ClassNode cn = this; cn != null; cn = cn.getSuperClass()) {
+            for (MethodNode mn : cn.getDeclaredMethods(name)) {
+                if (hasCompatibleNumberOfArgs(mn, count)) {
                     boolean match = true;
                     for (int i = 0; i < count; i += 1) {
-                        if (!hasCompatibleType(args, method, i)) {
+                        if (!hasCompatibleType(args, mn, i)) {
                             match = false;
                             break;
                         }
                     }
                     if (match) {
                         if (res == null) {
-                            res = method;
+                            res = mn;
                         } else {
                             if (res.getParameters().length != count)
                                 return null;
-                            if (node.equals(this))
+                            if (cn.equals(this))
                                 return null;
 
                             match = true;
                             for (int i = 0; i < count; i += 1) {
                                 // prefer super method if it matches better
-                                if (!hasExactMatchingCompatibleType(res, 
method, i)) {
+                                if (!hasExactMatchingCompatibleType(res, mn, 
i)) {
                                     match = false;
                                     break;
                                 }
@@ -1317,9 +1311,7 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
                     }
                 }
             }
-            node = node.getSuperClass();
         }
-        while (node != null);
 
         return res;
     }

Reply via email to