diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java
index cab4f18eb0b..53990dc74e7 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java
@@ -417,12 +417,15 @@ public class List extends AbstractCollection implements java.util.List
return last;
}
+ @SuppressWarnings("unchecked")
public List map(Function mapper) {
- ListBuffer buf = new ListBuffer<>();
- for (A a : this) {
- buf.add(mapper.apply(a));
+ if (nonEmpty()) {
+ List tail1 = tail.map(mapper);
+ Z head1 = mapper.apply(head);
+ if (tail1 != tail || head1 != head)
+ return tail1.prepend(head1);
}
- return buf.toList();
+ return (List)this;
}
@SuppressWarnings("unchecked")