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 2018/12/16 13:37:01 UTC
[groovy] branch GROOVY_2_5_X updated: GROOVY-8777/GROOVY-8776:
@MapConstructor on inner class in conjunction with @CompileStatic
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|)'
+ '''
+ }
+
}