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/11/19 03:44:36 UTC

groovy git commit: GROOVY-8892: Trait instance init blocks are called only when there are fields defined in same Trait

Repository: groovy
Updated Branches:
  refs/heads/master 7e6c3cb74 -> 06bcabe4c


GROOVY-8892: Trait instance init blocks are called only when there are fields defined in same Trait


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/06bcabe4
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/06bcabe4
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/06bcabe4

Branch: refs/heads/master
Commit: 06bcabe4c92f2fe5aaa7d81883692ed0075b38dc
Parents: 7e6c3cb
Author: Paul King <pa...@asert.com.au>
Authored: Mon Nov 19 13:44:16 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Mon Nov 19 13:44:16 2018 +1000

----------------------------------------------------------------------
 .../groovy/transform/trait/TraitComposer.java   | 12 +++++-----
 .../traitx/TraitASTTransformationTest.groovy    | 24 ++++++++++++++++++++
 2 files changed, 30 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/06bcabe4/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
index 70eaba9..5b80061 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -320,13 +320,13 @@ public abstract class TraitComposer {
                     cNode.addMethod(impl);
                 }
             }
-            cNode.addObjectInitializerStatements(new ExpressionStatement(
-                    new MethodCallExpression(
-                            new ClassExpression(helperClassNode),
-                            Traits.INIT_METHOD,
-                            new ArgumentListExpression(new VariableExpression("this")))
-            ));
         }
+        cNode.addObjectInitializerStatements(new ExpressionStatement(
+                new MethodCallExpression(
+                        new ClassExpression(helperClassNode),
+                        Traits.INIT_METHOD,
+                        new ArgumentListExpression(new VariableExpression("this")))
+        ));
     }
 
     private static void createForwarderMethod(

http://git-wip-us.apache.org/repos/asf/groovy/blob/06bcabe4/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 b20c4c6..27ecd8d 100644
--- a/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/traitx/TraitASTTransformationTest.groovy
@@ -2644,4 +2644,28 @@ assert c.b() == 2
             assert MyClass.full == 'FOOBAR'
         '''
     }
+
+    //GROOVY-8892
+    void testTraitWithStaticInitBlockWithAndWithoutProps() {
+        assertScript '''
+            class Counter {
+                static int count = 0
+            }
+            trait TraitNoProps {
+                {
+                    Counter.count += 1
+                }
+            }
+            trait TraitWithProp {
+                Integer instanceCounter //immutable, non-shareable
+                {
+                    Counter.count += 10
+                    instanceCounter = 1
+                }
+            }
+            class ClassWithTraits implements TraitNoProps, TraitWithProp { }
+            assert new ClassWithTraits().instanceCounter == 1
+            assert Counter.count == 11
+        '''
+    }
 }