@@ -30,7 +30,7 @@ sealed abstract class ArrayBuilder[T]
30
30
extends ReusableBuilder [T , Array [T ]]
31
31
with Serializable {
32
32
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
34
34
protected var size : Int = 0
35
35
36
36
def length : Int = size
@@ -58,7 +58,7 @@ sealed abstract class ArrayBuilder[T]
58
58
/** Add a slice of an array */
59
59
def addAll (xs : Array [_ <: T ], offset : Int , length : Int ): this .type = {
60
60
ensureSize(this .size + length)
61
- Array .copy(xs, offset, elems, this .size, length)
61
+ Array .copy(xs, offset, elems.nn , this .size, length)
62
62
size += length
63
63
this
64
64
}
@@ -68,8 +68,8 @@ sealed abstract class ArrayBuilder[T]
68
68
if (k > 0 ) {
69
69
ensureSize(this .size + k)
70
70
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)
73
73
}
74
74
size += k
75
75
} else if (k < 0 ) super .addAll(xs)
@@ -225,7 +225,7 @@ object ArrayBuilder {
225
225
* @tparam T type of elements for the array builder, subtype of `AnyRef` with a `ClassTag` context bound.
226
226
*/
227
227
@ 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 ] {
229
229
230
230
protected var elems : Array [T ] = _
231
231
@@ -251,7 +251,7 @@ object ArrayBuilder {
251
251
if (capacity != 0 && capacity == size) {
252
252
capacity = 0
253
253
val res = elems
254
- elems = null
254
+ elems = null . asInstanceOf [ Array [ T ]]
255
255
res
256
256
}
257
257
else mkArray(size)
@@ -298,7 +298,7 @@ object ArrayBuilder {
298
298
if (capacity != 0 && capacity == size) {
299
299
capacity = 0
300
300
val res = elems
301
- elems = null
301
+ elems = null . asInstanceOf [ Array [ Byte ]]
302
302
res
303
303
}
304
304
else mkArray(size)
@@ -340,7 +340,7 @@ object ArrayBuilder {
340
340
if (capacity != 0 && capacity == size) {
341
341
capacity = 0
342
342
val res = elems
343
- elems = null
343
+ elems = null . asInstanceOf [ Array [ Short ]]
344
344
res
345
345
}
346
346
else mkArray(size)
@@ -382,7 +382,7 @@ object ArrayBuilder {
382
382
if (capacity != 0 && capacity == size) {
383
383
capacity = 0
384
384
val res = elems
385
- elems = null
385
+ elems = null . asInstanceOf [ Array [ Char ]]
386
386
res
387
387
}
388
388
else mkArray(size)
@@ -424,7 +424,7 @@ object ArrayBuilder {
424
424
if (capacity != 0 && capacity == size) {
425
425
capacity = 0
426
426
val res = elems
427
- elems = null
427
+ elems = null . asInstanceOf [ Array [ Int ]]
428
428
res
429
429
}
430
430
else mkArray(size)
@@ -466,7 +466,7 @@ object ArrayBuilder {
466
466
if (capacity != 0 && capacity == size) {
467
467
capacity = 0
468
468
val res = elems
469
- elems = null
469
+ elems = null . asInstanceOf [ Array [ Long ]]
470
470
res
471
471
}
472
472
else mkArray(size)
@@ -508,7 +508,7 @@ object ArrayBuilder {
508
508
if (capacity != 0 && capacity == size) {
509
509
capacity = 0
510
510
val res = elems
511
- elems = null
511
+ elems = null . asInstanceOf [ Array [ Float ]]
512
512
res
513
513
}
514
514
else mkArray(size)
@@ -550,7 +550,7 @@ object ArrayBuilder {
550
550
if (capacity != 0 && capacity == size) {
551
551
capacity = 0
552
552
val res = elems
553
- elems = null
553
+ elems = null . asInstanceOf [ Array [ Double ]]
554
554
res
555
555
}
556
556
else mkArray(size)
@@ -592,7 +592,7 @@ object ArrayBuilder {
592
592
if (capacity != 0 && capacity == size) {
593
593
capacity = 0
594
594
val res = elems
595
- elems = null
595
+ elems = null . asInstanceOf [ Array [ Boolean ]]
596
596
res
597
597
}
598
598
else mkArray(size)
0 commit comments