You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2020/08/05 22:00:48 UTC
[groovy] 01/01: 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.
emilles pushed a commit to branch GROOVY-9673
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 2ec275f29e6fa959e9175eba19f2767bfa3c3589
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed Aug 5 16:56:26 2020 -0500
GROOVY-9673: do not set method target on call expr in case of overloads
---
.../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 76f5782..4e4eea4 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
@@ -98,7 +98,6 @@ class SuperCallTraitTransformer extends ClassCodeExpressionTransformer {
setterCall.getMethod().setSourcePosition(leftExpression.getProperty());
setterCall.getObjectExpression().setSourcePosition(traitType);
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 11cf72c..8dad8ff 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -1014,8 +1014,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 }