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

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

commit 91b22b877e1ec9864d06089f56290484871e4604
Author: Eric Milles <[email protected]>
AuthorDate: Mon Jan 18 11:14:05 2021 -0600

    GROOVY-9893: STC: `findSetters` must look in super types
---
 .../transform/stc/StaticTypeCheckingSupport.java   | 29 ++++++++++------------
 .../sc/FieldsAndPropertiesStaticCompileTest.groovy | 11 --------
 2 files changed, 13 insertions(+), 27 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index f1428f3aea..a9d1182547 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -2329,29 +2329,26 @@ public abstract class StaticTypeCheckingSupport {
                 && !genericsTypes[0].isWildcard();
     }
 
-    public static List<MethodNode> findSetters(ClassNode cn, String 
setterName, boolean voidOnly) {
-        List<MethodNode> result = null;
-        for (MethodNode method : cn.getDeclaredMethods(setterName)) {
-            if (setterName.equals(method.getName())
-                    && (!voidOnly || VOID_TYPE == method.getReturnType())
-                    && method.getParameters().length == 1) {
-                if (result == null) {
-                    result = new LinkedList<MethodNode>();
-                }
-                result.add(method);
+    public static List<MethodNode> findSetters(final ClassNode cn, final 
String setterName, final boolean voidOnly) {
+        List<MethodNode> result = new ArrayList<MethodNode>();
+        if (!cn.isInterface()) {
+            for (MethodNode method : cn.getMethods(setterName)) {
+                if (isSetter(method, voidOnly)) result.add(method);
             }
         }
-        if (result == null) {
-            ClassNode parent = cn.getSuperClass();
-            if (parent != null) {
-                return findSetters(parent, setterName, voidOnly);
+        for (ClassNode in : cn.getAllInterfaces()) {
+            for (MethodNode method : in.getDeclaredMethods(setterName)) {
+                if (isSetter(method, voidOnly)) result.add(method);
             }
-            return Collections.emptyList();
         }
         return result;
     }
 
-    public static ClassNode isTraitSelf(VariableExpression vexp) {
+    private static boolean isSetter(final MethodNode mn, final boolean 
voidOnly) {
+        return (!voidOnly || mn.isVoidMethod()) && mn.getParameters().length 
== 1;
+    }
+
+    public static ClassNode isTraitSelf(final VariableExpression vexp) {
         if (Traits.THIS_OBJECT.equals(vexp.getName())) {
             Variable accessedVariable = vexp.getAccessedVariable();
             ClassNode type = accessedVariable != null ? 
accessedVariable.getType() : null;
diff --git 
a/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
 
b/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
index 1fc5c60ed3..afef3d75e4 100644
--- 
a/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
+++ 
b/src/test/org/codehaus/groovy/classgen/asm/sc/FieldsAndPropertiesStaticCompileTest.groovy
@@ -18,7 +18,6 @@
  */
 package org.codehaus.groovy.classgen.asm.sc
 
-import groovy.transform.NotYetImplemented
 import groovy.transform.stc.FieldsAndPropertiesSTCTest
 
 final class FieldsAndPropertiesStaticCompileTest extends 
FieldsAndPropertiesSTCTest implements StaticCompilationTestSupport {
@@ -42,16 +41,6 @@ final class FieldsAndPropertiesStaticCompileTest extends 
FieldsAndPropertiesSTCT
         '''
     }
 
-    @NotYetImplemented
-    void testPropertyWithMultipleSetters2() {
-        super.testPropertyWithMultipleSetters2()
-    }
-
-    @NotYetImplemented
-    void testPropertyWithMultipleSetters3() {
-        super.testPropertyWithMultipleSetters3()
-    }
-
     // GROOVY-5561
     void testShouldNotThrowAccessForbidden() {
         assertScript '''

Reply via email to