@@ -32,7 +32,7 @@ sealed abstract class ArrayBuilder[T]
3232 extends ReusableBuilder [T , Array [T ]]
3333 with Serializable {
3434 protected [this ] var capacity : Int = 0
35- protected [this ] def elems : Array [T ]
35+ protected [this ] def elems : Array [T ] | Null // may not be allocated at size = capacity = 0
3636 protected var size : Int = 0
3737
3838 def length : Int = size
@@ -60,7 +60,7 @@ sealed abstract class ArrayBuilder[T]
6060 /** Add a slice of an array */
6161 def addAll (xs : Array [_ <: T ], offset : Int , length : Int ): this .type = {
6262 ensureSize(this .size + length)
63- Array .copy(xs, offset, elems, this .size, length)
63+ Array .copy(xs, offset, elems.nn , this .size, length)
6464 size += length
6565 this
6666 }
@@ -70,8 +70,8 @@ sealed abstract class ArrayBuilder[T]
7070 if (k > 0 ) {
7171 ensureSize(this .size + k)
7272 xs match {
73- case xs : Iterable [T ] => xs.copyToArray(elems, this .size)
74- case _ => xs.iterator.copyToArray(elems, this .size)
73+ case xs : Iterable [T ] => xs.copyToArray(elems.nn , this .size)
74+ case _ => xs.iterator.copyToArray(elems.nn , this .size)
7575 }
7676 size += k
7777 } else if (k < 0 ) super .addAll(xs)
@@ -227,7 +227,7 @@ object ArrayBuilder {
227227 * @tparam T type of elements for the array builder, subtype of `AnyRef` with a `ClassTag` context bound.
228228 */
229229 @ SerialVersionUID (3L )
230- final class ofRef [T <: AnyRef ](implicit ct : ClassTag [T ]) extends ArrayBuilder [T ] {
230+ final class ofRef [T <: AnyRef | Null ](implicit ct : ClassTag [T ]) extends ArrayBuilder [T ] {
231231
232232 protected var elems : Array [T ] = _
233233
@@ -253,7 +253,7 @@ object ArrayBuilder {
253253 if (capacity != 0 && capacity == size) {
254254 capacity = 0
255255 val res = elems
256- elems = null
256+ elems = null . asInstanceOf [ Array [ T ]]
257257 res
258258 }
259259 else mkArray(size)
@@ -300,7 +300,7 @@ object ArrayBuilder {
300300 if (capacity != 0 && capacity == size) {
301301 capacity = 0
302302 val res = elems
303- elems = null
303+ elems = null . asInstanceOf [ Array [ Byte ]]
304304 res
305305 }
306306 else mkArray(size)
@@ -342,7 +342,7 @@ object ArrayBuilder {
342342 if (capacity != 0 && capacity == size) {
343343 capacity = 0
344344 val res = elems
345- elems = null
345+ elems = null . asInstanceOf [ Array [ Short ]]
346346 res
347347 }
348348 else mkArray(size)
@@ -384,7 +384,7 @@ object ArrayBuilder {
384384 if (capacity != 0 && capacity == size) {
385385 capacity = 0
386386 val res = elems
387- elems = null
387+ elems = null . asInstanceOf [ Array [ Char ]]
388388 res
389389 }
390390 else mkArray(size)
@@ -426,7 +426,7 @@ object ArrayBuilder {
426426 if (capacity != 0 && capacity == size) {
427427 capacity = 0
428428 val res = elems
429- elems = null
429+ elems = null . asInstanceOf [ Array [ Int ]]
430430 res
431431 }
432432 else mkArray(size)
@@ -468,7 +468,7 @@ object ArrayBuilder {
468468 if (capacity != 0 && capacity == size) {
469469 capacity = 0
470470 val res = elems
471- elems = null
471+ elems = null . asInstanceOf [ Array [ Long ]]
472472 res
473473 }
474474 else mkArray(size)
@@ -510,7 +510,7 @@ object ArrayBuilder {
510510 if (capacity != 0 && capacity == size) {
511511 capacity = 0
512512 val res = elems
513- elems = null
513+ elems = null . asInstanceOf [ Array [ Float ]]
514514 res
515515 }
516516 else mkArray(size)
@@ -552,7 +552,7 @@ object ArrayBuilder {
552552 if (capacity != 0 && capacity == size) {
553553 capacity = 0
554554 val res = elems
555- elems = null
555+ elems = null . asInstanceOf [ Array [ Double ]]
556556 res
557557 }
558558 else mkArray(size)
@@ -594,7 +594,7 @@ object ArrayBuilder {
594594 if (capacity != 0 && capacity == size) {
595595 capacity = 0
596596 val res = elems
597- elems = null
597+ elems = null . asInstanceOf [ Array [ Boolean ]]
598598 res
599599 }
600600 else mkArray(size)
0 commit comments