Skip to content

Commit 704ee08

Browse files
committed
Make mutable/immutable Set capture checked
1 parent 3f2d39e commit 704ee08

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

tests/pos-special/stdlib/collection/immutable/Set.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ package immutable
1616

1717
import scala.collection.immutable.Set.Set4
1818
import scala.collection.mutable.{Builder, ReusableBuilder}
19+
import language.experimental.captureChecking
20+
import annotation.unchecked.uncheckedCaptures
1921

2022
/** Base trait for immutable set collections */
2123
trait Set[A] extends Iterable[A]
@@ -94,7 +96,7 @@ object Set extends IterableFactory[Set] {
9496

9597
def empty[A]: Set[A] = EmptySet.asInstanceOf[Set[A]]
9698

97-
def from[E](it: collection.IterableOnce[E]): Set[E] =
99+
def from[E](it: collection.IterableOnce[E]^): Set[E] =
98100
it match {
99101
// We want `SortedSet` (and subclasses, such as `BitSet`) to
100102
// rebuild themselves to avoid element type widening issues
@@ -128,7 +130,7 @@ object Set extends IterableFactory[Set] {
128130
private[collection] def emptyInstance: Set[Any] = EmptySet
129131

130132
@SerialVersionUID(3L)
131-
private abstract class SetNIterator[A](n: Int) extends AbstractIterator[A] with Serializable {
133+
private abstract class SetNIterator[A](n: Int) extends AbstractIterator[A], Serializable, Pure {
132134
private[this] var current = 0
133135
private[this] var remainder = n
134136
override def knownSize: Int = remainder
@@ -351,9 +353,9 @@ abstract class AbstractSet[A] extends scala.collection.AbstractSet[A] with Set[A
351353
* $multipleResults
352354
*/
353355
private final class SetBuilderImpl[A] extends ReusableBuilder[A, Set[A]] {
354-
private[this] var elems: Set[A] = Set.empty
356+
private[this] var elems: Set[A @uncheckedCaptures] = Set.empty
355357
private[this] var switchedToHashSetBuilder: Boolean = false
356-
private[this] var hashSetBuilder: HashSetBuilder[A] = _
358+
private[this] var hashSetBuilder: HashSetBuilder[A @uncheckedCaptures] = _
357359

358360
override def clear(): Unit = {
359361
elems = Set.empty
@@ -388,7 +390,7 @@ private final class SetBuilderImpl[A] extends ReusableBuilder[A, Set[A]] {
388390
this
389391
}
390392

391-
override def addAll(xs: IterableOnce[A]): this.type =
393+
override def addAll(xs: IterableOnce[A]^): this.type =
392394
if (switchedToHashSetBuilder) {
393395
hashSetBuilder.addAll(xs)
394396
this

tests/pos-special/stdlib/collection/mutable/Set.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package scala.collection.mutable
1414

1515
import scala.collection.{IterableFactory, IterableFactoryDefaults, IterableOps}
16+
import language.experimental.captureChecking
1617

1718
/** Base trait for mutable sets */
1819
trait Set[A]

0 commit comments

Comments
 (0)