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:00 UTC

(groovy) 01/02: classgen: refactor `isGroovyObject`

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 b2af1c63a14bc4a1eb5aa6ec53c0dcb855464edd
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed May 22 15:02:53 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 965c09df6f..cfca2f9b93 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -1177,17 +1177,14 @@ public class AsmClassGenerator extends ClassGenerator {
     }
 
     private boolean isGroovyObject(final Expression objectExpression) {
-        if (isThisOrSuper(objectExpression)) return true; //GROOVY-8693
         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
@@ -1233,8 +1230,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()) {
@@ -1274,9 +1272,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);
         }