Skip to content

Commit a9491c0

Browse files
authored
Merge pull request #13698 from grails/issue13486_testing
Issue13486 testing
2 parents ab9fdf3 + e9e20d9 commit a9491c0

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

grails-plugin-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import grails.web.controllers.ControllerMethod;
3030
import groovy.lang.Closure;
3131
import groovy.transform.CompilationUnitAware;
32-
import org.apache.groovy.ast.tools.AnnotatedNodeUtils;
3332
import org.apache.groovy.ast.tools.ClassNodeUtils;
3433
import org.codehaus.groovy.ast.ASTNode;
3534
import org.codehaus.groovy.ast.AnnotationNode;
@@ -98,6 +97,7 @@
9897
import java.util.Map;
9998
import java.util.regex.Pattern;
10099

100+
import static org.codehaus.groovy.ast.tools.GeneralUtils.*;
101101
import static org.grails.compiler.injection.GrailsASTUtils.applyDefaultMethodTarget;
102102
import static org.grails.compiler.injection.GrailsASTUtils.applyMethodTarget;
103103
import static org.grails.compiler.injection.GrailsASTUtils.buildGetMapExpression;
@@ -753,9 +753,8 @@ protected void initializeAndValidateCommandObjectParameter(final BlockStatement
753753
final ClassNode controllerNode, final ClassNode commandObjectNode,
754754
final ASTNode actionNode, final String actionName, final String paramName,
755755
final SourceUnit source, final GeneratorContext context) {
756-
final DeclarationExpression declareCoExpression = new DeclarationExpression(
757-
new VariableExpression(paramName, commandObjectNode), Token.newSymbol(Types.EQUALS, 0, 0), new EmptyExpression());
758-
wrapper.addStatement(new ExpressionStatement(declareCoExpression));
756+
final DeclarationExpression declareCoExpression = declX(localVarX(paramName, commandObjectNode), new EmptyExpression());
757+
wrapper.addStatement(stmt(declareCoExpression));
759758

760759
if(commandObjectNode.isInterface() || Modifier.isAbstract(commandObjectNode.getModifiers())) {
761760
final String warningMessage = "The [" + actionName + "] action in [" +
@@ -843,16 +842,11 @@ protected void initializeAndValidateCommandObjectParameter(final BlockStatement
843842

844843
protected void initializeCommandObjectParameter(final BlockStatement wrapper,
845844
final ClassNode commandObjectNode, final String paramName, SourceUnit source) {
846-
847-
final ArgumentListExpression initializeCommandObjectArguments = new ArgumentListExpression();
848-
initializeCommandObjectArguments.addExpression(new ClassExpression(commandObjectNode));
849-
initializeCommandObjectArguments.addExpression(new ConstantExpression(paramName));
850-
final MethodCallExpression initializeCommandObjectMethodCall = new MethodCallExpression(new VariableExpression("this"), "initializeCommandObject", initializeCommandObjectArguments);
845+
final ArgumentListExpression initializeCommandObjectArguments = args(classX(commandObjectNode), constX(paramName));
846+
final MethodCallExpression initializeCommandObjectMethodCall = callThisX("initializeCommandObject", initializeCommandObjectArguments);
851847
applyDefaultMethodTarget(initializeCommandObjectMethodCall, commandObjectNode);
852-
853-
final Expression assignCommandObjectToParameter = new BinaryExpression(new VariableExpression(paramName), Token.newSymbol(Types.EQUALS, 0, 0), initializeCommandObjectMethodCall);
854-
855-
wrapper.addStatement(new ExpressionStatement(assignCommandObjectToParameter));
848+
final Expression assignCommandObjectToParameter = assignX(varX(paramName), initializeCommandObjectMethodCall);
849+
wrapper.addStatement(stmt(assignCommandObjectToParameter));
856850
}
857851

858852
/**

grails-test-suite-web/src/test/groovy/org/grails/web/commandobjects/CommandObjectsSpec.groovy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,13 @@ class TestController {
316316
[command: co]
317317
}
318318

319+
private seeIssue13486() {
320+
// the presence of this local variable could break
321+
// the compile-time generated no-arg methodActionWithDate()
322+
// see https://github.com/grails/grails-core/issues/13486
323+
String co
324+
}
325+
319326
def methodActionWithArtist(Artist a) {
320327
[artist: a]
321328
}

0 commit comments

Comments
 (0)