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

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

commit cb3ad7cd5c128063980d0ef5e44dbaebc8a577fd
Author: Eric Milles <[email protected]>
AuthorDate: Mon Feb 21 03:58:46 2022 -0600

    GROOVY-10500: `@NamedVariant`: slice named args map for `@NamedDelegate`
    
    Conflicts:
        
src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
---
 .../transform/NamedVariantASTTransformation.java   | 25 +++++++++-------------
 .../transform/NamedVariantTransformTest.groovy     |  7 +++---
 2 files changed, 14 insertions(+), 18 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
 
b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
index 84d8db7..17c7a5e 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
@@ -31,7 +31,6 @@ import org.codehaus.groovy.ast.Parameter;
 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.MapEntryExpression;
 import org.codehaus.groovy.ast.expr.MethodCallExpression;
 import org.codehaus.groovy.ast.stmt.AssertStatement;
 import org.codehaus.groovy.ast.stmt.BlockStatement;
@@ -62,12 +61,10 @@ import static 
org.codehaus.groovy.ast.tools.GeneralUtils.castX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.entryX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.getAllProperties;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.list2args;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.mapX;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.notNullX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.plusX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
@@ -195,22 +192,20 @@ public class NamedVariantASTTransformation extends 
AbstractASTTransformation {
 
         Set<String> names = new HashSet<>();
         List<PropertyNode> props = getAllProperties(names, 
fromParam.getType(), true, false, false, true, false, true);
-        for (String next : names) {
-            if (hasDuplicates(mNode, propNames, next)) return false;
+        for (String name : names) {
+            if (hasDuplicates(mNode, propNames, name)) return false;
         }
-        List<MapEntryExpression> entries = new ArrayList<>();
-        for (PropertyNode pNode : props) {
-            String name = pNode.getName();
-            ClassNode type = pNode.getType();
-            // create entry [name: __namedArgs.name ?: defaultValue)] -- 
GROOVY-9183
-            entries.add(entryX(constX(name), namedParamValue(mapParam, name, 
type, pNode.getInitialExpression())));
+        for (PropertyNode prop : props) {
             // create annotation @NamedParam(value='name', type=PropertyType)
             AnnotationNode namedParam = new AnnotationNode(NAMED_PARAM_TYPE);
-            namedParam.addMember("value", constX(name));
-            namedParam.addMember("type", classX(type));
+            namedParam.addMember("value", constX(prop.getName()));
+            namedParam.addMember("type", classX(prop.getType()));
             mapParam.addAnnotation(namedParam);
         }
-        Expression delegateMap = mapX(entries);
+
+        ArgumentListExpression subMapArgs = new ArgumentListExpression();
+        for (String name : names) subMapArgs.addExpression(constX(name));
+        Expression delegateMap = callX(varX(mapParam), "subMap", subMapArgs);
         args.addExpression(castX(fromParam.getType(), delegateMap));
         return true;
     }
diff --git 
a/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy 
b/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
index ecbfdf2..5b20df9 100644
--- a/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
@@ -310,7 +310,7 @@ final class NamedVariantTransformTest {
     }
 
     @Test // GROOVY-10261
-    void testNamedDelegateWithDefaultArguments() {
+    void testNamedVariantWithDefaultArguments() {
         assertScript '''
             import groovy.transform.*
 
@@ -332,7 +332,7 @@ final class NamedVariantTransformTest {
         '''
     }
 
-    @Test // GROOVY-9183
+    @Test // GROOVY-9183, GROOVY-10500
     void testNamedDelegateWithPropertyDefaults() {
         assertScript '''
             import groovy.transform.*
@@ -361,7 +361,8 @@ final class NamedVariantTransformTest {
                     String separator = ','
                     Boolean headers = true
                     Integer headersRow = 0
-                    Integer firstDataRow = 1
+                    Integer firstDataRow = FIRST_DATA_ROW
+                    private static final int FIRST_DATA_ROW = 1
                 }
             }
 

Reply via email to