Skip to content

Commit 86c263a

Browse files
committed
review comments
order matches in expected frequency order (Array, WrappedArray + associated builders, and ClassTag.newArray) avoid extra def in BitSets don't optimise for NoBuilder cases
1 parent 0e11d68 commit 86c263a

File tree

11 files changed

+38
-49
lines changed

11 files changed

+38
-49
lines changed

library/src/mima-filters/2.12.0.forwards.excludes

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,4 @@ ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.L
5656
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.HashMap#HashMap1.foreachEntry")
5757
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.HashMap#HashMapCollision1.foreachEntry")
5858
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.hashing.MurmurHash3.product2Hash")
59-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.hashing.MurmurHash3.emptyMapHash")
60-
61-
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.TraversableView.noBuilder")
59+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.hashing.MurmurHash3.emptyMapHash")

library/src/scala/Array.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ object Array extends FallbackArrayBuilding {
6565
val cls = tag.runtimeClass
6666
(if (cls.isPrimitive) {
6767
cls match {
68-
case java.lang.Byte.TYPE => cbfByteArray
69-
case java.lang.Short.TYPE => cbfShortArray
70-
case java.lang.Character.TYPE => cbfCharArray
7168
case java.lang.Integer.TYPE => cbfIntArray
69+
case java.lang.Double.TYPE => cbfDoubleArray
7270
case java.lang.Long.TYPE => cbfLongArray
7371
case java.lang.Float.TYPE => cbfFloatArray
74-
case java.lang.Double.TYPE => cbfDoubleArray
72+
case java.lang.Character.TYPE => cbfCharArray
73+
case java.lang.Byte.TYPE => cbfByteArray
74+
case java.lang.Short.TYPE => cbfShortArray
7575
case java.lang.Boolean.TYPE => cbfBooleanArray
7676
case java.lang.Void.TYPE => cbfUnitArray
7777
}

library/src/scala/collection/BitSet.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ object BitSet extends BitSetFactory[BitSet] {
3232
def newBuilder = immutable.BitSet.newBuilder
3333

3434
/** $canBuildFromInfo */
35-
implicit def canBuildFrom: CanBuildFrom[BitSet, Int, BitSet] = ReusableCBF
36-
private[this] val ReusableCBF = bitsetCanBuildFrom
35+
implicit val canBuildFrom: CanBuildFrom[BitSet, Int, BitSet] = bitsetCanBuildFrom
3736
}
3837

library/src/scala/collection/IterableView.scala

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ package scala
1414
package collection
1515

1616
import generic._
17-
import TraversableView.noBuilder
17+
import TraversableView.NoBuilder
1818

1919
/** A base trait for non-strict views of `Iterable`s.
2020
* $iterableViewInfo
@@ -27,9 +27,8 @@ trait IterableView[+A, +Coll] extends IterableViewLike[A, Coll, IterableView[A,
2727
object IterableView {
2828
type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]}
2929
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IterableView[A, Iterable[_]]] =
30-
ReusableCBF.asInstanceOf[CanBuildFrom[Coll, A, IterableView[A, Iterable[_]]]]
31-
private[this] val ReusableCBF = new CanBuildFrom[Coll, Any, IterableView[Any, Iterable[_]]] {
32-
def apply(from: Coll) = noBuilder[Any]
33-
def apply() = noBuilder
30+
new CanBuildFrom[Coll, A, IterableView[A, Iterable[_]]] {
31+
def apply(from: Coll) = new NoBuilder
32+
def apply() = new NoBuilder
3433
}
3534
}

library/src/scala/collection/SeqView.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ package scala
1414
package collection
1515

1616
import generic._
17-
import TraversableView.noBuilder
17+
import TraversableView.NoBuilder
1818

1919
/** A base trait for non-strict views of sequences.
2020
* $seqViewInfo
@@ -28,8 +28,8 @@ object SeqView {
2828
type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]}
2929
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, SeqView[A, Seq[_]]] =
3030
new CanBuildFrom[Coll, A, SeqView[A, Seq[_]]] {
31-
def apply(from: Coll) = noBuilder
32-
def apply() = noBuilder
31+
def apply(from: Coll) = new NoBuilder
32+
def apply() = new NoBuilder
3333
}
3434
}
3535

library/src/scala/collection/TraversableView.scala

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ trait TraversableView[+A, +Coll] extends TraversableViewLike[A, Coll, Traversabl
2525
* `TraversableView`s work. Its definitions are generally not accessed directly by clients.
2626
*/
2727
object TraversableView {
28-
private[this] val reusedNoBuilder = new NoBuilder[Any]
29-
private[collection] def noBuilder[A] = reusedNoBuilder.asInstanceOf[NoBuilder[A]]
30-
//should be private
3128
class NoBuilder[A] extends Builder[A, Nothing] {
3229
def +=(elem: A): this.type = this
3330
def iterator: Iterator[A] = Iterator.empty
@@ -37,7 +34,7 @@ object TraversableView {
3734
type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]}
3835
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, TraversableView[A, Traversable[_]]] =
3936
new CanBuildFrom[Coll, A, TraversableView[A, Traversable[_]]] {
40-
def apply(from: Coll) = noBuilder
41-
def apply() = noBuilder
37+
def apply(from: Coll) = new NoBuilder
38+
def apply() = new NoBuilder
4239
}
4340
}

library/src/scala/collection/mutable/ArrayBuilder.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ object ArrayBuilder {
4040
val cls = tag.runtimeClass
4141
if (cls.isPrimitive) {
4242
cls match {
43-
case java.lang.Byte.TYPE => new ArrayBuilder.ofByte().asInstanceOf[ArrayBuilder[T]]
44-
case java.lang.Short.TYPE => new ArrayBuilder.ofShort().asInstanceOf[ArrayBuilder[T]]
45-
case java.lang.Character.TYPE => new ArrayBuilder.ofChar().asInstanceOf[ArrayBuilder[T]]
4643
case java.lang.Integer.TYPE => new ArrayBuilder.ofInt().asInstanceOf[ArrayBuilder[T]]
44+
case java.lang.Double.TYPE => new ArrayBuilder.ofDouble().asInstanceOf[ArrayBuilder[T]]
4745
case java.lang.Long.TYPE => new ArrayBuilder.ofLong().asInstanceOf[ArrayBuilder[T]]
4846
case java.lang.Float.TYPE => new ArrayBuilder.ofFloat().asInstanceOf[ArrayBuilder[T]]
49-
case java.lang.Double.TYPE => new ArrayBuilder.ofDouble().asInstanceOf[ArrayBuilder[T]]
47+
case java.lang.Character.TYPE => new ArrayBuilder.ofChar().asInstanceOf[ArrayBuilder[T]]
48+
case java.lang.Byte.TYPE => new ArrayBuilder.ofByte().asInstanceOf[ArrayBuilder[T]]
49+
case java.lang.Short.TYPE => new ArrayBuilder.ofShort().asInstanceOf[ArrayBuilder[T]]
5050
case java.lang.Boolean.TYPE => new ArrayBuilder.ofBoolean().asInstanceOf[ArrayBuilder[T]]
5151
case java.lang.Void.TYPE => new ArrayBuilder.ofUnit().asInstanceOf[ArrayBuilder[T]]
5252
}

library/src/scala/collection/mutable/IndexedSeqView.scala

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ package mutable
1616

1717
import generic._
1818

19-
import TraversableView.noBuilder
19+
import TraversableView.NoBuilder
2020

2121
/** A non-strict view of a mutable `IndexedSeq`.
2222
* $viewInfo
@@ -107,17 +107,13 @@ self =>
107107
object IndexedSeqView {
108108
type Coll = TraversableView[_, C] forSome {type C <: Traversable[_]}
109109
implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, SeqView[A, Seq[_]]] =
110-
ReusableCBF.asInstanceOf[CanBuildFrom[Coll, A, SeqView[A, Seq[_]]]]
111-
private[this] val ReusableCBF =
112-
new CanBuildFrom[Coll, Any, SeqView[Any, Seq[_]]] {
113-
def apply(from: Coll) = noBuilder
114-
def apply() = noBuilder
110+
new CanBuildFrom[Coll, A, SeqView[A, Seq[_]]] {
111+
def apply(from: Coll) = new NoBuilder
112+
def apply() = new NoBuilder
115113
}
116114
implicit def arrCanBuildFrom[A]: CanBuildFrom[TraversableView[_, Array[_]], A, SeqView[A, Array[A]]] =
117-
arrayReusableCBF.asInstanceOf[CanBuildFrom[TraversableView[_, Array[_]], A, SeqView[A, Array[A]]]]
118-
private[this] val arrayReusableCBF =
119-
new CanBuildFrom[TraversableView[_, Array[_]], Any, SeqView[Any, Array[_]]] {
120-
def apply(from: TraversableView[_, Array[_]]) = noBuilder
121-
def apply() = noBuilder
115+
new CanBuildFrom[TraversableView[_, Array[_]], A, SeqView[A, Array[A]]] {
116+
def apply(from: TraversableView[_, Array[_]]) = new NoBuilder
117+
def apply() = new NoBuilder
122118
}
123119
}

library/src/scala/collection/mutable/WrappedArray.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,13 @@ object WrappedArray {
119119
val cls = tag.runtimeClass
120120
(if (cls.isPrimitive) {
121121
tag.runtimeClass match {
122-
case java.lang.Byte.TYPE => cbfByteArray
123-
case java.lang.Short.TYPE => cbfShortArray
124-
case java.lang.Character.TYPE => cbfCharArray
125122
case java.lang.Integer.TYPE => cbfIntArray
123+
case java.lang.Double.TYPE => cbfDoubleArray
126124
case java.lang.Long.TYPE => cbfLongArray
127125
case java.lang.Float.TYPE => cbfFloatArray
128-
case java.lang.Double.TYPE => cbfDoubleArray
126+
case java.lang.Character.TYPE => cbfCharArray
127+
case java.lang.Byte.TYPE => cbfByteArray
128+
case java.lang.Short.TYPE => cbfShortArray
129129
case java.lang.Boolean.TYPE => cbfBooleanArray
130130
case java.lang.Void.TYPE => cbfUnitArray
131131
}

library/src/scala/collection/mutable/WrappedArrayBuilder.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ class WrappedArrayBuilder[A](tag: ClassTag[A]) extends ReusableBuilder[A, Wrappe
3838
val runtimeClass = tag.runtimeClass
3939
val newelems = if (runtimeClass.isPrimitive) {
4040
runtimeClass match {
41-
case java.lang.Byte.TYPE => new WrappedArray.ofByte(new Array[Byte](size)).asInstanceOf[WrappedArray[A]]
42-
case java.lang.Short.TYPE => new WrappedArray.ofShort(new Array[Short](size)).asInstanceOf[WrappedArray[A]]
43-
case java.lang.Character.TYPE => new WrappedArray.ofChar(new Array[Char](size)).asInstanceOf[WrappedArray[A]]
4441
case java.lang.Integer.TYPE => new WrappedArray.ofInt(new Array[Int](size)).asInstanceOf[WrappedArray[A]]
42+
case java.lang.Double.TYPE => new WrappedArray.ofDouble(new Array[Double](size)).asInstanceOf[WrappedArray[A]]
4543
case java.lang.Long.TYPE => new WrappedArray.ofLong(new Array[Long](size)).asInstanceOf[WrappedArray[A]]
4644
case java.lang.Float.TYPE => new WrappedArray.ofFloat(new Array[Float](size)).asInstanceOf[WrappedArray[A]]
47-
case java.lang.Double.TYPE => new WrappedArray.ofDouble(new Array[Double](size)).asInstanceOf[WrappedArray[A]]
45+
case java.lang.Character.TYPE => new WrappedArray.ofChar(new Array[Char](size)).asInstanceOf[WrappedArray[A]]
46+
case java.lang.Byte.TYPE => new WrappedArray.ofByte(new Array[Byte](size)).asInstanceOf[WrappedArray[A]]
47+
case java.lang.Short.TYPE => new WrappedArray.ofShort(new Array[Short](size)).asInstanceOf[WrappedArray[A]]
4848
case java.lang.Boolean.TYPE => new WrappedArray.ofBoolean(new Array[Boolean](size)).asInstanceOf[WrappedArray[A]]
4949
case java.lang.Void.TYPE => new WrappedArray.ofUnit(new Array[Unit](size)).asInstanceOf[WrappedArray[A]]
5050
}

library/src/scala/reflect/ClassTag.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,13 @@ trait ClassTag[T] extends ClassManifestDeprecatedApis[T] with Equals with Serial
6161
override def newArray(len: Int): Array[T] = {
6262
if (runtimeClass.isPrimitive) {
6363
runtimeClass match {
64-
case java.lang.Byte.TYPE => new Array[Byte](len).asInstanceOf[Array[T]]
65-
case java.lang.Short.TYPE => new Array[Short](len).asInstanceOf[Array[T]]
66-
case java.lang.Character.TYPE => new Array[Char](len).asInstanceOf[Array[T]]
6764
case java.lang.Integer.TYPE => new Array[Int](len).asInstanceOf[Array[T]]
65+
case java.lang.Double.TYPE => new Array[Double](len).asInstanceOf[Array[T]]
6866
case java.lang.Long.TYPE => new Array[Long](len).asInstanceOf[Array[T]]
6967
case java.lang.Float.TYPE => new Array[Float](len).asInstanceOf[Array[T]]
70-
case java.lang.Double.TYPE => new Array[Double](len).asInstanceOf[Array[T]]
68+
case java.lang.Character.TYPE => new Array[Char](len).asInstanceOf[Array[T]]
69+
case java.lang.Byte.TYPE => new Array[Byte](len).asInstanceOf[Array[T]]
70+
case java.lang.Short.TYPE => new Array[Short](len).asInstanceOf[Array[T]]
7171
case java.lang.Boolean.TYPE => new Array[Boolean](len).asInstanceOf[Array[T]]
7272
case java.lang.Void.TYPE => new Array[Unit](len).asInstanceOf[Array[T]]
7373
}

0 commit comments

Comments
 (0)