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 + ''' + } + }