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:27:20 UTC
[groovy] branch GROOVY_4_0_X updated (f0c3dd5f03 -> 46bc5eedd7)
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a change to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
from f0c3dd5f03 GROOVY-10674: add test case
new 773db265dc GROOVY-10705: ToString order bug for super properties
new d246372074 GROOVY-10705: ToString order bug for super properties (also handle pseudo properties)
new e790d71922 GROOVY-10704: retain order of inherited methods
new 46bc5eedd7 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 | 6 +++---
.../java/org/codehaus/groovy/ast/tools/BeanUtils.java | 10 ++++++++--
.../org/codehaus/groovy/ast/tools/GeneralUtils.java | 2 +-
.../groovy/transform/ToStringASTTransformation.java | 4 ++--
.../codehaus/groovy/transform/trait/TraitComposer.java | 5 +++--
.../groovy/transform/ToStringTransformTest.groovy | 18 ++++++++++++++++--
6 files changed, 33 insertions(+), 12 deletions(-)
[groovy] 01/04: GROOVY-10705: ToString order bug for super 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_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 773db265dc517061276aca94575b8f232c9ffb19
Author: Paul King <pa...@asert.com.au>
AuthorDate: Tue Jul 26 22:29:12 2022 +1000
GROOVY-10705: ToString order bug for super properties
---
.../java/org/codehaus/groovy/transform/ToStringASTTransformation.java | 4 ++--
src/test/org/codehaus/groovy/transform/ToStringTransformTest.groovy | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index 759201e10d..d2c966573d 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -225,13 +225,13 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
body.addStatement(appendS(result, constX(className + delims[0])));
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 9625ab5cdf..f34b7c4357 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() {
[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_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 46bc5eedd76b60400b75b88f72e8810795ad4a8e
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 135e82e31e..e13142502e 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -179,9 +179,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);
}
@@ -190,7 +191,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] 03/04: GROOVY-10704: retain order of inherited 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_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit e790d7192280c952348417868b9ac0c6afda6c68
Author: musketyr <vl...@orany.cz>
AuthorDate: Tue Jul 26 08:25:33 2022 +0200
GROOVY-10704: retain order of inherited methods
to ensure the generated trait classes are the same for the same source code
---
src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java | 6 +++---
1 file changed, 3 insertions(+), 3 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 510888e91b..0e968f14e2 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
@@ -36,8 +36,8 @@ import java.lang.reflect.Modifier;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -165,7 +165,7 @@ public class ClassNodeUtils {
public static Map<String, MethodNode> getDeclaredMethodsFromSuper(final ClassNode cNode) {
ClassNode parent = cNode.getSuperClass();
if (parent == null) {
- return new HashMap<>();
+ return new LinkedHashMap<>();
}
return parent.getDeclaredMethodsMap();
}
@@ -197,7 +197,7 @@ public class ClassNodeUtils {
* @return A map of methods
*/
public static Map<String, MethodNode> getDeclaredMethodsFromInterfaces(final ClassNode cNode) {
- Map<String, MethodNode> methodsMap = new HashMap<>();
+ Map<String, MethodNode> methodsMap = new LinkedHashMap<>();
addDeclaredMethodsFromInterfaces(cNode, methodsMap);
return methodsMap;
}
[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_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit d2463720740b1dec1059483ea9ad0ad04acd4c60
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 19e0e0ab9e..ee4badd5fc 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/BeanUtils.java
@@ -78,7 +78,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));
}
@@ -97,8 +97,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 afd3c0786c..05817b5a98 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -535,7 +535,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 f34b7c4357..0cef941b6c 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() {