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 '''
