Skip to content

Commit e07b78a

Browse files
committed
fix for GRAILS-8072 "Improve default toString() output for domain classes"
1 parent 024063d commit e07b78a

File tree

2 files changed

+7
-10
lines changed

2 files changed

+7
-10
lines changed

grails-core/src/main/groovy/org/codehaus/groovy/grails/compiler/injection/DefaultGrailsDomainClassInjector.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,7 @@
3131
import org.codehaus.groovy.ast.MethodNode;
3232
import org.codehaus.groovy.ast.Parameter;
3333
import org.codehaus.groovy.ast.PropertyNode;
34-
import org.codehaus.groovy.ast.expr.ClassExpression;
35-
import org.codehaus.groovy.ast.expr.ConstantExpression;
36-
import org.codehaus.groovy.ast.expr.Expression;
37-
import org.codehaus.groovy.ast.expr.GStringExpression;
38-
import org.codehaus.groovy.ast.expr.ListExpression;
39-
import org.codehaus.groovy.ast.expr.MapEntryExpression;
40-
import org.codehaus.groovy.ast.expr.MapExpression;
41-
import org.codehaus.groovy.ast.expr.VariableExpression;
34+
import org.codehaus.groovy.ast.expr.*;
4235
import org.codehaus.groovy.ast.stmt.ReturnStatement;
4336
import org.codehaus.groovy.ast.stmt.Statement;
4437
import org.codehaus.groovy.classgen.GeneratorContext;
@@ -213,9 +206,10 @@ private void injectToStringMethod(ClassNode classNode) {
213206
classNode, "toString", classesWithInjectedToString);
214207

215208
if (!hasToString && !isEnum(classNode)) {
216-
GStringExpression ge = new GStringExpression(classNode.getName() + " : ${id}");
209+
GStringExpression ge = new GStringExpression(classNode.getName() + " : ${id ? id : '(unsaved)'}");
217210
ge.addString(new ConstantExpression(classNode.getName() + " : "));
218-
ge.addValue(new VariableExpression("id"));
211+
VariableExpression idVariable = new VariableExpression("id");
212+
ge.addValue(new TernaryExpression(new BooleanExpression(idVariable), idVariable, new ConstantExpression("(unsaved)")));
219213
Statement s = new ReturnStatement(ge);
220214
MethodNode mn = new MethodNode("toString", Modifier.PUBLIC, new ClassNode(String.class), new Parameter[0], new ClassNode[0], s);
221215
classNode.addMethod(mn);

grails-test-suite-uber/src/test/groovy/org/codehaus/groovy/grails/plugins/DomainClassGrailsPluginTests.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ class Parent2 {
7070

7171
void testToString() {
7272
def instance = appCtx.getBean("ChildDomainClass").newInstance()
73+
74+
assertEquals('Child : (unsaved)', instance.toString())
75+
7376
instance.id = 1
7477
assertEquals('Child : 1', instance.toString())
7578

0 commit comments

Comments
 (0)