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 1ad2fce9e4 GROOVY-11814: ToString transform should be enum aware
1ad2fce9e4 is described below
commit 1ad2fce9e490e9ee1fc2172f6ea7cdf5103c082d
Author: Paul King <[email protected]>
AuthorDate: Tue Dec 2 11:19:51 2025 +1000
GROOVY-11814: ToString transform should be enum aware
---
.../groovy/transform/ToStringASTTransformation.java | 13 ++++++++++---
.../transform/CanonicalComponentsTransformTest.groovy | 2 +-
.../groovy/transform/ToStringTransformTest.groovy | 16 ++++++++++++++++
3 files changed, 27 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 c1ee64c85f..bc8424be19 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -54,6 +54,7 @@ import static
org.apache.groovy.ast.tools.MethodCallUtils.toStringX;
import static org.codehaus.groovy.ast.ClassHelper.make;
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.callSuperX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.callThisX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
@@ -225,9 +226,15 @@ public class ToStringASTTransformation extends
AbstractASTTransformation {
final VariableExpression first = localVarX("$toStringFirst");
body.addStatement(declS(first, constX(Boolean.TRUE)));
- // <class_name>(
- String className = (includePackage) ? cNode.getName() :
cNode.getNameWithoutPackage();
- body.addStatement(appendS(result, constX(className + delims[0])));
+ if (cNode.isEnum()) {
+ // <enum_name>(
+ body.addStatement(appendS(result, callThisX("name")));
+ body.addStatement(appendS(result, constX(delims[0])));
+ } else {
+ // <class_name>(
+ String className = (includePackage) ? cNode.getName() :
cNode.getNameWithoutPackage();
+ body.addStatement(appendS(result, constX(className + delims[0])));
+ }
Set<String> names = new HashSet<>();
boolean includeProperties = true, includePseudoGetters =
allProperties, includePseudoSetters = false, skipReadOnly = false,
includeStatic = false;
diff --git
a/src/test/groovy/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
b/src/test/groovy/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
index f06958c0c7..cac648b9a7 100644
---
a/src/test/groovy/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
+++
b/src/test/groovy/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
@@ -564,7 +564,7 @@ class CanonicalComponentsTransformTest extends
GroovyShellTestCase {
// GROOVY-4570
void testToStringForEnums() {
- assert Color.PURPLE.toString() ==
'org.codehaus.groovy.transform.Color(r:255, g:0, b:255)'
+ assert Color.PURPLE.toString() == 'PURPLE(r:255, g:0, b:255)'
}
void testCustomCopyConstructor_GROOVY7016() {
diff --git
a/src/test/groovy/org/codehaus/groovy/transform/ToStringTransformTest.groovy
b/src/test/groovy/org/codehaus/groovy/transform/ToStringTransformTest.groovy
index 0cef941b6c..f7fc61e60e 100644
--- a/src/test/groovy/org/codehaus/groovy/transform/ToStringTransformTest.groovy
+++ b/src/test/groovy/org/codehaus/groovy/transform/ToStringTransformTest.groovy
@@ -543,4 +543,20 @@ class ToStringTransformTest extends GroovyShellTestCase {
'''
}
+ // GROOVY-11814
+ void testToStringOnEnum() {
+ assertScript '''
+ import groovy.transform.*
+
+ @ToString(includeNames=true)
+ enum Foo {
+ Bar(prop: 'val1'), Baz(prop: 'val2')
+ final String prop
+ }
+
+ assert Foo.Bar.toString() == 'Bar(prop:val1)'
+ assert Foo.Baz.toString() == 'Baz(prop:val2)'
+ '''
+ }
+
}