This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push:
     new 8c4adbb  GROOVY-8777/GROOVY-8776: @MapConstructor on inner class in 
conjunction with @CompileStatic
8c4adbb is described below

commit 8c4adbbf4eb898df66ac3c4eb97cef47c3e56248
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|)'
+        '''
+    }
+
 }

Reply via email to