OSDN Git Service

Fix bug: Arrays.deepToSting renders "[null]" as "null"; "[[]]" as "[]"; etc.
authorJoshua Bloch <jjb@google.com>
Wed, 15 Jul 2009 18:29:28 +0000 (11:29 -0700)
committerJoshua Bloch <jjb@google.com>
Wed, 15 Jul 2009 18:29:28 +0000 (11:29 -0700)
libcore/luni/src/main/java/java/util/Arrays.java
libcore/luni/src/test/java/org/apache/harmony/luni/tests/java/util/ArraysTest.java

index 6af24b0..d479945 100644 (file)
@@ -2912,8 +2912,14 @@ public class Arrays {
      * @since Android 1.0
      */
     public static String deepToString(Object[] array) {
+        // Special case null to prevent NPE
+        if (array == null) {
+            return "null"; //$NON-NLS-1$
+        }
         // delegate this to the recursive method
-        return deepToStringImpl(array, new Object[] { array }, null);
+        StringBuilder buf = new StringBuilder(2 + array.length * 5);
+        deepToStringImpl(array, new Object[] { array }, buf);
+        return buf.toString();
     }
 
     /**
@@ -2932,18 +2938,13 @@ public class Arrays {
      * @return the result.
      * @see #deepToString(Object[])
      */
-    private static String deepToStringImpl(Object[] array, Object[] origArrays,
+    private static void deepToStringImpl(Object[] array, Object[] origArrays,
             StringBuilder sb) {
         if (array == null) {
-            return "null"; //$NON-NLS-1$
-        }
-        if (array.length == 0) {
-            return "[]"; //$NON-NLS-1$
+            sb.append("null"); //$NON-NLS-1$
+            return;
         }
 
-        if (sb == null) {
-            sb = new StringBuilder(2 + array.length * 5);
-        }
         sb.append('[');
 
         for (int i = 0; i < array.length; i++) {
@@ -3006,7 +3007,6 @@ public class Arrays {
             }
         }
         sb.append(']');
-        return sb.toString();
     }
 
     /**
index 3b673f3..b26dd43 100644 (file)
@@ -468,6 +468,39 @@ public class ArraysTest extends TestCase {
             fail("No NPE");
         } catch (NullPointerException e) {}
     }
+
+    /**
+     * @tests java.util.Arrays#deepToString(Object[])
+     * @bug 1452542
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Tests fix for Android bug 1452542",
+        method = "deepToString",
+        args = {java.lang.Object[].class}
+    )
+    public void test_deepToStringNestedEmptyArray() {
+        Object[][] foo = new Object[1][];
+        foo[0] = new Object[0];
+        assertEquals("[[]]", Arrays.deepToString(foo));
+    }
+
+    /**
+     * @tests java.util.Arrays#deepToString(Object[])
+     * @bug 1452542
+     */
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        notes = "Tests fix for Android bug 1452542",
+        method = "deepToString",
+        args = {java.lang.Object[].class}
+    )
+    public void test_deepToStringNestedNullArray() {
+        Object[][] foo = new Object[1][];
+        assertEquals("[null]", Arrays.deepToString(foo));
+    }
+
+
     @TestTargetNew(
         level = TestLevel.COMPLETE,
         notes = "",