langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java
changeset 29556 f539d3fc9d72
parent 29554 6d7957bd6866
child 32708 1a5b80de4f57
--- 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")