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'
+        '''
+    }
+
 }