From 54b26beb2c9a82fc5a1b3a66f11ed763bfad39be Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Mon, 4 Jul 2011 04:55:04 +0000 Subject: Discovered another impressive source of unneces... Discovered another impressive source of unnecessary garbage is every collection creating a new GenericCanBuildFrom for every map ever performed. They can all use the same one: they all have the same implementation. It looks like tiark had already figured this out and done it for Vector: I followed with the other fifty. I really haven't the least idea who to have review most things. No review. --- src/library/scala/collection/GenIterable.scala | 2 +- src/library/scala/collection/GenSeq.scala | 2 +- src/library/scala/collection/GenSet.scala | 2 +- src/library/scala/collection/GenTraversable.scala | 2 +- src/library/scala/collection/IndexedSeq.scala | 2 +- src/library/scala/collection/Iterable.scala | 2 +- src/library/scala/collection/LinearSeq.scala | 2 +- src/library/scala/collection/Seq.scala | 2 +- src/library/scala/collection/Traversable.scala | 2 +- src/library/scala/collection/generic/GenTraversableFactory.scala | 6 ++++++ .../scala/collection/immutable/GenIterable.scala.disabled | 2 +- src/library/scala/collection/immutable/GenSeq.scala.disabled | 2 +- src/library/scala/collection/immutable/GenSet.scala.disabled | 2 +- .../scala/collection/immutable/GenTraversable.scala.disabled | 2 +- src/library/scala/collection/immutable/IndexedSeq.scala | 2 +- src/library/scala/collection/immutable/Iterable.scala | 2 +- src/library/scala/collection/immutable/LinearSeq.scala | 2 +- src/library/scala/collection/immutable/List.scala | 3 ++- src/library/scala/collection/immutable/Queue.scala | 2 +- src/library/scala/collection/immutable/Seq.scala | 2 +- src/library/scala/collection/immutable/Stack.scala | 2 +- src/library/scala/collection/immutable/Traversable.scala | 2 +- src/library/scala/collection/immutable/Vector.scala | 9 +-------- src/library/scala/collection/mutable/ArrayBuffer.scala | 2 +- src/library/scala/collection/mutable/ArraySeq.scala | 2 +- src/library/scala/collection/mutable/ArrayStack.scala | 2 +- src/library/scala/collection/mutable/Buffer.scala | 2 +- src/library/scala/collection/mutable/DoubleLinkedList.scala | 2 +- src/library/scala/collection/mutable/GenIterable.scala.disabled | 2 +- src/library/scala/collection/mutable/GenSeq.scala.disabled | 2 +- src/library/scala/collection/mutable/GenSet.scala.disabled | 2 +- .../scala/collection/mutable/GenTraversable.scala.disabled | 2 +- src/library/scala/collection/mutable/IndexedSeq.scala | 2 +- src/library/scala/collection/mutable/Iterable.scala | 2 +- src/library/scala/collection/mutable/LinearSeq.scala | 2 +- src/library/scala/collection/mutable/LinkedList.scala | 2 +- src/library/scala/collection/mutable/ListBuffer.scala | 2 +- src/library/scala/collection/mutable/MutableList.scala | 2 +- src/library/scala/collection/mutable/Queue.scala | 2 +- src/library/scala/collection/mutable/ResizableArray.scala | 2 +- src/library/scala/collection/mutable/Seq.scala | 2 +- src/library/scala/collection/mutable/Stack.scala | 2 +- src/library/scala/collection/mutable/Traversable.scala | 2 +- 43 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/library/scala/collection/GenIterable.scala b/src/library/scala/collection/GenIterable.scala index 9d25f21c38..6631a4cdd8 100644 --- a/src/library/scala/collection/GenIterable.scala +++ b/src/library/scala/collection/GenIterable.scala @@ -30,7 +30,7 @@ extends GenIterableLike[A, GenIterable[A]] object GenIterable extends GenTraversableFactory[GenIterable] { - implicit def canBuildFrom[A] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A] = Iterable.newBuilder } diff --git a/src/library/scala/collection/GenSeq.scala b/src/library/scala/collection/GenSeq.scala index 9a7ee9890e..20aa850223 100644 --- a/src/library/scala/collection/GenSeq.scala +++ b/src/library/scala/collection/GenSeq.scala @@ -31,6 +31,6 @@ extends GenSeqLike[A, GenSeq[A]] object GenSeq extends GenTraversableFactory[GenSeq] { - implicit def canBuildFrom[A] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A] = Seq.newBuilder } diff --git a/src/library/scala/collection/GenSet.scala b/src/library/scala/collection/GenSet.scala index fdf6d1edb2..aa158876b3 100644 --- a/src/library/scala/collection/GenSet.scala +++ b/src/library/scala/collection/GenSet.scala @@ -31,7 +31,7 @@ extends GenSetLike[A, GenSet[A]] object GenSet extends GenTraversableFactory[GenSet] { - implicit def canBuildFrom[A] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A] = Set.newBuilder } diff --git a/src/library/scala/collection/GenTraversable.scala b/src/library/scala/collection/GenTraversable.scala index 8e6ab50f1a..dac3fa9f08 100644 --- a/src/library/scala/collection/GenTraversable.scala +++ b/src/library/scala/collection/GenTraversable.scala @@ -32,7 +32,7 @@ extends GenTraversableLike[A, GenTraversable[A]] object GenTraversable extends GenTraversableFactory[GenTraversable] { - implicit def canBuildFrom[A] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A] = Traversable.newBuilder } diff --git a/src/library/scala/collection/IndexedSeq.scala b/src/library/scala/collection/IndexedSeq.scala index d7a68d38b2..13c48ec144 100644 --- a/src/library/scala/collection/IndexedSeq.scala +++ b/src/library/scala/collection/IndexedSeq.scala @@ -28,7 +28,7 @@ trait IndexedSeq[+A] extends Seq[A] * @define Coll IndexedSeq */ object IndexedSeq extends SeqFactory[IndexedSeq] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, IndexedSeq[A]] = immutable.IndexedSeq.newBuilder[A] } diff --git a/src/library/scala/collection/Iterable.scala b/src/library/scala/collection/Iterable.scala index 03a8302116..0381da0841 100644 --- a/src/library/scala/collection/Iterable.scala +++ b/src/library/scala/collection/Iterable.scala @@ -45,7 +45,7 @@ trait Iterable[+A] extends Traversable[A] object Iterable extends TraversableFactory[Iterable] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Iterable[A]] = immutable.Iterable.newBuilder[A] diff --git a/src/library/scala/collection/LinearSeq.scala b/src/library/scala/collection/LinearSeq.scala index f1fa91907f..dfa0a0ed68 100644 --- a/src/library/scala/collection/LinearSeq.scala +++ b/src/library/scala/collection/LinearSeq.scala @@ -28,6 +28,6 @@ trait LinearSeq[+A] extends Seq[A] * @define Coll LinearSeq */ object LinearSeq extends SeqFactory[LinearSeq] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, LinearSeq[A]] = immutable.LinearSeq.newBuilder[A] } diff --git a/src/library/scala/collection/Seq.scala b/src/library/scala/collection/Seq.scala index abcc0b5780..2fbbaee355 100644 --- a/src/library/scala/collection/Seq.scala +++ b/src/library/scala/collection/Seq.scala @@ -36,7 +36,7 @@ object Seq extends SeqFactory[Seq] { private[collection] val hashSeed = "Seq".hashCode /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Seq[A]] = immutable.Seq.newBuilder[A] diff --git a/src/library/scala/collection/Traversable.scala b/src/library/scala/collection/Traversable.scala index 71c5839d43..3cdc4cbf82 100644 --- a/src/library/scala/collection/Traversable.scala +++ b/src/library/scala/collection/Traversable.scala @@ -103,7 +103,7 @@ object Traversable extends TraversableFactory[Traversable] { self => private[collection] val breaks: Breaks = new Breaks /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Traversable[A]] = immutable.Traversable.newBuilder[A] } diff --git a/src/library/scala/collection/generic/GenTraversableFactory.scala b/src/library/scala/collection/generic/GenTraversableFactory.scala index c2718e5ee2..66eb57657b 100644 --- a/src/library/scala/collection/generic/GenTraversableFactory.scala +++ b/src/library/scala/collection/generic/GenTraversableFactory.scala @@ -36,6 +36,12 @@ package generic abstract class GenTraversableFactory[CC[X] <: GenTraversable[X] with GenericTraversableTemplate[X, CC]] extends GenericCompanion[CC] { + // A default implementation of GenericCanBuildFrom which can be cast + // to whatever is desired. + private[collection] object ReusableCBF extends GenericCanBuildFrom[Nothing] { + override def apply() = newBuilder[Nothing] + } + /** A generic implementation of the `CanBuildFrom` trait, which forwards * all calls to `apply(from)` to the `genericBuilder` method of * $coll `from`, and which forwards all calls of `apply()` to the diff --git a/src/library/scala/collection/immutable/GenIterable.scala.disabled b/src/library/scala/collection/immutable/GenIterable.scala.disabled index 252c721271..858abd27aa 100644 --- a/src/library/scala/collection/immutable/GenIterable.scala.disabled +++ b/src/library/scala/collection/immutable/GenIterable.scala.disabled @@ -31,7 +31,7 @@ trait GenIterable[+A] extends GenTraversable[A] // object GenIterable extends TraversableFactory[GenIterable] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenIterable[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenIterable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenIterable[A]] = Iterable.newBuilder // } diff --git a/src/library/scala/collection/immutable/GenSeq.scala.disabled b/src/library/scala/collection/immutable/GenSeq.scala.disabled index 36aff8f8e6..5b59418b9f 100644 --- a/src/library/scala/collection/immutable/GenSeq.scala.disabled +++ b/src/library/scala/collection/immutable/GenSeq.scala.disabled @@ -39,7 +39,7 @@ trait GenSeq[+A] extends GenIterable[A] // object GenSeq extends SeqFactory[GenSeq] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSeq[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenSeq[A]] = Seq.newBuilder // } diff --git a/src/library/scala/collection/immutable/GenSet.scala.disabled b/src/library/scala/collection/immutable/GenSet.scala.disabled index 3cca6ba66e..dc921b5245 100644 --- a/src/library/scala/collection/immutable/GenSet.scala.disabled +++ b/src/library/scala/collection/immutable/GenSet.scala.disabled @@ -38,6 +38,6 @@ trait GenSet[A] extends GenIterable[A] // object GenSet extends TraversableFactory[GenSet] { -// implicit def canBuildFrom[A] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A] = Set.newBuilder // } diff --git a/src/library/scala/collection/immutable/GenTraversable.scala.disabled b/src/library/scala/collection/immutable/GenTraversable.scala.disabled index 2ee9bd9d8c..4a5cf12ebe 100644 --- a/src/library/scala/collection/immutable/GenTraversable.scala.disabled +++ b/src/library/scala/collection/immutable/GenTraversable.scala.disabled @@ -34,7 +34,7 @@ trait GenTraversable[+A] extends scala.collection.GenTraversable[A] // object GenTraversable extends TraversableFactory[GenTraversable] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenTraversable[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenTraversable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenTraversable[A]] = Traversable.newBuilder // } diff --git a/src/library/scala/collection/immutable/IndexedSeq.scala b/src/library/scala/collection/immutable/IndexedSeq.scala index 9945f6f0e7..2b06c950fa 100644 --- a/src/library/scala/collection/immutable/IndexedSeq.scala +++ b/src/library/scala/collection/immutable/IndexedSeq.scala @@ -35,6 +35,6 @@ object IndexedSeq extends SeqFactory[IndexedSeq] { def length = buf.length def apply(idx: Int) = buf.apply(idx) } - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, IndexedSeq[A]] = Vector.newBuilder[A] } diff --git a/src/library/scala/collection/immutable/Iterable.scala b/src/library/scala/collection/immutable/Iterable.scala index 81579ef3b7..d5fca2bdff 100644 --- a/src/library/scala/collection/immutable/Iterable.scala +++ b/src/library/scala/collection/immutable/Iterable.scala @@ -38,6 +38,6 @@ trait Iterable[+A] extends Traversable[A] * @define coll immutable iterable collection */ object Iterable extends TraversableFactory[Iterable] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Iterable[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/LinearSeq.scala b/src/library/scala/collection/immutable/LinearSeq.scala index ab8b63238d..e2e2d97588 100644 --- a/src/library/scala/collection/immutable/LinearSeq.scala +++ b/src/library/scala/collection/immutable/LinearSeq.scala @@ -31,6 +31,6 @@ trait LinearSeq[+A] extends Seq[A] * @define Coll immutable.LinearSeq */ object LinearSeq extends SeqFactory[LinearSeq] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, LinearSeq[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/List.scala b/src/library/scala/collection/immutable/List.scala index 563f14eac6..1781e7ba36 100644 --- a/src/library/scala/collection/immutable/List.scala +++ b/src/library/scala/collection/immutable/List.scala @@ -426,7 +426,8 @@ object List extends SeqFactory[List] { import scala.collection.{Iterable, Seq, IndexedSeq} /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, List[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, List[A]] = + ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, List[A]] = new ListBuffer[A] diff --git a/src/library/scala/collection/immutable/Queue.scala b/src/library/scala/collection/immutable/Queue.scala index bf5dc6816a..e09e4b7196 100644 --- a/src/library/scala/collection/immutable/Queue.scala +++ b/src/library/scala/collection/immutable/Queue.scala @@ -144,7 +144,7 @@ class Queue[+A] protected(protected val in: List[A], protected val out: List[A]) */ object Queue extends SeqFactory[Queue] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Queue[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Queue[A]] = ReusableCBF.asInstanceOf[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] = EmptyQueue.asInstanceOf[Queue[A]] override def apply[A](xs: A*): Queue[A] = new Queue[A](Nil, xs.toList) diff --git a/src/library/scala/collection/immutable/Seq.scala b/src/library/scala/collection/immutable/Seq.scala index 11e56df354..882ca12612 100644 --- a/src/library/scala/collection/immutable/Seq.scala +++ b/src/library/scala/collection/immutable/Seq.scala @@ -41,6 +41,6 @@ trait Seq[+A] extends Iterable[A] */ object Seq extends SeqFactory[Seq] { /** genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Seq[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/Stack.scala b/src/library/scala/collection/immutable/Stack.scala index 329f12190f..adbe34ed09 100644 --- a/src/library/scala/collection/immutable/Stack.scala +++ b/src/library/scala/collection/immutable/Stack.scala @@ -20,7 +20,7 @@ import mutable.{ ArrayBuffer, Builder } */ object Stack extends SeqFactory[Stack] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Stack[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Stack[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Stack[A]] = new ArrayBuffer[A] mapResult (buf => new Stack(buf.toList)) @deprecated("Use Stack.empty instead", "2.8.0") diff --git a/src/library/scala/collection/immutable/Traversable.scala b/src/library/scala/collection/immutable/Traversable.scala index 80839db31c..7830b38d69 100644 --- a/src/library/scala/collection/immutable/Traversable.scala +++ b/src/library/scala/collection/immutable/Traversable.scala @@ -33,6 +33,6 @@ trait Traversable[+A] extends scala.collection.Traversable[A] * @define Coll immutable.Traversable */ object Traversable extends TraversableFactory[Traversable] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Traversable[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/Vector.scala b/src/library/scala/collection/immutable/Vector.scala index ab44585902..5adbcbb524 100644 --- a/src/library/scala/collection/immutable/Vector.scala +++ b/src/library/scala/collection/immutable/Vector.scala @@ -6,30 +6,23 @@ ** |/ ** \* */ - package scala.collection package immutable import scala.annotation.unchecked.uncheckedVariance import compat.Platform - import scala.collection.generic._ import scala.collection.mutable.Builder import scala.collection.parallel.immutable.ParVector - object Vector extends SeqFactory[Vector] { - private[immutable] val BF = new GenericCanBuildFrom[Nothing] { - override def apply() = newBuilder[Nothing] - } @inline implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Vector[A]] = - BF.asInstanceOf[CanBuildFrom[Coll, A, Vector[A]]] + ReusableCBF.asInstanceOf[CanBuildFrom[Coll, A, Vector[A]]] def newBuilder[A]: Builder[A, Vector[A]] = new VectorBuilder[A] private[immutable] val NIL = new Vector[Nothing](0, 0, 0) @inline override def empty[A]: Vector[A] = NIL } - // in principle, most members should be private. however, access privileges must // be carefully chosen to not prevent method inlining diff --git a/src/library/scala/collection/mutable/ArrayBuffer.scala b/src/library/scala/collection/mutable/ArrayBuffer.scala index 7edbad6518..46499eb326 100644 --- a/src/library/scala/collection/mutable/ArrayBuffer.scala +++ b/src/library/scala/collection/mutable/ArrayBuffer.scala @@ -187,7 +187,7 @@ class ArrayBuffer[A](override protected val initialSize: Int) */ object ArrayBuffer extends SeqFactory[ArrayBuffer] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ArrayBuffer[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ArrayBuffer[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, ArrayBuffer[A]] = new ArrayBuffer[A] } diff --git a/src/library/scala/collection/mutable/ArraySeq.scala b/src/library/scala/collection/mutable/ArraySeq.scala index 4b0b4779e9..0d6aac3549 100644 --- a/src/library/scala/collection/mutable/ArraySeq.scala +++ b/src/library/scala/collection/mutable/ArraySeq.scala @@ -94,7 +94,7 @@ extends IndexedSeq[A] */ object ArraySeq extends SeqFactory[ArraySeq] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ArraySeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ArraySeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, ArraySeq[A]] = new ArrayBuffer[A] mapResult { buf => val result = new ArraySeq[A](buf.length) diff --git a/src/library/scala/collection/mutable/ArrayStack.scala b/src/library/scala/collection/mutable/ArrayStack.scala index ce4fe30630..d31627f55a 100644 --- a/src/library/scala/collection/mutable/ArrayStack.scala +++ b/src/library/scala/collection/mutable/ArrayStack.scala @@ -22,7 +22,7 @@ import generic._ * @define Coll ArrayStack */ object ArrayStack extends SeqFactory[ArrayStack] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ArrayStack[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ArrayStack[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, ArrayStack[A]] = new ArrayStack[A] def empty: ArrayStack[Nothing] = new ArrayStack() def apply[A: ClassManifest](elems: A*): ArrayStack[A] = { diff --git a/src/library/scala/collection/mutable/Buffer.scala b/src/library/scala/collection/mutable/Buffer.scala index fa2615e035..4ced60c44d 100644 --- a/src/library/scala/collection/mutable/Buffer.scala +++ b/src/library/scala/collection/mutable/Buffer.scala @@ -40,7 +40,7 @@ trait Buffer[A] extends Seq[A] * @define Coll Buffer */ object Buffer extends SeqFactory[Buffer] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Buffer[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Buffer[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Buffer[A]] = new ArrayBuffer } diff --git a/src/library/scala/collection/mutable/DoubleLinkedList.scala b/src/library/scala/collection/mutable/DoubleLinkedList.scala index 2d630c3756..24c2306e30 100644 --- a/src/library/scala/collection/mutable/DoubleLinkedList.scala +++ b/src/library/scala/collection/mutable/DoubleLinkedList.scala @@ -67,7 +67,7 @@ class DoubleLinkedList[A]() extends LinearSeq[A] */ object DoubleLinkedList extends SeqFactory[DoubleLinkedList] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, DoubleLinkedList[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, DoubleLinkedList[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, DoubleLinkedList[A]] = new Builder[A, DoubleLinkedList[A]] { diff --git a/src/library/scala/collection/mutable/GenIterable.scala.disabled b/src/library/scala/collection/mutable/GenIterable.scala.disabled index 7fd6a8ca2c..e09981bc9b 100644 --- a/src/library/scala/collection/mutable/GenIterable.scala.disabled +++ b/src/library/scala/collection/mutable/GenIterable.scala.disabled @@ -30,7 +30,7 @@ trait GenIterable[A] extends GenTraversable[A] // object GenIterable extends TraversableFactory[GenIterable] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenIterable[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenIterable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenIterable[A]] = Iterable.newBuilder // } diff --git a/src/library/scala/collection/mutable/GenSeq.scala.disabled b/src/library/scala/collection/mutable/GenSeq.scala.disabled index 376a2ceb8b..85e4065183 100644 --- a/src/library/scala/collection/mutable/GenSeq.scala.disabled +++ b/src/library/scala/collection/mutable/GenSeq.scala.disabled @@ -38,7 +38,7 @@ trait GenSeq[A] extends GenIterable[A] // object GenSeq extends SeqFactory[GenSeq] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSeq[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenSeq[A]] = Seq.newBuilder // } diff --git a/src/library/scala/collection/mutable/GenSet.scala.disabled b/src/library/scala/collection/mutable/GenSet.scala.disabled index 7416577a6a..ac11e634e8 100644 --- a/src/library/scala/collection/mutable/GenSet.scala.disabled +++ b/src/library/scala/collection/mutable/GenSet.scala.disabled @@ -39,7 +39,7 @@ trait GenSet[A] extends GenIterable[A] // object GenSet extends TraversableFactory[GenSet] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSet[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSet[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenSet[A]] = Set.newBuilder // } diff --git a/src/library/scala/collection/mutable/GenTraversable.scala.disabled b/src/library/scala/collection/mutable/GenTraversable.scala.disabled index 1ad9bfa9ca..e78e758c12 100644 --- a/src/library/scala/collection/mutable/GenTraversable.scala.disabled +++ b/src/library/scala/collection/mutable/GenTraversable.scala.disabled @@ -32,7 +32,7 @@ trait GenTraversable[A] extends scala.collection.GenTraversable[A] } // object GenTraversable extends TraversableFactory[GenTraversable] { -// implicit def canBuildFrom[A] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A] = Traversable.newBuilder // } diff --git a/src/library/scala/collection/mutable/IndexedSeq.scala b/src/library/scala/collection/mutable/IndexedSeq.scala index 1d7b54214a..e55cf0429f 100644 --- a/src/library/scala/collection/mutable/IndexedSeq.scala +++ b/src/library/scala/collection/mutable/IndexedSeq.scala @@ -31,6 +31,6 @@ trait IndexedSeq[A] extends Seq[A] * @define Coll mutable.IndexedSeq */ object IndexedSeq extends SeqFactory[IndexedSeq] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, IndexedSeq[A]] = new ArrayBuffer[A] } diff --git a/src/library/scala/collection/mutable/Iterable.scala b/src/library/scala/collection/mutable/Iterable.scala index 1a5e58b504..f20179a2d9 100644 --- a/src/library/scala/collection/mutable/Iterable.scala +++ b/src/library/scala/collection/mutable/Iterable.scala @@ -32,7 +32,7 @@ trait Iterable[A] extends Traversable[A] * @define Coll mutable.Iterable */ object Iterable extends TraversableFactory[Iterable] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Iterable[A]] = new ArrayBuffer } diff --git a/src/library/scala/collection/mutable/LinearSeq.scala b/src/library/scala/collection/mutable/LinearSeq.scala index 2fdca6bed9..0994c9e885 100644 --- a/src/library/scala/collection/mutable/LinearSeq.scala +++ b/src/library/scala/collection/mutable/LinearSeq.scala @@ -33,6 +33,6 @@ trait LinearSeq[A] extends Seq[A] * @define Coll mutable.LinearSeq */ object LinearSeq extends SeqFactory[LinearSeq] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, LinearSeq[A]] = new MutableList[A] } diff --git a/src/library/scala/collection/mutable/LinkedList.scala b/src/library/scala/collection/mutable/LinkedList.scala index b701a42596..bfb2db2b34 100644 --- a/src/library/scala/collection/mutable/LinkedList.scala +++ b/src/library/scala/collection/mutable/LinkedList.scala @@ -61,7 +61,7 @@ class LinkedList[A]() extends LinearSeq[A] */ object LinkedList extends SeqFactory[LinkedList] { override def empty[A]: LinkedList[A] = new LinkedList[A] - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinkedList[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinkedList[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, LinkedList[A]] = (new MutableList) mapResult ((l: MutableList[A]) => l.toLinkedList) diff --git a/src/library/scala/collection/mutable/ListBuffer.scala b/src/library/scala/collection/mutable/ListBuffer.scala index f1271627c1..69b15d7a6f 100644 --- a/src/library/scala/collection/mutable/ListBuffer.scala +++ b/src/library/scala/collection/mutable/ListBuffer.scala @@ -379,6 +379,6 @@ final class ListBuffer[A] * @define coll list buffer */ object ListBuffer extends SeqFactory[ListBuffer] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ListBuffer[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ListBuffer[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, ListBuffer[A]] = new GrowingBuilder(new ListBuffer[A]) } diff --git a/src/library/scala/collection/mutable/MutableList.scala b/src/library/scala/collection/mutable/MutableList.scala index c931513da9..3eb60698cd 100644 --- a/src/library/scala/collection/mutable/MutableList.scala +++ b/src/library/scala/collection/mutable/MutableList.scala @@ -143,7 +143,7 @@ extends LinearSeq[A] object MutableList extends SeqFactory[MutableList] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, MutableList[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, MutableList[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, MutableList[A]] = new MutableList[A] } diff --git a/src/library/scala/collection/mutable/Queue.scala b/src/library/scala/collection/mutable/Queue.scala index cf0d2bdfe0..e1723241f5 100644 --- a/src/library/scala/collection/mutable/Queue.scala +++ b/src/library/scala/collection/mutable/Queue.scala @@ -168,7 +168,7 @@ extends MutableList[A] object Queue extends SeqFactory[Queue] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Queue[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Queue[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Queue[A]] = new MutableList[A] mapResult { _.toQueue } } diff --git a/src/library/scala/collection/mutable/ResizableArray.scala b/src/library/scala/collection/mutable/ResizableArray.scala index d5398f0e0e..d57e6477b3 100644 --- a/src/library/scala/collection/mutable/ResizableArray.scala +++ b/src/library/scala/collection/mutable/ResizableArray.scala @@ -117,6 +117,6 @@ trait ResizableArray[A] extends IndexedSeq[A] } object ResizableArray extends SeqFactory[ResizableArray] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ResizableArray[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ResizableArray[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, ResizableArray[A]] = new ArrayBuffer[A] } diff --git a/src/library/scala/collection/mutable/Seq.scala b/src/library/scala/collection/mutable/Seq.scala index 42b4ac5c15..d876824ec2 100644 --- a/src/library/scala/collection/mutable/Seq.scala +++ b/src/library/scala/collection/mutable/Seq.scala @@ -39,6 +39,6 @@ trait Seq[A] extends Iterable[A] * @define Coll mutable.Seq */ object Seq extends SeqFactory[Seq] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Seq[A]] = new ArrayBuffer } diff --git a/src/library/scala/collection/mutable/Stack.scala b/src/library/scala/collection/mutable/Stack.scala index 89a02ad2ab..63503d77de 100644 --- a/src/library/scala/collection/mutable/Stack.scala +++ b/src/library/scala/collection/mutable/Stack.scala @@ -33,7 +33,7 @@ object Stack extends SeqFactory[Stack] { } } - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Stack[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Stack[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Stack[A]] = new StackBuilder[A] val empty: Stack[Nothing] = new Stack(Nil) } diff --git a/src/library/scala/collection/mutable/Traversable.scala b/src/library/scala/collection/mutable/Traversable.scala index b711e0b4db..04b67c0bad 100644 --- a/src/library/scala/collection/mutable/Traversable.scala +++ b/src/library/scala/collection/mutable/Traversable.scala @@ -32,7 +32,7 @@ trait Traversable[A] extends scala.collection.Traversable[A] * @define Coll mutable.Traversable */ object Traversable extends TraversableFactory[Traversable] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Traversable[A]] = new ArrayBuffer } -- cgit v1.2.3