InvokerHelper: Refactor: Implement Array formatting like Collection formatting
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/ff4c62ef Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/ff4c62ef Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/ff4c62ef Branch: refs/heads/master Commit: ff4c62ef5e843a235692d4ca262885e38996d289 Parents: 42427df Author: Thibault Kruse <thibault.kr...@gmx.de> Authored: Fri Aug 21 16:11:52 2015 +0200 Committer: paulk <pa...@asert.com.au> Committed: Fri Jul 29 08:36:41 2016 +1000 ---------------------------------------------------------------------- .../codehaus/groovy/runtime/InvokerHelper.java | 43 ++++++++++++++++---- 1 file changed, 36 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/ff4c62ef/src/main/org/codehaus/groovy/runtime/InvokerHelper.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/runtime/InvokerHelper.java b/src/main/org/codehaus/groovy/runtime/InvokerHelper.java index b27f0fb..632b79b 100644 --- a/src/main/org/codehaus/groovy/runtime/InvokerHelper.java +++ b/src/main/org/codehaus/groovy/runtime/InvokerHelper.java @@ -579,7 +579,7 @@ public class InvokerHelper { } if (arguments.getClass().isArray()) { if (arguments instanceof Object[]) { - return toArrayString((Object[]) arguments, maxSize, false); + return toArrayString((Object[]) arguments, verbose, maxSize, false); } if (arguments instanceof char[]) { return new String((char[]) arguments); @@ -796,16 +796,45 @@ public class InvokerHelper { * @return the string representation of the array */ public static String toArrayString(Object[] arguments) { - if (arguments == null) { + return toArrayString(arguments, false, -1, false); + } + + private static String toArrayString(Object[] collection, boolean verbose, int maxSize, boolean safe) { + if (collection == null) { return "null"; } - StringBuilder argBuf = new StringBuilder(arguments.length); + boolean first = true; + StringBuilder argBuf = new StringBuilder(collection.length); argBuf.append('['); - for (int i = 0; i < arguments.length; i++) { - if (i > 0) { + + for (Object item : collection) { + if (first) { + first = false; + } else { argBuf.append(", "); } - argBuf.append(format(arguments[i], false)); + if (maxSize != -1 && argBuf.length() > maxSize) { + argBuf.append("..."); + break; + } + if (item == collection) { + argBuf.append("(this Collection)"); + } else { + String str; + try { + str = format(item, verbose, sizeLeft(maxSize, argBuf)); + } catch (Exception ex) { + if (!safe) throw new GroovyRuntimeException(ex); + String hash; + try { + hash = Integer.toHexString(item.hashCode()); + } catch (Exception ignored) { + hash = "????"; + } + str = "<" + item.getClass().getName() + "@" + hash + ">"; + } + argBuf.append(str); + } } argBuf.append(']'); return argBuf.toString(); @@ -821,7 +850,7 @@ public class InvokerHelper { * @return the string representation of the array */ public static String toArrayString(Object[] arguments, int maxSize, boolean safe) { - return toListString(DefaultTypeTransformation.asCollection(arguments), maxSize, safe); + return toArrayString(arguments, false, maxSize, safe); } public static List createRange(Object from, Object to, boolean inclusive) {