Repository: groovy
Updated Branches:
  refs/heads/master eb1a2b029 -> e9e7724da


GROOVY-8012: A class with a @MapConstructor when supplied with no args throws 
NPE (closes #466)


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

Branch: refs/heads/master
Commit: e9e7724da1951fc1b4c17909854a9a36c130bc99
Parents: eb1a2b0
Author: paulk <pa...@asert.com.au>
Authored: Fri Dec 2 03:13:41 2016 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Fri Dec 2 04:32:14 2016 +1000

----------------------------------------------------------------------
 .../transform/MapConstructorASTTransformation.java      |  7 +++++--
 .../groovy/transform/MapConstructorTransformTest.groovy | 12 ++++++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/e9e7724d/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java 
b/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
index 69c85f2..8991778 100644
--- 
a/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
+++ 
b/src/main/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
@@ -54,6 +54,7 @@ import static 
org.codehaus.groovy.ast.tools.GeneralUtils.getInstancePropertyFiel
 import static 
org.codehaus.groovy.ast.tools.GeneralUtils.getSuperPropertyFields;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.ifS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.notNullX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
@@ -141,16 +142,18 @@ public class MapConstructorASTTransformation extends 
AbstractASTTransformation {
             ClosureExpression transformed = (ClosureExpression) 
transformer.transform(pre);
             copyStatementsWithSuperAdjustment(transformed, body);
         }
+        final BlockStatement inner = new BlockStatement();
         for (FieldNode fNode : superList) {
             String name = fNode.getName();
             if (shouldSkip(name, excludes, includes, allNames)) continue;
-            assignField(useSetters, map, body, name);
+            assignField(useSetters, map, inner, name);
         }
         for (FieldNode fNode : list) {
             String name = fNode.getName();
             if (shouldSkip(name, excludes, includes, allNames)) continue;
-            assignField(useSetters, map, body, name);
+            assignField(useSetters, map, inner, name);
         }
+        body.addStatement(ifS(notNullX(varX("args")), inner));
         if (post != null) {
             ClosureExpression transformed = (ClosureExpression) 
transformer.transform(post);
             body.addStatement(transformed.getCode());

http://git-wip-us.apache.org/repos/asf/groovy/blob/e9e7724d/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy
----------------------------------------------------------------------
diff --git 
a/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy 
b/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy
index 59fd20a..a48d3ff 100644
--- a/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy
@@ -200,4 +200,16 @@ class MapConstructorTransformTest extends 
GroovyShellTestCase {
         '''
     }
 
+    // GROOVY-8012
+    void testMapConstructorWithNoArgs() {
+        assertScript '''
+            @groovy.transform.MapConstructor
+            class Foo {
+                String bar
+            }
+
+            assert new Foo() instanceof Foo
+        '''
+    }
+
 }

Reply via email to