@@ -124,7 +124,6 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
124124 private [this ] var hd : A = _
125125 private [this ] var hdDefined : Boolean = false
126126
127-
128127 def head : A = {
129128 if (! hdDefined) {
130129 hd = next()
@@ -161,12 +160,12 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
161160
162161 require(size >= 1 && step >= 1 , f " size= $size%d and step= $step%d, but both must be positive " )
163162
164- private [this ] var buffer : Array [B ] = null // current result
165- private [this ] var prev : Array [B ] = null // if sliding, overlap from previous result
163+ private [this ] var buffer : Array [B ] | Null = null // current result
164+ private [this ] var prev : Array [B ] | Null = null // if sliding, overlap from previous result
166165 private [this ] var first = true // if !first, advancing may skip ahead
167166 private [this ] var filled = false // whether the buffer is "hot"
168167 private [this ] var partial = true // whether to emit partial sequence
169- private [this ] var padding : () -> B = null // what to pad short sequences with
168+ private [this ] var padding : (( ) -> B ) | Null = null // what to pad short sequences with
170169 private [this ] def pad = padding != null // irrespective of partial flag
171170 private [this ] def newBuilder = {
172171 val b = ArrayBuilder .make[Any ]
@@ -189,7 +188,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
189188 * @note This method is mutually exclusive with `withPartial`.
190189 * @group Configuration
191190 */
192- def withPadding (x : - > B ): this .type = {
191+ def withPadding (x : = > B ): this .type = {
193192 padding = () => x
194193 partial = true // redundant, as padding always results in complete segment
195194 this
@@ -230,7 +229,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
230229 val builder = newBuilder
231230 var done = false
232231 // keep prefix of previous buffer if stepping
233- if (prev != null ) builder.addAll(prev)
232+ if (prev != null ) builder.addAll(prev.nn )
234233 // skip ahead
235234 if (! first && step > size) {
236235 var dropping = step - size
@@ -251,7 +250,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
251250 if (index < size && pad) {
252251 builder.sizeHint(size)
253252 while (index < size) {
254- builder.addOne(padding())
253+ builder.addOne(padding.nn ())
255254 index += 1
256255 }
257256 }
@@ -275,11 +274,11 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
275274 filled = false
276275 // if stepping, retain overlap in prev
277276 if (step < size) {
278- if (first) prev = buffer.drop(step)
279- else if (buffer.length == size) Array .copy(src = buffer, srcPos = step, dest = prev, destPos = 0 , length = size - step)
277+ if (first) prev = buffer.nn. drop(step)
278+ else if (buffer.nn. length == size) Array .copy(src = buffer.nn , srcPos = step, dest = prev.nn , destPos = 0 , length = size - step)
280279 else prev = null
281280 }
282- val res = immutable.ArraySeq .unsafeWrapArray(buffer).asInstanceOf [immutable.ArraySeq [B ]]
281+ val res = immutable.ArraySeq .unsafeWrapArray(buffer.nn ).asInstanceOf [immutable.ArraySeq [B ]]
283282 buffer = null
284283 first = false
285284 res
@@ -702,7 +701,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
702701 * handling of structural calls. It's not what's intended here.
703702 */
704703 final class Leading extends AbstractIterator [A ] {
705- private [this ] var lookahead : mutable.Queue [A ] = null
704+ private [this ] var lookahead : mutable.Queue [A ] | Null = null
706705 private [this ] var hd : A = _
707706 /* Status is kept with magic numbers
708707 * 1 means next element is in hd and we're still reading into this iterator
@@ -713,10 +712,10 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
713712 private [this ] var status = 0
714713 private def store (a : A ): Unit = {
715714 if (lookahead == null ) lookahead = new mutable.Queue [A ]
716- lookahead += a
715+ lookahead.nn += a
717716 }
718717 def hasNext = {
719- if (status < 0 ) (lookahead ne null ) && lookahead.nonEmpty
718+ if (status < 0 ) (lookahead ne null ) && lookahead.nn. nonEmpty
720719 else if (status > 0 ) true
721720 else {
722721 if (self.hasNext) {
@@ -730,7 +729,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
730729 def next () = {
731730 if (hasNext) {
732731 if (status == 1 ) { status = 0 ; hd }
733- else lookahead.dequeue()
732+ else lookahead.nn. dequeue()
734733 }
735734 else Iterator .empty.next()
736735 }
@@ -757,7 +756,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
757756 val leading = new Leading
758757
759758 val trailing = new AbstractIterator [A ] {
760- private [this ] var myLeading = leading
759+ private [this ] var myLeading : Leading | Null = leading
761760 /* Status flag meanings:
762761 * -1 not yet accessed
763762 * 0 single element waiting in leading
@@ -772,13 +771,13 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
772771 case 1 => if (self.hasNext) { status = 2 ; true } else { status = 3 ; false }
773772 case 0 => true
774773 case _ =>
775- if (myLeading.finish()) { status = 0 ; true } else { status = 1 ; myLeading = null ; hasNext }
774+ if (myLeading.nn. finish()) { status = 0 ; true } else { status = 1 ; myLeading = null ; hasNext }
776775 }
777776 def next () = {
778777 if (hasNext) {
779778 if (status == 0 ) {
780779 status = 1
781- val res = myLeading.trailer
780+ val res = myLeading.nn. trailer
782781 myLeading = null
783782 res
784783 } else {
@@ -873,7 +872,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
873872 */
874873 def duplicate : (Iterator [A ]^ {this }, Iterator [A ]^ {this }) = {
875874 val gap = new scala.collection.mutable.Queue [A ]
876- var ahead : Iterator [A ]^ = null
875+ var ahead : ( Iterator [A ]^ ) | Null = null
877876 class Partner extends AbstractIterator [A ] {
878877 override def knownSize : Int = self.synchronized {
879878 val thisSize = self.knownSize
@@ -1149,10 +1148,13 @@ object Iterator extends IterableFactory[Iterator] {
11491148 /** Creates an iterator to which other iterators can be appended efficiently.
11501149 * Nested ConcatIterators are merged to avoid blowing the stack.
11511150 */
1152- private final class ConcatIterator [+ A ](val from : Iterator [A @ uncheckedVariance]^ ) extends AbstractIterator [A ] {
1153- private var current : Iterator [A ]^ {from} = from
1154- private var tail : ConcatIteratorCell [A @ uncheckedVariance] = null
1155- private var last : ConcatIteratorCell [A @ uncheckedVariance] = null
1151+ private final class ConcatIterator [+ A ](val from : (Iterator [A @ uncheckedVariance]^ ) | Null ) extends AbstractIterator [A ] {
1152+ @ annotation.stableNull
1153+ private var current : Iterator [A ]^ {from} | Null = from
1154+ @ annotation.stableNull
1155+ private var tail : ConcatIteratorCell [A @ uncheckedVariance] | Null = null
1156+ @ annotation.stableNull
1157+ private var last : ConcatIteratorCell [A @ uncheckedVariance] | Null = null
11561158 private var currentHasNextChecked = false
11571159
11581160 def hasNext =
@@ -1171,7 +1173,7 @@ object Iterator extends IterableFactory[Iterator] {
11711173 currentHasNextChecked = c.currentHasNextChecked
11721174 if (c.tail != null ) {
11731175 if (last == null ) last = c.last
1174- c.last.tail = tail
1176+ c.last.nn. tail = tail
11751177 tail = c.tail
11761178 }
11771179 merge()
@@ -1186,9 +1188,9 @@ object Iterator extends IterableFactory[Iterator] {
11861188 false
11871189 }
11881190 else {
1189- current = tail.headIterator
1190- if (last eq tail) last = last.tail
1191- tail = tail.tail
1191+ current = tail.nn. headIterator
1192+ if (last eq tail) last = last.nn. tail
1193+ tail = tail.nn. tail
11921194 merge()
11931195 if (currentHasNextChecked) true
11941196 else if (current != null && current.hasNext) {
@@ -1203,7 +1205,7 @@ object Iterator extends IterableFactory[Iterator] {
12031205 def next () =
12041206 if (hasNext) {
12051207 currentHasNextChecked = false
1206- current.next()
1208+ current.nn. next()
12071209 } else Iterator .empty.next()
12081210
12091211 override def concat [B >: A ](that : => IterableOnce [B ]^ ): Iterator [B ]^ {this , that} = {
@@ -1213,15 +1215,15 @@ object Iterator extends IterableFactory[Iterator] {
12131215 last = c
12141216 }
12151217 else {
1216- last.tail = c
1218+ last.nn. tail = c
12171219 last = c
12181220 }
12191221 if (current == null ) current = Iterator .empty
12201222 this
12211223 }
12221224 }
12231225
1224- private [this ] final class ConcatIteratorCell [A ](head : => IterableOnce [A ]^ , var tail : ConcatIteratorCell [A ]^ ) {
1226+ private [this ] final class ConcatIteratorCell [A ](head : => IterableOnce [A ]^ , var tail : ( ConcatIteratorCell [A ]^ ) | Null ) {
12251227 def headIterator : Iterator [A ]^ {this } = head.iterator
12261228 }
12271229
@@ -1289,7 +1291,7 @@ object Iterator extends IterableFactory[Iterator] {
12891291 */
12901292 private final class UnfoldIterator [A , S ](init : S )(f : S => Option [(A , S )]) extends AbstractIterator [A ] {
12911293 private [this ] var state : S = init
1292- private [this ] var nextResult : Option [(A , S )] = null
1294+ private [this ] var nextResult : Option [(A , S )] | Null = null
12931295
12941296 override def hasNext : Boolean = {
12951297 if (nextResult eq null ) {
@@ -1300,12 +1302,12 @@ object Iterator extends IterableFactory[Iterator] {
13001302 }
13011303 state = null .asInstanceOf [S ] // allow GC
13021304 }
1303- nextResult.isDefined
1305+ nextResult.nn. isDefined
13041306 }
13051307
13061308 override def next (): A = {
13071309 if (hasNext) {
1308- val (value, newState) = nextResult.get
1310+ val (value, newState) = nextResult.nn. get
13091311 state = newState
13101312 nextResult = null
13111313 value
0 commit comments