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

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

commit 9ddd37c824fb07bfc859c7dfe72ec0adfc65436e
Author: Eric Milles <[email protected]>
AuthorDate: Wed May 22 15:02:58 2024 -0500

    classgen: upper before outer
---
 .../classgen/asm/sc/StaticTypesCallSiteWriter.java | 28 ++++++++++++----------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
 
b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
index ee697dc828..ff5d635e87 100644
--- 
a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
+++ 
b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
@@ -23,7 +23,6 @@ import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.ast.FieldNode;
-import org.codehaus.groovy.ast.InnerClassNode;
 import org.codehaus.groovy.ast.MethodNode;
 import org.codehaus.groovy.ast.Parameter;
 import org.codehaus.groovy.ast.PropertyNode;
@@ -458,7 +457,7 @@ public class StaticTypesCallSiteWriter extends 
CallSiteWriter {
             getterName = "get" + capitalize(propertyName);
             getterNode = receiverType.getGetterMethod(getterName);
         }
-        if (getterNode != null && receiver instanceof ClassExpression && 
!isClassType(receiverType) && !getterNode.isStatic()) {
+        if (getterNode != null && !getterNode.isStatic() && receiver 
instanceof ClassExpression && !isClassType(receiverType)) {
             return false;
         }
 
@@ -486,22 +485,27 @@ public class StaticTypesCallSiteWriter extends 
CallSiteWriter {
             return true;
         }
 
-        if (receiverType instanceof InnerClassNode && 
!receiverType.isStaticClass()) {
-            if (makeGetPropertyWithGetter(receiver,  
receiverType.getOuterClass(), propertyName,  safe, implicitThis)) {
-                return true;
-            }
-        }
-
         // GROOVY-7149: check direct interfaces
-        for (ClassNode node : receiverType.getInterfaces()) {
-            if (makeGetPropertyWithGetter(receiver, node, propertyName, safe, 
implicitThis)) {
+        for (ClassNode traitClass : receiverType.getInterfaces()) {
+            if (makeGetPropertyWithGetter(receiver, traitClass, propertyName, 
safe, implicitThis)) {
                 return true;
             }
         }
-        // go upper level
+        // check super class
         ClassNode superClass = receiverType.getSuperClass();
         if (superClass != null) {
-            return makeGetPropertyWithGetter(receiver, superClass, 
propertyName, safe, implicitThis);
+            if (makeGetPropertyWithGetter(receiver, superClass, propertyName, 
safe, implicitThis)) {
+                return true;
+            }
+        }
+        // check outer class
+        ClassNode outerClass = receiverType.getOuterClass();
+        if (implicitThis && outerClass != null
+                && !outerClass.implementsInterface(MAP_TYPE)
+                && (receiverType.getModifiers() & ACC_STATIC) == 0) {
+            if (makeGetPropertyWithGetter(receiver, outerClass, propertyName, 
safe, implicitThis)) {
+                return true;
+            }
         }
 
         return false;

Reply via email to