You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/02/16 17:10:05 UTC

[groovy] branch GROOVY-10484 updated (8e4d7d8 -> bd85a55)

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

emilles pushed a change to branch GROOVY-10484
in repository https://gitbox.apache.org/repos/asf/groovy.git.


 discard 8e4d7d8  GROOVY-9158, GROOVY-10176, GROOVY-10484: NamedParam checking enhancement
     add 45e9440  GROOVY-10485: Bump jarjar to 1.8.1 (build dependency)
     add ac5599f  GROOVY-10486: Bump gradle versions plugin to 0.42.0 (build dependency)
     add a2fbcd3  GROOVY-10487: Bump gson (test dependency) to 2.9.0
     add a4e1724  GROOVY-10488: Bump json-unit (test dependency) version to 2.31.0
     add 58e4dd5  GROOVY-10489: Bump checkstyle to 9.3 (build dependency)
     add 0001ae6  GROOVY-10490: Bump xstream to 1.4.19
     add 1c01e79  update verification metadata info
     add 42410f0  update verification metadata info
     add 02ebb32  GROOVY-10290: Dynamic Groovy code in Gradle doesn't compile because of $getLookup() method is not static
     add 20d7052  GROOVY-10491: Bump jqwik to 1.6.4 (test dependency)
     add cfc4a73  GROOVY-10492: Bump picocli to 4.6.3
     add a0265a6  GROOVY-10493: Bump slf4j to 1.7.36 (test dependency)
     add 59b5aaf  add extra @PlatformLog doco
     add 4243407  Trivial refactoring: inline variable
     add 9e06219  GROOVY-9158, GROOVY-10176: `@NamedVariant`: refacor and add test cases
     new bd85a55  GROOVY-10484: `@NamedVariant`: bind `@NamedParam` into `@NamedParams`

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (8e4d7d8)
            \
             N -- N -- N   refs/heads/GROOVY-10484 (bd85a55)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 build.gradle                                       |  2 +-
 gradle/verification-metadata.xml                   | 45 ++++----------
 .../groovy/tools/javac/JavaStubGenerator.java      |  2 +-
 .../transform/NamedVariantASTTransformation.java   | 50 ++++++++--------
 src/spec/doc/core-metaprogramming.adoc             | 69 ++++++++++++++++++----
 .../{Groovy6302.groovy => Groovy10290.groovy}      | 29 ++++-----
 .../transform/NamedVariantTransformTest.groovy     | 36 +++++++++++
 subprojects/groovy-json/build.gradle               |  4 +-
 subprojects/groovy-test-junit5/build.gradle        |  2 +-
 .../src/main/java/groovy/xml/XmlNodePrinter.java   |  3 +-
 versions.properties                                | 10 ++--
 11 files changed, 155 insertions(+), 97 deletions(-)
 copy src/test/org/codehaus/groovy/tools/stubgenerator/{Groovy6302.groovy => Groovy10290.groovy} (59%)

[groovy] 01/01: GROOVY-10484: `@NamedVariant`: bind `@NamedParam` into `@NamedParams`

Posted by em...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit bd85a55cd85c09aeb8c4f82298bfabe621809722
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    | 14 ++++++++++++++
 .../transform/NamedVariantTransformTest.groovy      | 21 ++++++++++++++++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
index 2d65dc5..adcad84 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.MapEntryExpression;
@@ -46,6 +48,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
+import static java.util.stream.Collectors.toList;
 import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedConstructor;
 import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
 import static org.apache.groovy.ast.tools.ClassNodeUtils.isInnerClass;
@@ -69,6 +72,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.elvisX;
 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.listX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.mapX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.plusX;
@@ -136,9 +140,19 @@ public class NamedVariantASTTransformation extends AbstractASTTransformation {
                 }
             }
         }
+        collateNamedParamAnnotations(mapParam); // GROOVY-10484
         createMapVariant(this, 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();
+        namedParams.addMember("value", listX(mapParamAnnotations.stream()
+            .map(AnnotationConstantExpression::new).collect(toList())));
+        mapParamAnnotations.clear();
+        mapParamAnnotations.add(namedParams);
+    }
+
     static  boolean processImplicitNamedParam(final ErrorCollecting xform, final MethodNode mNode, final Parameter mapParam, final BlockStatement inner, final ArgumentListExpression args, final List<String> propNames, final Parameter fromParam, final boolean coerce) {
         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 2ec9135..558699b 100644
--- a/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/NamedVariantTransformTest.groovy
@@ -254,7 +254,7 @@ final class NamedVariantTransformTest {
         '''
     }
 
-    @Test
+    @Test // GROOVY-10484
     void testNamedParamRequiredVersusOptional() {
         def err = shouldFail '''
             import groovy.transform.*
@@ -271,6 +271,25 @@ final class NamedVariantTransformTest {
             m(alpha: 123)
         '''
         assert err =~ /Missing required named argument 'color'/
+
+        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