This is an automated email from the ASF dual-hosted git repository. emilles pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/groovy.git
commit f5666584e120e2cc5e0289bd28ab594632604d09 Author: Eric Milles <[email protected]> AuthorDate: Tue Feb 24 11:39:26 2026 -0600 `VariableScopeVisitor#findClassMember`: collect traits in reverse order --- .../codehaus/groovy/classgen/VariableScopeVisitor.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java index 4a9307a4db..820a6499a6 100644 --- a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java +++ b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java @@ -73,10 +73,10 @@ import java.util.function.Consumer; import java.util.function.Supplier; import static java.lang.reflect.Modifier.isStatic; -import static java.util.Collections.addAll; import static org.apache.groovy.ast.tools.MethodNodeUtils.getPropertyName; import static org.apache.groovy.ast.tools.MethodNodeUtils.withDefaultArgumentMethods; import static org.codehaus.groovy.ast.tools.GeneralUtils.getAllProperties; +import static org.codehaus.groovy.transform.trait.Traits.isTrait; /** * Initializes the variable scopes for an AST. @@ -197,6 +197,14 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport { private Variable findClassMember(final ClassNode node, final String name) { final boolean abstractType = node.isAbstract(); Deque<ClassNode> interfaces = new LinkedList<>(); + Consumer<ClassNode[]> interfacesAndTraits = (next) -> { + for (int i = 0; i < next.length; i += 1) { + if (!isTrait(next[i])) interfaces.add(next[i]); + } + for (int i = next.length - 1; i >= 0; i -= 1) { + if ( isTrait(next[i])) interfaces.add(next[i]); + } + }; for (ClassNode cn = node; cn != null && !ClassHelper.isObjectType(cn); cn = cn.getSuperClass()) { for (FieldNode fn : cn.getFields()) { @@ -232,7 +240,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport { } } - addAll(interfaces, cn.getInterfaces()); + interfacesAndTraits.accept(cn.getInterfaces()); } Set<ClassNode> done = new HashSet<>(); @@ -240,7 +248,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport { ClassNode i = interfaces.remove(); if (done.add(i)) { FieldNode fn = i.getDeclaredField(name); - if (fn != null) { + if (fn != null && !isTrait(i)) { return fn; } PropertyNode pn = i.getProperty(name); @@ -248,7 +256,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport { return pn; } - addAll(interfaces, i.getInterfaces()); + interfacesAndTraits.accept(i.getInterfaces()); } }
