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/07/27 04:32:17 UTC

[groovy] branch GROOVY_3_0_X updated (bab1a2533f -> 777a128369)

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

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


    from bab1a2533f Bump version on GROOVY_3_0_X branch
     new 19d7d4d70f GROOVY-10705: ToString order bug for super properties (port to 3_0_X)
     new e93723bd46 GROOVY-10705: ToString order bug for super properties (also handle pseudo properties)
     new 204376f9ea GROOVY-10704: retain order of inherited methods (port to 3_0_X)
     new 777a128369 GROOVY-10704: retain order of field-related methods

The 4 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:
 .../org/apache/groovy/ast/tools/ClassNodeUtils.java    |  8 ++++----
 .../java/org/codehaus/groovy/ast/tools/BeanUtils.java  | 10 ++++++++--
 .../org/codehaus/groovy/ast/tools/GeneralUtils.java    |  2 +-
 .../groovy/transform/ToStringASTTransformation.java    |  8 ++++----
 .../codehaus/groovy/transform/trait/TraitComposer.java |  5 +++--
 .../groovy/transform/ToStringTransformTest.groovy      | 18 ++++++++++++++++--
 6 files changed, 36 insertions(+), 15 deletions(-)


[groovy] 02/04: GROOVY-10705: ToString order bug for super properties (also handle pseudo properties)

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

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

commit e93723bd4610fe014c9641cb47e0b9a86734cc98
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Jul 27 09:11:49 2022 +1000

    GROOVY-10705: ToString order bug for super properties (also handle pseudo properties)
---
 src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java | 10 ++++++++--
 .../java/org/codehaus/groovy/ast/tools/GeneralUtils.java   |  2 +-
 .../codehaus/groovy/transform/ToStringTransformTest.groovy | 14 ++++++++++++++
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
index e2377ba624..d7be0b77ba 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
@@ -77,7 +77,7 @@ public class BeanUtils {
             result.addAll(getAllProperties(origType, type.getSuperClass(), names, includeSuperProperties, includeStatic, includePseudoGetters, includePseudoSetters, superFirst));
         }
         addExplicitProperties(type, result, names, includeStatic);
-        addPseudoProperties(origType, type, result, names, includeStatic, includePseudoGetters, includePseudoSetters);
+        addPseudoProperties(origType, type, result, names, includeStatic, includePseudoGetters, includePseudoSetters, includeSuperProperties);
         if (!superFirst && includeSuperProperties) {
             result.addAll(getAllProperties(origType, type.getSuperClass(), names, includeSuperProperties, includeStatic, includePseudoGetters, includePseudoSetters, superFirst));
         }
