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 2022/03/01 12:40:06 UTC
[groovy] branch GROOVY_2_5_X updated: GROOVY-10484: `@NamedVariant`: bind `@NamedParam` into `@NamedParams`
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 ca789f4 GROOVY-10484: `@NamedVariant`: bind `@NamedParam` into `@NamedParams`
ca789f4 is described below
commit ca789f4aa6c509641834246558d8b52ae95f7a70
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed Feb 16 11:09:50 2022 -0600
GROOVY-10484: `@NamedVariant`: bind `@NamedParam` into `@NamedParams`
---
.../transform/NamedVariantASTTransformation.java | 16 ++++++++++++++++
.../groovy/transform/NamedVariantTransformTest.groovy | 18 ++++++++++++++++++
2 files changed, 34 insertions(+)
diff --git a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
index c09a349..153a270 100644
--- a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
@@ -20,6 +20,7 @@ package org.codehaus.groovy.transform;
import groovy.transform.NamedDelegate;
import groovy.transform.NamedParam;
+import groovy.transform.NamedParams;
import groovy.transform.NamedVariant;
import org.apache.groovy.ast.tools.AnnotatedNodeUtils;
import org.codehaus.groovy.ast.ASTNode;
@@ -29,6 +30,7 @@ import org.codehaus.groovy.ast.ConstructorNode;
import org.codehaus.groovy.ast.MethodNode;
import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.PropertyNode;
+import org.codehaus.groovy.ast.expr.AnnotationConstantExpression;
import org.codehaus.groovy.ast.expr.ArgumentListExpression;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.expr.MethodCallExpression;
@@ -65,6 +67,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.getAllProperties;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ifS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.isNullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.list2args;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.listX;
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;
@@ -132,9 +135,22 @@ public class NamedVariantASTTransformation extends AbstractASTTransformation {
}
}
}
+ collateNamedParamAnnotations(mapParam);
createMapVariant(mNode, anno, mapParam, genParams, cNode, inner, args, propNames);
}
+ private static void collateNamedParamAnnotations(final Parameter mapParam) {
+ AnnotationNode namedParams = new AnnotationNode(make(NamedParams.class));
+ List<AnnotationNode> mapParamAnnotations = mapParam.getAnnotations();
+ List<Expression> collect = new ArrayList<>();
+ for (AnnotationNode annotationNode : mapParamAnnotations) {
+ collect.add(new AnnotationConstantExpression(annotationNode));
+ }
+ namedParams.addMember("value", listX(collect));
+ mapParamAnnotations.clear();
+ mapParamAnnotations.add(namedParams);
+ }
+
private boolean processImplicitNamedParam(final MethodNode mNode, final Parameter mapParam, final BlockStatement inner, final ArgumentListExpression args, final List<String> propNames, final Parameter fromParam) {
String name = fromParam.getName();
ClassNode type = fromParam.getType();
diff --git a/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy b/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
index 5b20df9..85bac0c 100644
--- a/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
@@ -271,6 +271,7 @@ final class NamedVariantTransformTest {
@Test
void testNamedParamRequiredVersusOptional() {
+ // check dynamic case
def err = shouldFail '''
import groovy.transform.*
@@ -286,6 +287,23 @@ final class NamedVariantTransformTest {
m(alpha: 123)
'''
assert err =~ /Missing required named argument 'color'/
+
+ // also check static error (GROOVY-10484)
+ err = shouldFail '''
+ import groovy.transform.*
+ class Color {
+ int r, g, b
+ }
+ @NamedVariant
+ String m(Color color, int alpha = 0) {
+ return [color, alpha].join(' ')
+ }
+ @TypeChecked
+ void test() {
+ m(alpha: 123)
+ }
+ '''
+ assert err =~ /required named param 'color' not found/
}
@Test // GROOVY-9183