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 <[email protected]> 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); }
