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 2017/05/26 01:54:20 UTC

groovy git commit: GROOVY-8203: Add @Newify will cause ?. operator NPE (closes #550)

Repository: groovy
Updated Branches:
  refs/heads/master 6519cbd50 -> 401b3a4c4


GROOVY-8203: Add @Newify will cause ?. operator NPE (closes #550)


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

Branch: refs/heads/master
Commit: 401b3a4c434083adc84843cfb9abf14f6783c7e7
Parents: 6519cbd
Author: paulk <pa...@asert.com.au>
Authored: Thu May 25 17:26:54 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Fri May 26 11:52:32 2017 +1000

----------------------------------------------------------------------
 .../groovy/transform/NewifyASTTransformation.java |  5 ++---
 .../groovy/transform/NewifyTransformTest.groovy   | 18 ++++++++++++++++--
 2 files changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/401b3a4c/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 909b6ec..55ae7de 100644
--- a/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/NewifyASTTransformation.java
@@ -49,9 +49,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
 
 /**
- * Handles generation of code for the @Newify annotation.
- *
- * @author Paul King
+ * Handles generation of code for the {@code @Newify} AST transform.
  */
 @GroovyASTTransformation(phase = CompilePhase.CANONICALIZATION)
 public class NewifyASTTransformation extends ClassCodeExpressionTransformer implements ASTTransformation {
@@ -167,6 +165,7 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
             Expression object = transform(mce.getObjectExpression());
             MethodCallExpression transformed = callX(object, method, args);
             transformed.setImplicitThis(mce.isImplicitThis());
+            transformed.setSafe(mce.isSafe());
             transformed.setSourcePosition(mce);
             return transformed;
         } else if (expr instanceof ClosureExpression) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/401b3a4c/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 b6d0255..e3e9890 100644
--- a/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/NewifyTransformTest.groovy
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.transform
 
 /**
- * @author Paul King
+ * Tests for the {@code @Newify} AST transform.
  */
 class NewifyTransformTest extends GroovyShellTestCase {
 
@@ -158,7 +158,6 @@ class NewifyTransformTest extends GroovyShellTestCase {
         assert test == 'ABC'
     }
 
-
     void testNewifyClosureCompileStatic_Groovy7758() {
         assertScript '''
             class A {
@@ -175,4 +174,19 @@ class NewifyTransformTest extends GroovyShellTestCase {
             assert test(new A()) == 'abc'
         '''
     }
+
+    void testNewifyTransformPreservesSafeMethodCall_Groovy8203() {
+        assertScript '''
+            @Newify(A)
+            class Z {
+                def foo() {
+                    def a
+                    a?.get('b')
+                }
+                class A {}
+            }
+
+            assert !new Z().foo()
+        '''
+    }
 }
\ No newline at end of file