You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2024/05/22 20:02:01 UTC
(groovy) 02/02: classgen: upper before outer
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 <er...@thomsonreuters.com>
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;