From d6bec5440c359e0ade5c158caa844f93effd8592 Mon Sep 17 00:00:00 2001 From: James Daugherty Date: Mon, 30 Dec 2024 09:29:37 -0500 Subject: [PATCH] fix #13945 - use local variable instead of casting the object --- .../web/ControllerActionTransformer.java | 65 +++---------------- .../commandobjects/CommandObjectsSpec.groovy | 2 - 2 files changed, 8 insertions(+), 59 deletions(-) diff --git a/grails-plugin-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java b/grails-plugin-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java index 5db087175ff..39860670271 100644 --- a/grails-plugin-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java +++ b/grails-plugin-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java @@ -30,44 +30,9 @@ import groovy.lang.Closure; import groovy.transform.CompilationUnitAware; import org.apache.groovy.ast.tools.ClassNodeUtils; -import org.codehaus.groovy.ast.ASTNode; -import org.codehaus.groovy.ast.AnnotationNode; -import org.codehaus.groovy.ast.ClassHelper; -import org.codehaus.groovy.ast.ClassNode; -import org.codehaus.groovy.ast.ConstructorNode; -import org.codehaus.groovy.ast.FieldNode; -import org.codehaus.groovy.ast.MethodNode; -import org.codehaus.groovy.ast.ModuleNode; -import org.codehaus.groovy.ast.Parameter; -import org.codehaus.groovy.ast.PropertyNode; -import org.codehaus.groovy.ast.expr.ArgumentListExpression; -import org.codehaus.groovy.ast.expr.BinaryExpression; -import org.codehaus.groovy.ast.expr.BooleanExpression; -import org.codehaus.groovy.ast.expr.ClassExpression; -import org.codehaus.groovy.ast.expr.ClosureExpression; -import org.codehaus.groovy.ast.expr.ConstantExpression; -import org.codehaus.groovy.ast.expr.ConstructorCallExpression; -import org.codehaus.groovy.ast.expr.DeclarationExpression; -import org.codehaus.groovy.ast.expr.EmptyExpression; -import org.codehaus.groovy.ast.expr.Expression; -import org.codehaus.groovy.ast.expr.ListExpression; -import org.codehaus.groovy.ast.expr.MapEntryExpression; -import org.codehaus.groovy.ast.expr.MapExpression; -import org.codehaus.groovy.ast.expr.MethodCallExpression; -import org.codehaus.groovy.ast.expr.PropertyExpression; -import org.codehaus.groovy.ast.expr.StaticMethodCallExpression; -import org.codehaus.groovy.ast.expr.TernaryExpression; -import org.codehaus.groovy.ast.expr.TupleExpression; -import org.codehaus.groovy.ast.expr.VariableExpression; -import org.codehaus.groovy.ast.stmt.BlockStatement; -import org.codehaus.groovy.ast.stmt.CatchStatement; -import org.codehaus.groovy.ast.stmt.EmptyStatement; -import org.codehaus.groovy.ast.stmt.ExpressionStatement; -import org.codehaus.groovy.ast.stmt.IfStatement; -import org.codehaus.groovy.ast.stmt.ReturnStatement; -import org.codehaus.groovy.ast.stmt.Statement; -import org.codehaus.groovy.ast.stmt.ThrowStatement; -import org.codehaus.groovy.ast.stmt.TryCatchStatement; +import org.codehaus.groovy.ast.*; +import org.codehaus.groovy.ast.expr.*; +import org.codehaus.groovy.ast.stmt.*; import org.codehaus.groovy.classgen.GeneratorContext; import org.codehaus.groovy.control.CompilationUnit; import org.codehaus.groovy.control.SourceUnit; @@ -90,23 +55,11 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Pattern; import static org.codehaus.groovy.ast.tools.GeneralUtils.*; -import static org.grails.compiler.injection.GrailsASTUtils.applyDefaultMethodTarget; -import static org.grails.compiler.injection.GrailsASTUtils.applyMethodTarget; -import static org.grails.compiler.injection.GrailsASTUtils.buildGetMapExpression; -import static org.grails.compiler.injection.GrailsASTUtils.buildGetPropertyExpression; -import static org.grails.compiler.injection.GrailsASTUtils.buildSetPropertyExpression; -import static org.grails.compiler.injection.GrailsASTUtils.hasAnnotation; -import static org.grails.compiler.injection.GrailsASTUtils.hasParameters; -import static org.grails.compiler.injection.GrailsASTUtils.isInheritedFromTrait; -import static org.grails.compiler.injection.GrailsASTUtils.removeAnnotation; +import static org.grails.compiler.injection.GrailsASTUtils.*; /** * Enhances controller classes by converting closures actions to method actions and binding @@ -798,14 +751,12 @@ protected void initializeAndValidateCommandObjectParameter(final BlockStatement } if (argumentIsValidateable) { - final MethodCallExpression validateMethodCallExpression = - new MethodCallExpression(new VariableExpression(paramName), "validate", EMPTY_TUPLE); - final MethodNode validateMethod = - commandObjectNode.getMethod("validate", new Parameter[0]); + final MethodCallExpression validateMethodCallExpression = callX(localVarX(paramName, commandObjectNode), "validate"); + final MethodNode validateMethod = commandObjectNode.getMethod("validate", new Parameter[0]); if (validateMethod != null) { validateMethodCallExpression.setMethodTarget(validateMethod); } - final Statement ifCommandObjectIsNotNullThenValidate = new IfStatement(new BooleanExpression(new VariableExpression(paramName)), new ExpressionStatement(validateMethodCallExpression), new ExpressionStatement(new EmptyExpression())); + final Statement ifCommandObjectIsNotNullThenValidate = ifS(boolX(varX(paramName)), stmt(validateMethodCallExpression)); wrapper.addStatement(ifCommandObjectIsNotNullThenValidate); } else { // try to dynamically invoke the .validate() method if it is available at runtime... diff --git a/grails-test-suite-web/src/test/groovy/org/grails/web/commandobjects/CommandObjectsSpec.groovy b/grails-test-suite-web/src/test/groovy/org/grails/web/commandobjects/CommandObjectsSpec.groovy index 3a108eae2dd..9975e6367c2 100644 --- a/grails-test-suite-web/src/test/groovy/org/grails/web/commandobjects/CommandObjectsSpec.groovy +++ b/grails-test-suite-web/src/test/groovy/org/grails/web/commandobjects/CommandObjectsSpec.groovy @@ -5,7 +5,6 @@ import grails.testing.gorm.DataTest import grails.testing.web.controllers.ControllerUnitTest import grails.validation.Validateable import spock.lang.Issue -import spock.lang.PendingFeature import spock.lang.Specification class CommandObjectsSpec extends Specification implements ControllerUnitTest, DataTest { @@ -323,7 +322,6 @@ class CommandObjectsSpec extends Specification implements ControllerUnitTest