@@ -30,7 +30,7 @@ sealed abstract class ArrayBuilder[T]
3030 extends ReusableBuilder [T , Array [T ]]
3131 with Serializable {
3232 protected [this ] var capacity : Int = 0
33- protected [this ] def elems : Array [T ]
33+ protected [this ] def elems : Array [T ] | Null // may not be allocated at size = capacity = 0
3434 protected var size : Int = 0
3535
3636 def length : Int = size
@@ -58,7 +58,7 @@ sealed abstract class ArrayBuilder[T]
5858 /** Add a slice of an array */
5959 def addAll (xs : Array [_ <: T ], offset : Int , length : Int ): this .type = {
6060 ensureSize(this .size + length)
61- Array .copy(xs, offset, elems, this .size, length)
61+ Array .copy(xs, offset, elems.nn , this .size, length)
6262 size += length
6363 this
6464 }
@@ -68,8 +68,8 @@ sealed abstract class ArrayBuilder[T]
6868 if (k > 0 ) {
6969 ensureSize(this .size + k)
7070 xs match {
71- case xs : Iterable [T ] => xs.copyToArray(elems, this .size)
72- case _ => xs.iterator.copyToArray(elems, this .size)
71+ case xs : Iterable [T ] => xs.copyToArray(elems.nn , this .size)
72+ case _ => xs.iterator.copyToArray(elems.nn , this .size)
7373 }
7474 size += k
7575 } else if (k < 0 ) super .addAll(xs)
@@ -225,7 +225,7 @@ object ArrayBuilder {
225225 * @tparam T type of elements for the array builder, subtype of `AnyRef` with a `ClassTag` context bound.
226226 */
227227 @ SerialVersionUID (3L )
228- final class ofRef [T <: AnyRef ](implicit ct : ClassTag [T ]) extends ArrayBuilder [T ] {
228+ final class ofRef [T <: AnyRef | Null ](implicit ct : ClassTag [T ]) extends ArrayBuilder [T ] {
229229
230230 protected var elems : Array [T ] = _
231231
@@ -251,7 +251,7 @@ object ArrayBuilder {
251251 if (capacity != 0 && capacity == size) {
252252 capacity = 0
253253 val res = elems
254- elems = null
254+ elems = null . asInstanceOf [ Array [ T ]]
255255 res
256256 }
257257 else mkArray(size)
@@ -298,7 +298,7 @@ object ArrayBuilder {
298298 if (capacity != 0 && capacity == size) {
299299 capacity = 0
300300 val res = elems
301- elems = null
301+ elems = null . asInstanceOf [ Array [ Byte ]]
302302 res
303303 }
304304 else mkArray(size)
@@ -340,7 +340,7 @@ object ArrayBuilder {
340340 if (capacity != 0 && capacity == size) {
341341 capacity = 0
342342 val res = elems
343- elems = null
343+ elems = null . asInstanceOf [ Array [ Short ]]
344344 res
345345 }
346346 else mkArray(size)
@@ -382,7 +382,7 @@ object ArrayBuilder {
382382 if (capacity != 0 && capacity == size) {
383383 capacity = 0
384384 val res = elems
385- elems = null
385+ elems = null . asInstanceOf [ Array [ Char ]]
386386 res
387387 }
388388 else mkArray(size)
@@ -424,7 +424,7 @@ object ArrayBuilder {
424424 if (capacity != 0 && capacity == size) {
425425 capacity = 0
426426 val res = elems
427- elems = null
427+ elems = null . asInstanceOf [ Array [ Int ]]
428428 res
429429 }
430430 else mkArray(size)
@@ -466,7 +466,7 @@ object ArrayBuilder {
466466 if (capacity != 0 && capacity == size) {
467467 capacity = 0
468468 val res = elems
469- elems = null
469+ elems = null . asInstanceOf [ Array [ Long ]]
470470 res
471471 }
472472 else mkArray(size)
@@ -508,7 +508,7 @@ object ArrayBuilder {
508508 if (capacity != 0 && capacity == size) {
509509 capacity = 0
510510 val res = elems
511- elems = null
511+ elems = null . asInstanceOf [ Array [ Float ]]
512512 res
513513 }
514514 else mkArray(size)
@@ -550,7 +550,7 @@ object ArrayBuilder {
550550 if (capacity != 0 && capacity == size) {
551551 capacity = 0
552552 val res = elems
553- elems = null
553+ elems = null . asInstanceOf [ Array [ Double ]]
554554 res
555555 }
556556 else mkArray(size)
@@ -592,7 +592,7 @@ object ArrayBuilder {
592592 if (capacity != 0 && capacity == size) {
593593 capacity = 0
594594 val res = elems
595- elems = null
595+ elems = null . asInstanceOf [ Array [ Boolean ]]
596596 res
597597 }
598598 else mkArray(size)
0 commit comments