mgroovy created GROOVY-8431: ------------------------------- Summary: toDebugString method as a core concept Key: GROOVY-8431 URL: https://issues.apache.org/jira/browse/GROOVY-8431 Project: Groovy Issue Type: Proposal Components: GEP, groovy-jdk Affects Versions: 3.x, 2.5.x Reporter: mgroovy
* Groovy should introduce a toDebugString method as a core concept, to separate debug to-string-conversion semantics from heavily oversubscribed standard Java Object#toString. * The power of this feature as a core concept lies in support to create ## Easy to use, human readable debug output of any object ## Creating debug output of objects owned by other objects (i.e. hierarchical debug output) * Adding this feature should be relatively simple, the challenge is to decide what features/parameters toDebugString should have, because this will be hard to change once the feature has been introduced. * The default implementation could ## Call the Java default Object#toString method ## Automatically create a reflection based output (performance will probably be bad for this, so it might be better to enable this behavior through an annotation) ## Returns something along the line of getClass().simpleName + '@' + System.identityHashcode(this) (though Object#toString is probably more useful) ## Fall back to the class' toString method (although in most cases it's most likely not what the user wants/expects) * An extension would be for an overloaded toDebugString to take an indentationLevel and indentationString parameter: {code}String toDebugString(int indentationLevel, String indentationString = '\t'){code} ** Implementations would be expected to indent the resulting String accordingly, which is very helpful for ### Complex objects which require a multi-line output to make sense of them in a debug log ### Outputting inner objects (e.g. a collection) owned by an object ** Groovy default implementation could be, to indent the result of calling toDebugString(), by scanning for newline sequences in the returned string * Questions: ## Is there a better name than the (relatively long) "toDebugString" ? *** toDebugString was suggested, since it is easy to discover, and its purpose should immediately clear ## Should the return type of toDebugString be GString instead of String ? *** This would allow for Groovy to process the objects embedded in the GString differently *** Having an additional GString toDebugGString() method might be an alternative ## Should there be additional parameters such as a terseness/verboseness parameter, which indicates how compact or verbose the generated debug string should be (implementations would be free to ignore this, of course) ? -- This message was sent by Atlassian JIRA (v6.4.14#64029)