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);
}