@@ -96,8 +96,14 @@ public class BeanUtils {
     }
 
     public static void addPseudoProperties(ClassNode origType, ClassNode cNode, List<PropertyNode> result, Set<String> names, boolean includeStatic, boolean includePseudoGetters, boolean includePseudoSetters) {
+        addPseudoProperties(origType, cNode, result, names, includeStatic, includePseudoGetters, includePseudoSetters, true);
+    }
+
+    public static void addPseudoProperties(ClassNode origType, ClassNode cNode, List<PropertyNode> result, Set<String> names, boolean includeStatic, boolean includePseudoGetters, boolean includePseudoSetters, boolean traverseSuperClasses) {
         if (!includePseudoGetters && !includePseudoSetters) return;
-        List<MethodNode> methods = cNode.getAllDeclaredMethods();
+        List<MethodNode> methods = traverseSuperClasses ?
+                cNode.getAllDeclaredMethods() :
+                cNode.getMethods();
         for (MethodNode mNode : methods) {
             if (!includeStatic && mNode.isStatic()) continue;
             if (hasAnnotation(mNode, INTERNAL_TYPE)) continue;
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
index d3967bf696..43d138c73f 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -492,7 +492,7 @@ public class GeneralUtils {
                 }
             }
             if (includePseudoGetters || includePseudoSetters) {
-                BeanUtils.addPseudoProperties(origType, cNode, result, names, includeStatic, includePseudoGetters, includePseudoSetters);
+                BeanUtils.addPseudoProperties(origType, cNode, result, names, includeStatic, includePseudoGetters, includePseudoSetters, traverseSuperClasses);
             }
         }
         if (includeFields) {
diff --git a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
index 621ea98367..1668ca64e1 100644
--- a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
@@ -297,6 +297,20 @@ class ToStringTransformTest extends GroovyShellTestCase {
             new SportsPerson(first: 'John', last: 'Smith', title: 'Mr').toString()
         ''')
         assert toString == "SportsPerson(title:Mr, golfer:false, adult:true, cyclist:true)"
+        assertScript '''
+            class Base {
+                String getA() { 'base a' }
+                String getC() { 'base c' }
+            }
+
+            @groovy.transform.ToString(includeSuperProperties=true, allProperties=true)
+            class Child extends Base {
+                String getA() { 'child a' }
+                String getB() { 'child b' }
+            }
+
+            assert new Child().toString() == 'Child(child a, child b, base c)'
+        '''
     }
 
     void testSelfReference() {


[groovy] 03/04: GROOVY-10704: retain order of inherited methods (port to 3_0_X)

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

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

commit 204376f9ea6ab86474400ab5c680167bd2b1b36f
Author: musketyr <vl...@orany.cz>
AuthorDate: Tue Jul 26 08:25:33 2022 +0200

    GROOVY-10704: retain order of inherited methods (port to 3_0_X)
    
    to ensure the generated trait classes are the same for the same source code
---
 src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
index 8bf4a46083..8ec525ebc9 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
@@ -35,8 +35,8 @@ import org.codehaus.groovy.transform.AbstractASTTransformation;
 
 import java.lang.reflect.Modifier;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -156,7 +156,7 @@ public class ClassNodeUtils {
     public static Map<String, MethodNode> getDeclaredMethodsFromSuper(ClassNode cNode) {
         ClassNode parent = cNode.getSuperClass();
         if (parent == null) {
-            return new HashMap<>();
+            return new LinkedHashMap<>();
         }
         return parent.getDeclaredMethodsMap();
     }
@@ -187,8 +187,8 @@ public class ClassNodeUtils {
      * @param cNode The ClassNode
      * @return A map of methods
      */
-    public static Map<String, MethodNode> getDeclaredMethodsFromInterfaces(ClassNode cNode) {
-        Map<String, MethodNode> methodsMap = new HashMap<>();
+    public static Map<String, MethodNode> getDeclaredMethodsFromInterfaces(final ClassNode cNode) {
+        Map<String, MethodNode> methodsMap = new LinkedHashMap<>();
         addDeclaredMethodsFromInterfaces(cNode, methodsMap);
         return methodsMap;
     }


[groovy] 04/04: GROOVY-10704: retain order of field-related methods

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

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

commit 777a128369f6972dddb68504bdd8549a3d0473c1
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Jul 27 14:08:49 2022 +1000

    GROOVY-10704: retain order of field-related methods
---
 src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
index 82b5d996e2..a396ab2ecc 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -183,9 +183,10 @@ public abstract class TraitComposer {
             cNode.addInterface(fieldHelperClassNode);
             // implementation of methods
             List<MethodNode> declaredMethods = new LinkedList<>();
+            int pos = 0; // keep direct getters at start but in declaration order
             for (MethodNode declaredMethod : fieldHelperClassNode.getAllDeclaredMethods()) {
                 if (declaredMethod.getName().endsWith(Traits.DIRECT_GETTER_SUFFIX)) {
-                    declaredMethods.add(0, declaredMethod);
+                    declaredMethods.add(pos++, declaredMethod);
                 } else {
                     declaredMethods.add(declaredMethod);
                 }
@@ -194,7 +195,7 @@ public abstract class TraitComposer {
             if (staticFieldHelperClassNode != null) {
                 for (MethodNode declaredMethod : staticFieldHelperClassNode.getAllDeclaredMethods()) {
                     if (declaredMethod.getName().endsWith(Traits.DIRECT_GETTER_SUFFIX)) {
-                        declaredMethods.add(0, declaredMethod);
+                        declaredMethods.add(pos++, declaredMethod);
                     } else {
                         declaredMethods.add(declaredMethod);
                     }


[groovy] 01/04: GROOVY-10705: ToString order bug for super properties (port to 3_0_X)

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

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

commit 19d7d4d70f17c0f08e039741740c61d3655864fd
Author: Paul King <pa...@asert.com.au>
AuthorDate: Tue Jul 26 22:29:12 2022 +1000

    GROOVY-10705: ToString order bug for super properties (port to 3_0_X)
---
 .../org/codehaus/groovy/transform/ToStringASTTransformation.java  | 8 ++++----
 .../org/codehaus/groovy/transform/ToStringTransformTest.groovy    | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index 80871a4273..faef3fcc2e 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -177,7 +177,7 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
         // def _result = new StringBuilder()
         final Expression result = localVarX("_result");
         body.addStatement(declS(result, ctorX(STRINGBUILDER_TYPE)));
-        List<ToStringElement> elements = new ArrayList<ToStringElement>();
+        List<ToStringElement> elements = new ArrayList<>();
 
         // def $toStringFirst = true
         final VariableExpression first = localVarX("$toStringFirst");
@@ -187,14 +187,14 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
         String className = (includePackage) ? cNode.getName() : cNode.getNameWithoutPackage();
         body.addStatement(appendS(result, constX(className + "(")));
 
-        Set<String> names = new HashSet<String>();
+        Set<String> names = new HashSet<>();
+        List<PropertyNode> list = getAllProperties(names, cNode, cNode, true, includeFields, allProperties, false, false, true, false, allNames, false);
         List<PropertyNode> superList;
         if (includeSuperProperties || includeSuperFields) {
             superList = getAllProperties(names, cNode, cNode.getSuperClass(), includeSuperProperties, includeSuperFields, allProperties, false, true, true, true, allNames, false);
         } else {
-            superList = new ArrayList<PropertyNode>();
+            superList = new ArrayList<>();
         }
-        List<PropertyNode> list = getAllProperties(names, cNode, cNode,true, includeFields, allProperties, false, false, true, false, allNames, false);
         list.addAll(superList);
 
         for (PropertyNode pNode : list) {
diff --git a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
index b014948a35..621ea98367 100644
--- a/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy
@@ -269,7 +269,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
             }
             new SportsPerson(first: 'John', last: 'Smith', title: 'Mr').toString()
         ''')
-        assert toString == "SportsPerson(title:Mr, cyclist:true, full:John Smith, golfer:false, senior:false, born:1975, adult:true)"
+        assert toString == "SportsPerson(title:Mr, golfer:false, adult:true, cyclist:true, full:John Smith, senior:false, born:1975)"
         // same again but with allProperties=false and with @CompileStatic for test coverage purposes
         toString = evaluate('''
             import groovy.transform.*
@@ -296,7 +296,7 @@ class ToStringTransformTest extends GroovyShellTestCase {
             }
             new SportsPerson(first: 'John', last: 'Smith', title: 'Mr').toString()
         ''')
-        assert toString == "SportsPerson(title:Mr, adult:true, cyclist:true, golfer:false)"
+        assert toString == "SportsPerson(title:Mr, golfer:false, adult:true, cyclist:true)"
     }
 
     void testSelfReference() {