You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2018/07/25 03:52:36 UTC
groovy git commit: GROOVY-8282: Error while popping argument from
operand stack tracker in class ...$Trait$Helper (closes #774)
Repository: groovy
Updated Branches:
refs/heads/master 426a54166 -> 734bb6ad9
GROOVY-8282: Error while popping argument from operand stack tracker in class ...$Trait$Helper (closes #774)
Bare named argument parameters are captured in a TupleExpression rather than an ArgumentListExpression.
While it would be nice to retrofit APP to have the correct type, that would impact many more places.
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/734bb6ad
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/734bb6ad
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/734bb6ad
Branch: refs/heads/master
Commit: 734bb6ad9ed0cf2012c96717a18bbf2a2295239c
Parents: 426a541
Author: Paul King <pa...@asert.com.au>
Authored: Thu Jul 12 21:30:54 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Wed Jul 25 13:51:24 2018 +1000
----------------------------------------------------------------------
.../transform/trait/TraitReceiverTransformer.java | 6 +++---
.../traitx/TraitASTTransformationTest.groovy | 18 ++++++++++++++++++
2 files changed, 21 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/734bb6ad/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
index 546ce06..8cb68af 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
@@ -42,6 +42,7 @@ 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.control.SourceUnit;
import org.codehaus.groovy.syntax.SyntaxException;
@@ -58,7 +59,6 @@ import java.util.List;
* In a nutshell, code like the following method definition in a trait:<p></p> <code>void foo() { this.bar() }</code> is
* transformed into: <code>void foo() { TraitHelper$bar(this) }</code>
*
- * @author Cedric Champeau
* @since 2.3.0
*/
class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
@@ -438,8 +438,8 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
private ArgumentListExpression createArgumentList(final Expression origCallArgs) {
ArgumentListExpression newArgs = new ArgumentListExpression();
newArgs.addExpression(new VariableExpression(weaved));
- if (origCallArgs instanceof ArgumentListExpression) {
- List<Expression> expressions = ((ArgumentListExpression) origCallArgs).getExpressions();
+ if (origCallArgs instanceof TupleExpression) {
+ List<Expression> expressions = ((TupleExpression) origCallArgs).getExpressions();
for (Expression expression : expressions) {
newArgs.addExpression(transform(expression));
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/734bb6ad/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index 439e680..362c8ff 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -2474,4 +2474,22 @@ assert c.b() == 2
'''
}
+ //GROOVY-8282
+ void testBareNamedArgumentPrivateMethodCall() {
+ assertScript '''
+ trait BugReproduction {
+ def foo() {
+ bar(a: 1)
+ }
+ private String bar(Map args) {
+ args.collect{ k, v -> "$k$v" }.join()
+ }
+ }
+
+ class Main implements BugReproduction {}
+
+ assert new Main().foo() == 'a1'
+ '''
+ }
+
}