This is an automated email from the ASF dual-hosted git repository. sunlan pushed a commit to branch refine-groovydoc in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 66aadb2624b34ed1b51b081c6adaab0f7706961a Author: Paul King <pa...@asert.com.au> AuthorDate: Sun Dec 16 21:49:20 2018 +1000 GROOVY-8777/GROOVY-8776: @MapConstructor on inner class in conjunction with @CompileStatic --- .../transform/options/DefaultPropertyHandler.java | 8 +++- .../transform/MapConstructorTransformTest.groovy | 43 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/main/groovy/groovy/transform/options/DefaultPropertyHandler.java b/src/main/groovy/groovy/transform/options/DefaultPropertyHandler.java index c38bc68..a0462b6 100644 --- a/src/main/groovy/groovy/transform/options/DefaultPropertyHandler.java +++ b/src/main/groovy/groovy/transform/options/DefaultPropertyHandler.java @@ -26,6 +26,7 @@ import org.codehaus.groovy.ast.PropertyNode; import org.codehaus.groovy.ast.expr.ArgumentListExpression; import org.codehaus.groovy.ast.expr.Expression; import org.codehaus.groovy.ast.expr.MapExpression; +import org.codehaus.groovy.ast.expr.MethodCallExpression; import org.codehaus.groovy.ast.stmt.BlockStatement; import org.codehaus.groovy.ast.stmt.Statement; import org.codehaus.groovy.transform.AbstractASTTransformation; @@ -94,8 +95,11 @@ public class DefaultPropertyHandler extends PropertyHandler { private static Statement assignFieldS(boolean useSetters, Parameter map, String name) { ArgumentListExpression nameArg = args(constX(name)); - Expression var = callX(varX(map), "get", nameArg); - return ifS(callX(varX(map), "containsKey", nameArg), useSetters ? + MethodCallExpression var = callX(varX(map), "get", nameArg); + var.setImplicitThis(false); + MethodCallExpression containsKey = callX(varX(map), "containsKey", nameArg); + containsKey.setImplicitThis(false); + return ifS(containsKey, useSetters ? setViaSetterS(name, var) : assignToFieldS(name, var)); } diff --git a/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy b/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy index a48d3ff..96d79dc 100644 --- a/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy +++ b/src/test/org/codehaus/groovy/transform/MapConstructorTransformTest.groovy @@ -212,4 +212,47 @@ class MapConstructorTransformTest extends GroovyShellTestCase { ''' } + // GROOVY-8776 + void testNestedMapConstructorCS() { + assertScript ''' + import groovy.transform.* + class GroovyMapConstructorCheck { + @CompileStatic + @MapConstructor + @ToString + static class Goo { + int x0 + } + } + assert new GroovyMapConstructorCheck.Goo(x0:123).toString() == 'GroovyMapConstructorCheck$Goo(123)' + ''' + } + + // GROOVY-8777 + void testMapConstructorUsedInInnerCS() { + assertScript ''' + import groovy.transform.* + + @CompileStatic + class GroovyMapConstructorCheck { + @MapConstructor(noArg = true) + class Goo { + final int x0 + + @Override + public String toString() { + return "Goo(|$x0|)" + } + } + + def go() { + new Goo(x0:123).toString().toUpperCase() + } + } + + final check = new GroovyMapConstructorCheck() + assert check.go() == 'GOO(|123|)' + ''' + } + }