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/26 23:11:57 UTC
[groovy] branch master updated: GROOVY-10705: ToString order bug for super properties (also handle pseudo properties)
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new e51c322208 GROOVY-10705: ToString order bug for super properties (also handle pseudo properties)
e51c322208 is described below
commit e51c3222084cb6ddb828aaf02f9ce6fee83c1578
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() {