8075509: List.map should return itself if list is unchanged
authormcimadamore
Thu, 19 Mar 2015 16:23:21 +0000
changeset 29556 f539d3fc9d72
parent 29555 71f15ff4b409
child 29557 17efac395638
8075509: List.map should return itself if list is unchanged Summary: Fix List.map to match semantics of old Type.map Reviewed-by: jlahoda
langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java	Thu Mar 19 11:40:47 2015 +0000
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java	Thu Mar 19 16:23:21 2015 +0000
@@ -417,12 +417,15 @@
         return last;
     }
 
+    @SuppressWarnings("unchecked")
     public <Z> List<Z> map(Function<A, Z> mapper) {
-        ListBuffer<Z> buf = new ListBuffer<>();
-        for (A a : this) {
-            buf.add(mapper.apply(a));
+        if (nonEmpty()) {
+            List<Z> tail1 = tail.map(mapper);
+            Z head1 = mapper.apply(head);
+            if (tail1 != tail || head1 != head)
+                return tail1.prepend(head1);
         }
-        return buf.toList();
+        return (List<Z>)this;
     }
 
     @SuppressWarnings("unchecked")