Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
Loading