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

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


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new 461b871b80 classgen: refactor `isGroovyObject`
461b871b80 is described below

commit 461b871b8081d01ddc69540202a47b5b7e266f6d
Author: Eric Milles <[email protected]>
AuthorDate: Tue May 21 17:35:36 2024 -0500

    classgen: refactor `isGroovyObject`
---
 .../codehaus/groovy/classgen/AsmClassGenerator.java    | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java 
b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index dbf7debf73..033269ab63 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -1068,17 +1068,14 @@ public class AsmClassGenerator extends ClassGenerator {
     }
 
     private boolean isGroovyObject(final Expression objectExpression) {
-        if (ExpressionUtils.isThisExpression(objectExpression)) return true;
         if (objectExpression instanceof ClassExpression) return false;
-
         // GROOVY-9195, GROOVY-9288: uniform treatment for "foo.bar" and 
"foo.with { bar }" using TypeChooser (not getType())
         ClassNode objectExpressionType = 
controller.getTypeChooser().resolveType(objectExpression, 
controller.getClassNode());
-        return implementsGroovyObject(objectExpressionType) // GROOVY-10540
-            && !isOrImplements(objectExpressionType, ClassHelper.MAP_TYPE); // 
GROOVY-5517, GROOVY-8074
+        return implementsGroovyObject(objectExpressionType) && 
!isOrImplements(objectExpressionType, ClassHelper.MAP_TYPE); // GROOVY-5517, 
GROOVY-8074
     }
 
     private static boolean implementsGroovyObject(final ClassNode cn) {
-        return cn.isDerivedFromGroovyObject() || (cn.getCompileUnit() != null 
&& !cn.isInterface());
+        return cn.isDerivedFromGroovyObject() || (cn.getCompileUnit() != null 
&& !cn.isInterface()); // GROOVY-10540
     }
 
     @Override
@@ -1128,8 +1125,9 @@ public class AsmClassGenerator extends ClassGenerator {
         }
 
         if (!visited) {
-            boolean useMetaObjectProtocol = isGroovyObject(objectExpression)
-                    && (!isThisOrSuper(objectExpression) || 
!controller.isStaticContext() || controller.isInGeneratedFunction());
+            boolean isThis = ExpressionUtils.isThisExpression(objectExpression)
+                    && !(expression.isImplicitThis() && 
controller.isInGeneratedFunction());
+            boolean useMetaObjectProtocol = isThis ? 
!controller.isStaticContext() : isGroovyObject(objectExpression);
 
             MethodCallerMultiAdapter adapter;
             if (controller.getCompileStack().isLHS()) {
@@ -1169,9 +1167,11 @@ public class AsmClassGenerator extends ClassGenerator {
         if (!visited) {
             MethodCallerMultiAdapter adapter;
             if (controller.getCompileStack().isLHS()) {
-                adapter = ExpressionUtils.isSuperExpression(objectExpression) 
? setFieldOnSuper : isGroovyObject(objectExpression) ? setGroovyObjectField : 
setField;
+                adapter = ExpressionUtils.isSuperExpression(objectExpression) 
? setFieldOnSuper
+                        : (ExpressionUtils.isThisExpression(objectExpression) 
|| isGroovyObject(objectExpression)) ? setGroovyObjectField : setField;
             } else {
-                adapter = ExpressionUtils.isSuperExpression(objectExpression) 
? getFieldOnSuper : isGroovyObject(objectExpression) ? getGroovyObjectField : 
getField;
+                adapter = ExpressionUtils.isSuperExpression(objectExpression) 
? getFieldOnSuper
+                        : (ExpressionUtils.isThisExpression(objectExpression) 
|| isGroovyObject(objectExpression)) ? getGroovyObjectField : getField;
             }
             visitAttributeOrProperty(expression, adapter);
         }

Reply via email to