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 <[email protected]> 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 }
