Skip to content

Commit

Permalink
classgen: refactor isGroovyObject
Browse files Browse the repository at this point in the history
  • Loading branch information
eric-milles committed May 21, 2024
1 parent db34345 commit 461b871
Showing 1 changed file with 9 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1068,17 +1068,14 @@ private boolean checkStaticOuterField(final PropertyExpression pexp, final Strin
}

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
Expand Down Expand Up @@ -1128,8 +1125,9 @@ public void visitPropertyExpression(final PropertyExpression expression) {
}

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()) {
Expand Down Expand Up @@ -1169,9 +1167,11 @@ public void visitAttributeExpression(final AttributeExpression expression) {
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);
}
Expand Down

0 comments on commit 461b871

Please sign in to comment.