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:41:12 UTC
[groovy] branch GROOVY_3_0_X updated: GROOVY-9386: traits: do not
transform dynamic variable within closure
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 31d4a6c GROOVY-9386: traits: do not transform dynamic variable within closure
31d4a6c is described below
commit 31d4a6c38af9ccdf21450f9ccc6b384c94c6ea49
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sat Aug 8 08:39:26 2020 -0500
GROOVY-9386: traits: do not transform dynamic variable within closure
closes #1334
(cherry picked from commit 03ef95584a356bb8c514f38c3b4d16eb4772a643)
---
.../transform/trait/TraitReceiverTransformer.java | 2 +-
.../traitx/TraitASTTransformationTest.groovy | 38 ++++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
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 04b2cc0..ebb8947 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
@@ -149,7 +149,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
propertyExpression.getProperty().setSourcePosition(exp);
return propertyExpression;
}
- } else if (accessedVariable instanceof DynamicVariable) {
+ } else if (accessedVariable instanceof DynamicVariable && !inClosure) { // GROOVY-9386
PropertyExpression propertyExpression = propX(varX(weaved), vexp.getName());
propertyExpression.getProperty().setSourcePosition(exp);
return propertyExpression;
diff --git a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
index 11cf72c..81d6fd0 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -2849,6 +2849,44 @@ final class TraitASTTransformationTest {
'''
}
+ @Test // GROOVY-9386
+ void testTraitPropertyInitializedByTap() {
+ assertScript '''
+ class P {
+ int prop
+ }
+ trait T {
+ P pogo = new P().tap {
+ prop = 42 // MissingPropertyException: No such property: prop for class: C
+ }
+ }
+ class C implements T {
+ }
+
+ def pogo = new C().pogo
+ assert pogo.prop == 42
+ '''
+ }
+
+ @Test // GROOVY-9386
+ void testTraitPropertyInitializedByWith() {
+ assertScript '''
+ class P {
+ int prop
+ }
+ trait T {
+ P pogo = new P().with {
+ prop = 42 // MissingPropertyException: No such property: prop for class: C
+ return it
+ }
+ }
+ class C implements T {
+ }
+ def pogo = new C().pogo
+ assert pogo.prop == 42
+ '''
+ }
+
@Test // GROOVY-9660
void testAsGenericsParam() {
assertScript '''