From 0a7f94abfe62db3bddac869887bd6f200595a89f Mon Sep 17 00:00:00 2001
From: Joel Dice <git@seibutsu.mailsnare.net>
Date: Tue, 4 Aug 2009 17:36:25 -0600
Subject: [PATCH] add java.util.Collection.toArray()

---
 classpath/java/util/AbstractCollection.java |  4 ++++
 classpath/java/util/ArrayList.java          |  4 ----
 classpath/java/util/Arrays.java             |  4 ++++
 classpath/java/util/Collection.java         |  2 ++
 classpath/java/util/Collections.java        | 11 +++++++++--
 classpath/java/util/HashMap.java            | 12 ++++++++++++
 classpath/java/util/HashSet.java            |  6 +-----
 classpath/java/util/LinkedList.java         |  4 ----
 classpath/java/util/TreeMap.java            |  8 ++++++++
 classpath/java/util/Vector.java             |  4 ----
 10 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/classpath/java/util/AbstractCollection.java b/classpath/java/util/AbstractCollection.java
index 5093b9a612..81500614ec 100644
--- a/classpath/java/util/AbstractCollection.java
+++ b/classpath/java/util/AbstractCollection.java
@@ -62,6 +62,10 @@ public abstract class AbstractCollection<T> implements Collection<T> {
 
   public abstract int size();
 
+  public Object[] toArray() {
+    return toArray(new Object[size()]);      
+  }
+
   public <S> S[] toArray(S[] array) {
     return Collections.toArray(this, array);
   }
diff --git a/classpath/java/util/ArrayList.java b/classpath/java/util/ArrayList.java
index 22726cb4fa..31e3dd5f58 100644
--- a/classpath/java/util/ArrayList.java
+++ b/classpath/java/util/ArrayList.java
@@ -159,10 +159,6 @@ public class ArrayList<T> extends AbstractList<T> {
     return size() == 0;
   }
 
-  public <S> S[] toArray(S[] a) {
-    return Collections.toArray(this, a);
-  }
-
   public void clear() {
     array = null;
     size = 0;
diff --git a/classpath/java/util/Arrays.java b/classpath/java/util/Arrays.java
index 219612f040..129b5f5528 100644
--- a/classpath/java/util/Arrays.java
+++ b/classpath/java/util/Arrays.java
@@ -81,6 +81,10 @@ public class Arrays {
         throw new UnsupportedOperationException();
       }
 
+      public Object[] toArray() {
+        return toArray(new Object[size()]);      
+      }
+
       public <S> S[] toArray(S[] a) {
         return (S[])array;
       }
diff --git a/classpath/java/util/Collection.java b/classpath/java/util/Collection.java
index aa8eee6d89..77fb9c8d3e 100644
--- a/classpath/java/util/Collection.java
+++ b/classpath/java/util/Collection.java
@@ -23,6 +23,8 @@ public interface Collection<T> extends Iterable<T> {
 
   public boolean remove(Object element);
 
+  public Object[] toArray();
+
   public <S> S[] toArray(S[] array);
 
   public void clear();
diff --git a/classpath/java/util/Collections.java b/classpath/java/util/Collections.java
index 70b6e03a48..00facfaa0e 100644
--- a/classpath/java/util/Collections.java
+++ b/classpath/java/util/Collections.java
@@ -129,6 +129,10 @@ public class Collections {
       synchronized (lock) { return collection.remove((T)e); }
     }
 
+    public Object[] toArray() {
+      return toArray(new Object[size()]);      
+    }
+
     public <T> T[] toArray(T[] array) {
       synchronized (lock) { return collection.toArray(array); }
     }
@@ -319,10 +323,13 @@ public class Collections {
       return inner.size();
     }
 
+    public Object[] toArray() {
+      return toArray(new Object[size()]);      
+    }
+
     public <S> S[] toArray(S[] array) {
       return inner.toArray(array);
-    }
-          
+    }     
   }
   
   public static <T> Set<T> unmodifiableSet(Set<T> hs) {
diff --git a/classpath/java/util/HashMap.java b/classpath/java/util/HashMap.java
index 2bc46b5e9d..ecae9a01f1 100644
--- a/classpath/java/util/HashMap.java
+++ b/classpath/java/util/HashMap.java
@@ -334,6 +334,10 @@ public class HashMap<K, V> implements Map<K, V> {
       return removeCell(e.getKey()) != null;
     }
 
+    public Object[] toArray() {
+      return toArray(new Object[size()]);      
+    }
+
     public <T> T[] toArray(T[] array) {
       return Collections.toArray(this, array);      
     }
@@ -374,6 +378,10 @@ public class HashMap<K, V> implements Map<K, V> {
       return removeCell(key) != null;
     }
 
+    public Object[] toArray() {
+      return toArray(new Object[size()]);      
+    }
+
     public <T> T[] toArray(T[] array) {
       return Collections.toArray(this, array);      
     }
@@ -412,6 +420,10 @@ public class HashMap<K, V> implements Map<K, V> {
       throw new UnsupportedOperationException();
     }
 
+    public Object[] toArray() {
+      return toArray(new Object[size()]);      
+    }
+
     public <T> T[] toArray(T[] array) {
       return Collections.toArray(this, array);      
     }
diff --git a/classpath/java/util/HashSet.java b/classpath/java/util/HashSet.java
index b89c317a35..aa86f47df5 100644
--- a/classpath/java/util/HashSet.java
+++ b/classpath/java/util/HashSet.java
@@ -10,7 +10,7 @@
 
 package java.util;
 
-public class HashSet<T> implements Set<T> {
+public class HashSet<T> extends AbstractSet<T> implements Set<T> {
   private static final Object Value = new Object();
 
   private final HashMap<T, Object> map;
@@ -54,10 +54,6 @@ public class HashSet<T> implements Set<T> {
     return map.remove(element) != Value;
   }
 
-  public <T> T[] toArray(T[] array) {
-    return Collections.toArray(this, array);
-  }
-
   public void clear() {
     map.clear();
   }
diff --git a/classpath/java/util/LinkedList.java b/classpath/java/util/LinkedList.java
index 49164d87fe..a437534363 100644
--- a/classpath/java/util/LinkedList.java
+++ b/classpath/java/util/LinkedList.java
@@ -85,10 +85,6 @@ public class LinkedList<T> extends AbstractSequentialList<T> {
     }
   }
 
-  public <S> S[] toArray(S[] a) {
-    return Collections.toArray(this, a);
-  }
-
   public int size() {
     return size;
   }
diff --git a/classpath/java/util/TreeMap.java b/classpath/java/util/TreeMap.java
index 99a7860e17..686e9ffda3 100644
--- a/classpath/java/util/TreeMap.java
+++ b/classpath/java/util/TreeMap.java
@@ -144,6 +144,10 @@ public class TreeMap<K,V> implements Map<K,V> {
       return set.removeAndReturn(new MyEntry(key, null)) != null;
     }
 
+    public Object[] toArray() {
+      return toArray(new Object[size()]);      
+    }
+
     public <T> T[] toArray(T[] array) {
       return Collections.toArray(this, array);      
     }
@@ -182,6 +186,10 @@ public class TreeMap<K,V> implements Map<K,V> {
       throw new UnsupportedOperationException();
     }
 
+    public Object[] toArray() {
+      return toArray(new Object[size()]);      
+    }
+
     public <T> T[] toArray(T[] array) {
       return Collections.toArray(this, array);      
     }
diff --git a/classpath/java/util/Vector.java b/classpath/java/util/Vector.java
index 99b3dd7138..4364c58281 100644
--- a/classpath/java/util/Vector.java
+++ b/classpath/java/util/Vector.java
@@ -77,10 +77,6 @@ public class Vector<T> extends AbstractList<T> {
     return list.isEmpty();
   }
 
-  public synchronized <S> S[] toArray(S[] a) {
-    return list.toArray(a);
-  }
-
   public void removeElementAt(int index) {
     remove(index);
   }