You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by jw...@apache.org on 2017/08/06 04:02:23 UTC

[3/3] groovy git commit: GROOVY-8245: @Newify(auto=false) not transforming declarations (closes #571)

GROOVY-8245: @Newify(auto=false) not transforming declarations (closes #571)


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

Branch: refs/heads/master
Commit: 891c35f28b0419e4080f222d1d8722351817b7f7
Parents: 51f9294
Author: John Wagenleitner <jw...@apache.org>
Authored: Sat Aug 5 11:15:04 2017 -0700
Committer: John Wagenleitner <jw...@apache.org>
Committed: Sat Aug 5 14:16:20 2017 -0700

----------------------------------------------------------------------
 .../transform/NewifyASTTransformation.java      | 10 ++++++++-
 .../groovy/transform/NewifyTransformTest.groovy | 22 ++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/891c35f2/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java b/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java
index 55ae7de..8c31449 100644
--- a/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java
@@ -178,7 +178,7 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
             }
         } else if (expr instanceof DeclarationExpression) {
             DeclarationExpression de = (DeclarationExpression) expr;
-            if (de == candidate || auto) {
+            if (shouldTransform(de)) {
                 candidate = null;
                 Expression left = de.getLeftExpression();
                 Expression right = transform(de.getRightExpression());
@@ -191,6 +191,14 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
         return expr.transformExpression(this);
     }
 
+    private boolean shouldTransform(DeclarationExpression exp) {
+        return exp == candidate || auto || hasClassesToNewify();
+    }
+
+    private boolean hasClassesToNewify() {
+        return classesToNewify != null && !classesToNewify.getExpressions().isEmpty();
+    }
+
     private void newifyClass(ClassNode cNode, boolean autoFlag, ListExpression list) {
         String cName = cNode.getName();
         if (cNode.isInterface()) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/891c35f2/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy b/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy
index e3e9890..d585c8a 100644
--- a/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy
@@ -189,4 +189,26 @@ class NewifyTransformTest extends GroovyShellTestCase {
             assert !new Z().foo()
         '''
     }
+
+    // GROOVY-8245
+    void testDeclarationWhenAutoIsFalse() {
+        assertScript '''
+            class Foo {
+                static int answer = 7
+                Foo() {
+                    answer = 42
+                }
+            }
+            @Newify(auto=false, value=Foo)
+            class Bar {
+                static {
+                    Foo foo = Foo()
+                }
+                static void method() {}
+            }
+            assert Foo.answer == 7
+            Bar.method()
+            assert Foo.answer == 42
+        '''
+    }
 }
\ No newline at end of file