Index: src/test/groovy/GroovyMethodsTest.groovy =================================================================== --- src/test/groovy/GroovyMethodsTest.groovy (revision 15221) +++ src/test/groovy/GroovyMethodsTest.groovy Wed Feb 04 23:13:39 EST 2009 @@ -720,7 +720,7 @@ assert x.sum() == 10 assert x.size() == 4 assert x.class == WackyList - def y = x.findAll{ it % 2 == 1 } + def y = x.findAll{ it % 2 == 1 } as WackyList assert y.size() == 2 assert y.class == WackyList } Index: src/test/groovy/vm5/GroovyMethodsTest.groovy =================================================================== --- src/test/groovy/vm5/GroovyMethodsTest.groovy (revision 15221) +++ src/test/groovy/vm5/GroovyMethodsTest.groovy Wed Feb 04 23:17:57 EST 2009 @@ -92,10 +92,10 @@ def q = [1, 2, 3, 4, 5, 6, 7, 8, 9] as LinkedBlockingQueue assert q.size() == 9 assert q.class == LinkedBlockingQueue - q += 10 + q = (q + 10) as LinkedBlockingQueue assert q.size() == 10 assert q.class == LinkedBlockingQueue - def r = q.findAll{ it % 2 == 0 } + def r = q.findAll{ it % 2 == 0 } as LinkedBlockingQueue assert r.size() == 5 assert r.class == LinkedBlockingQueue def s = ((r as LinkedList) - [4, 6]) as LinkedBlockingQueue Index: src/main/org/codehaus/groovy/runtime/DefaultGroovyMethodsSupport.java =================================================================== --- src/main/org/codehaus/groovy/runtime/DefaultGroovyMethodsSupport.java (revision 15221) +++ src/main/org/codehaus/groovy/runtime/DefaultGroovyMethodsSupport.java Wed Feb 04 16:01:30 EST 2009 @@ -115,8 +115,6 @@ protected static Collection cloneSimilarCollection(Collection orig, int newCapacity) { Collection answer = (Collection) cloneObject(orig); if (answer != null) return answer; - answer = cloneCollectionFromClass(orig); - if (answer != null) return answer; // fall back to creation answer = createSimilarCollection(orig, newCapacity); @@ -153,9 +151,6 @@ if (orig instanceof List) { return createSimilarList((List) orig, newCapacity); } - Collection answer = createCollectionFromClass(orig); - if (answer != null) return answer; - if (orig instanceof Queue) { return new LinkedList(); } @@ -163,26 +158,19 @@ } protected static List createSimilarList(List orig, int newCapacity) { - List answer = (List) createCollectionFromClass(orig); - if (answer != null) return answer; - if (orig instanceof LinkedList) { - answer = new LinkedList(); - } else if (orig instanceof Stack) { - answer = new Stack(); - } else if (orig instanceof Vector) { - answer = new Vector(); - } else { - answer = new ArrayList(newCapacity); + return new LinkedList(); } - return answer; + if (orig instanceof Stack) { + return new Stack(); - } + } + if (orig instanceof Vector) { + return new Vector(); + } + return new ArrayList(newCapacity); + } protected static Set createSimilarSet(Set orig) { - Set answer = (Set) createCollectionFromClass(orig); - if (answer != null) return answer; - - // fall back to some defaults if (orig instanceof SortedSet) { return new TreeSet(); } @@ -193,10 +181,6 @@ } protected static Map createSimilarMap(Map orig) { - Map answer = createMapFromClass(orig); - if (answer != null) return answer; - - // fall back to some defaults if (orig instanceof SortedMap) { return new TreeMap(); } @@ -209,75 +193,9 @@ return new LinkedHashMap(); } - private static Collection createCollectionFromClass(Collection orig) { - if (orig instanceof AbstractCollection) { - try { - final Constructor constructor = orig.getClass().getConstructor(); - return (Collection) constructor.newInstance(); - } catch (Exception e) { - // ignore - } - } - return null; - } - - private static Collection cloneCollectionFromClass(Collection orig) { - if (orig instanceof AbstractCollection) { - try { - final Constructor constructor = orig.getClass().getConstructor(Collection.class); - return (Collection) constructor.newInstance(orig); - } catch (Exception e) { - // ignore - } - try { - final Constructor constructor = orig.getClass().getConstructor(); - final Collection result = (Collection) constructor.newInstance(); - result.addAll(orig); - return result; - } catch (Exception e) { - // ignore - } - } - return null; - } - - private static Map createMapFromClass(Map orig) { - if ((orig instanceof AbstractMap) || (orig instanceof Hashtable)) { - try { - final Constructor constructor = orig.getClass().getConstructor(); - return (Map) constructor.newInstance(); - } catch (Exception e) { - // ignore - } - } - return null; - } - - private static Map cloneMapFromClass(Map orig) { - if ((orig instanceof AbstractMap) || (orig instanceof Hashtable)) { - try { - final Constructor constructor = orig.getClass().getConstructor(Map.class); - return (Map) constructor.newInstance(orig); - } catch (Exception e) { - // ignore - } - try { - final Constructor constructor = orig.getClass().getConstructor(); - final Map result = (Map) constructor.newInstance(); - result.putAll(orig); - return result; - } catch (Exception e) { - // ignore - } - } - return null; - } - protected static Map cloneSimilarMap(Map orig) { Map answer = (Map) cloneObject(orig); if (answer != null) return answer; - answer = cloneMapFromClass(orig); - if (answer != null) return answer; // fall back to some defaults if (orig instanceof TreeMap)