You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/08/09 00:42:07 UTC

[groovy] branch GROOVY_3_0_X updated: GROOVY-9673: do not set method target on call expr in case of overloads

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new d636998  GROOVY-9673: do not set method target on call expr in case of overloads
d636998 is described below

commit d6369983374e91500e6d6a2a431d650593142ad3
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Aug 8 08:55:36 2020 -0500

    GROOVY-9673: do not set method target on call expr in case of overloads
    
    closes #1338
    
    (cherry picked from commit dd2aca619f6bc6e2757e30bb075868202e635d0a)
---
 .../transform/trait/SuperCallTraitTransformer.java |  1 -
 .../traitx/TraitASTTransformationTest.groovy       | 43 +++++++++++++++++++++-
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java b/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
index ba57ecc..08fe8d2 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
@@ -107,7 +107,6 @@ class SuperCallTraitTransformer extends ClassCodeExpressionTransformer {
                             setterCall.getObjectExpression().setSourcePosition(leftExpression.getObjectExpression());
                             setterCall.getMethod().setSourcePosition(leftExpression.getProperty());
                             setterCall.setSpreadSafe(leftExpression.isSpreadSafe());
-                            setterCall.setMethodTarget(method);
                             setterCall.setImplicitThis(false);
                             return setterCall;
                         }
diff --git a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index 5a57531..2d412a6 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -1108,8 +1108,49 @@ final class TraitASTTransformationTest {
         '''
     }
 
+    @Test // GROOVY-9673
+    void testTraitSuperPropertySetWithOverloads() {
+        assertScript '''
+            trait T {
+              def setX(Number n) {
+                'Number'
+              }
+              def setX(String s) {
+                'String'
+              }
+            }
+
+            class C implements T {
+              def test() {
+                T.super.x = 42
+              }
+            }
+
+            assert new C().test() == 'Number'
+        '''
+
+        assertScript '''
+            trait T {
+              def setX(Number n) {
+                'Number'
+              }
+              def setX(String s) {
+                'String'
+              }
+            }
+
+            class C implements T {
+              def test() {
+                T.super.x = 'x'
+              }
+            }
+
+            assert new C().test() == 'String'
+        '''
+    }
+
     @Test
-    void testSuperCallInTraitExtendingAnotherTrait() {
+    void testTraitSuperCallWhenExtendingAnotherTrait() {
         assertScript '''
             trait Foo {
                 int foo() { 1 }