diff --git a/grails-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java b/grails-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java index fa03fc2f79b..7ab580e96a1 100644 --- a/grails-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java +++ b/grails-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java @@ -112,9 +112,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.declX; import static org.codehaus.groovy.ast.tools.GeneralUtils.ifS; import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX; -import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX; import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt; -import static org.codehaus.groovy.ast.tools.GeneralUtils.ternaryX; import static org.codehaus.groovy.ast.tools.GeneralUtils.varX; import static org.grails.compiler.injection.GrailsASTUtils.applyDefaultMethodTarget; import static org.grails.compiler.injection.GrailsASTUtils.applyMethodTarget; @@ -888,11 +886,17 @@ protected void initializeStringParameter(final ClassNode classNode, final BlockS final ClassNode paramTypeClassNode = param.getType(); final String methodParamName = param.getName(); - Expression getParamsExpression = buildGetPropertyExpression(localVarX("this", classNode), "params", classNode); - final BooleanExpression containsKeyExpression = boolX(applyDefaultMethodTarget(callX(getParamsExpression, "containsKey", args(constX(requestParameterName))), Map.class)); - - wrapper.addStatement(stmt(declX(localVarX(methodParamName, paramTypeClassNode), - ternaryX(containsKeyExpression, buildGetMapExpression(getParamsExpression, requestParameterName), nullX())))); + Expression getParamsExpression = buildGetPropertyExpression(new VariableExpression("this"), "params", classNode); + final Expression paramsContainsKeyMethodArguments = new ArgumentListExpression( + new ConstantExpression(requestParameterName)); + final BooleanExpression containsKeyExpression = new BooleanExpression( + applyDefaultMethodTarget(new MethodCallExpression(getParamsExpression, "containsKey", paramsContainsKeyMethodArguments), Map.class)); + final Statement initializeParameterStatement = new ExpressionStatement( + new DeclarationExpression(new VariableExpression( + methodParamName, paramTypeClassNode), + Token.newSymbol(Types.EQUALS, 0, 0), + new TernaryExpression(containsKeyExpression, buildGetMapExpression(getParamsExpression, requestParameterName), new ConstantExpression(null)))); + wrapper.addStatement(initializeParameterStatement); } protected void initializePrimitiveOrTypeWrapperParameter(final ClassNode classNode, final BlockStatement wrapper, diff --git a/grails-test-examples/app1/src/integration-test/groovy/functionaltests/commandobjects/CommandObjectSpec.groovy b/grails-test-examples/app1/src/integration-test/groovy/functionaltests/commandobjects/CommandObjectSpec.groovy index a7211c638b6..125ac655b88 100644 --- a/grails-test-examples/app1/src/integration-test/groovy/functionaltests/commandobjects/CommandObjectSpec.groovy +++ b/grails-test-examples/app1/src/integration-test/groovy/functionaltests/commandobjects/CommandObjectSpec.groovy @@ -22,11 +22,13 @@ package functionaltests.commandobjects import grails.plugin.geb.ContainerGebSpec import grails.testing.mixin.integration.Integration import spock.lang.Issue +import spock.lang.PendingFeature @Integration @Issue('https://github.com/apache/grails-core/issues/14947') class CommandObjectSpec extends ContainerGebSpec { + @PendingFeature void 'should display the correct title on the home page'() { when: 'visiting the home page' go('/commandObject/echo?person=George+Doe')