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) {

Reply via email to