summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library/scala/collection/generic/GenericCompanion.scala10
-rw-r--r--src/library/scala/collection/immutable/ListMap.scala4
-rw-r--r--src/library/scala/collection/immutable/ListSet.scala4
-rw-r--r--src/library/scala/collection/immutable/Queue.scala4
4 files changed, 15 insertions, 7 deletions
diff --git a/src/library/scala/collection/generic/GenericCompanion.scala b/src/library/scala/collection/generic/GenericCompanion.scala
index cfcd2a94cf..2d2111f76d 100644
--- a/src/library/scala/collection/generic/GenericCompanion.scala
+++ b/src/library/scala/collection/generic/GenericCompanion.scala
@@ -43,9 +43,11 @@ abstract class GenericCompanion[+CC[X] <: Traversable[X]] {
* @return a new $coll with elements `elems`
*/
def apply[A](elems: A*): CC[A] = {
- val b = newBuilder[A]
- b ++= elems
- b.result
+ if (elems.isEmpty) empty[A]
+ else {
+ val b = newBuilder[A]
+ b ++= elems
+ b.result
+ }
}
}
-
diff --git a/src/library/scala/collection/immutable/ListMap.scala b/src/library/scala/collection/immutable/ListMap.scala
index 5fced699f3..9ce5410546 100644
--- a/src/library/scala/collection/immutable/ListMap.scala
+++ b/src/library/scala/collection/immutable/ListMap.scala
@@ -23,7 +23,9 @@ object ListMap extends ImmutableMapFactory[ListMap] {
/** $mapCanBuildFromInfo */
implicit def canBuildFrom[A, B]: CanBuildFrom[Coll, (A, B), ListMap[A, B]] =
new MapCanBuildFrom[A, B]
- def empty[A, B]: ListMap[A, B] = new ListMap
+ def empty[A, B]: ListMap[A, B] = EmptyListMap.asInstanceOf[ListMap[A, B]]
+
+ private object EmptyListMap extends ListMap[Any, Nothing] { }
}
/** This class implements immutable maps using a list-based data structure.
diff --git a/src/library/scala/collection/immutable/ListSet.scala b/src/library/scala/collection/immutable/ListSet.scala
index 8547ba195b..ec0f2ff5a1 100644
--- a/src/library/scala/collection/immutable/ListSet.scala
+++ b/src/library/scala/collection/immutable/ListSet.scala
@@ -23,9 +23,11 @@ import mutable.{ ListBuffer, Builder }
object ListSet extends ImmutableSetFactory[ListSet] {
/** setCanBuildFromInfo */
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ListSet[A]] = setCanBuildFrom[A]
- override def empty[A] = new ListSet[A]
+ override def empty[A] = EmptyListSet.asInstanceOf[ListSet[A]]
override def newBuilder[A]: Builder[A, ListSet[A]] = new ListSetBuilder[A]
+ private object EmptyListSet extends ListSet[Any] { }
+
/** A custom builder because forgetfully adding elements one at
* a time to a list backed set puts the "squared" in N^2. There is a
* temporary space cost, but it's improbable a list backed set could
diff --git a/src/library/scala/collection/immutable/Queue.scala b/src/library/scala/collection/immutable/Queue.scala
index bd2f27e57e..3e0181f1a4 100644
--- a/src/library/scala/collection/immutable/Queue.scala
+++ b/src/library/scala/collection/immutable/Queue.scala
@@ -146,9 +146,11 @@ object Queue extends SeqFactory[Queue] {
/** $genericCanBuildFromInfo */
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Queue[A]] = new GenericCanBuildFrom[A]
def newBuilder[A]: Builder[A, Queue[A]] = new ListBuffer[A] mapResult (x => new Queue[A](Nil, x.toList))
- override def empty[A]: Queue[A] = new Queue[A](Nil, Nil)
+ override def empty[A]: Queue[A] = EmptyQueue.asInstanceOf[Queue[A]]
override def apply[A](xs: A*): Queue[A] = new Queue[A](Nil, xs.toList)
+ private object EmptyQueue extends Queue[Nothing](Nil, Nil) { }
+
@deprecated("Use Queue.empty instead")
val Empty: Queue[Nothing] = Queue()
}