Hi,

This makes AbstractCollection.toString() more robust by only using the
Iterator (in case some subclass has a strange or expensive size()
implementation) and deals with collections directly containing
themselves.

2006-02-02  Mark Wielaard  <[EMAIL PROTECTED]>

    Fixes bug #25769 reported by Artemus Harper <[EMAIL PROTECTED]>
    * java/util/AbstractCollection.java (toString): Only use Iterator,
    check whether collection contains itself.

A Mauve test was added that passes with this patch.

Committed,

Mark
Index: java/util/AbstractCollection.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/util/AbstractCollection.java,v
retrieving revision 1.17
diff -u -r1.17 AbstractCollection.java
--- java/util/AbstractCollection.java	2 Jul 2005 20:32:41 -0000	1.17
+++ java/util/AbstractCollection.java	2 Feb 2006 13:23:56 -0000
@@ -423,7 +423,9 @@
    * of the form "[a, b, ...]" where a and b etc are the results of calling
    * toString on the elements of the collection. This implementation obtains an
    * Iterator over the Collection and adds each element to a StringBuffer as it
-   * is returned by the iterator.
+   * is returned by the iterator. "<this>" is inserted when the collection
+   * contains itself (only works for direct containment, not for collections
+   * inside collections).
    *
    * @return a String representation of the Collection
    */
@@ -431,10 +433,16 @@
   {
     Iterator itr = iterator();
     StringBuffer r = new StringBuffer("[");
-    for (int pos = size(); pos > 0; pos--)
+    boolean hasNext = itr.hasNext();
+    while (hasNext)
       {
-        r.append(itr.next());
-        if (pos > 1)
+        Object o = itr.next();
+	if (o == this)
+	  r.append("<this>");
+	else
+	  r.append(o);
+	hasNext = itr.hasNext();
+        if (hasNext)
           r.append(", ");
       }
     r.append("]");

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to