Skip to content

Commit a785d54

Browse files
committed
Update to Scala 2.13.0-RC1
- Override factory methods everywhere - Remove temporary casts - Remove incorrect knownSize overrides
1 parent facd817 commit a785d54

13 files changed

+90
-74
lines changed

build.sbt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// TODO Make it a cross project including Scala.js
22

3-
resolvers += "scala-integration" at "https://scala-ci.typesafe.com/artifactory/scala-integration/"
4-
5-
scalaVersion := "2.13.0-pre-370f5c8"
3+
scalaVersion := "2.13.0-RC1"
64

75
organization := "org.scala-lang"
86

src/main/scala/scala/collection/MultiDict.scala

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package scala.collection
22

3-
import annotation.unchecked.uncheckedVariance
43
import scala.util.hashing.MurmurHash3
54

65
/**
@@ -14,10 +13,11 @@ trait MultiDict[K, V]
1413
with MultiDictOps[K, V, MultiDict, MultiDict[K, V]]
1514
with Equals {
1615

17-
def multiMapFactory: MapFactory[MultiDictCC] = MultiDict
18-
19-
override protected[this] def fromSpecific(coll: IterableOnce[(K, V)]): MultiDictCC[K, V] = multiMapFactory.from(coll)
20-
override protected[this] def newSpecificBuilder: mutable.Builder[(K, V), MultiDictCC[K, V]] = multiMapFactory.newBuilder[K, V]
16+
def multiDictFactory: MapFactory[MultiDict] = MultiDict
17+
override protected def fromSpecific(coll: IterableOnce[(K, V)]): MultiDict[K, V] = multiDictFactory.from(coll)
18+
override protected def newSpecificBuilder: mutable.Builder[(K, V), MultiDict[K, V]] = multiDictFactory.newBuilder
19+
override def empty: MultiDict[K, V] = multiDictFactory.empty
20+
override def withFilter(p: ((K, V)) => Boolean): MultiDictOps.WithFilter[K, V, Iterable, MultiDict] = new MultiDictOps.WithFilter(this, p)
2121

2222
def canEqual(that: Any): Boolean = true
2323

@@ -43,18 +43,16 @@ trait MultiDict[K, V]
4343
trait MultiDictOps[K, V, +CC[X, Y] <: MultiDict[X, Y], +C <: MultiDict[K, V]]
4444
extends IterableOps[(K, V), Iterable, C] {
4545

46-
protected[this] type MultiDictCC[K, V] = CC[K, V] @uncheckedVariance
47-
48-
def multiMapFactory: MapFactory[MultiDictCC]
46+
def multiDictFactory: MapFactory[CC]
4947

50-
protected[this] def multiMapFromIterable[L, W](it: Iterable[(L, W)]): CC[L, W] =
51-
multiMapFactory.from(it)
48+
protected def multiDictFromIterable[L, W](it: Iterable[(L, W)]): CC[L, W] =
49+
multiDictFactory.from(it)
5250

53-
protected[this] def fromSpecificSets(it: Iterable[(K, Set[V])]): C =
51+
protected def fromSpecificSets(it: Iterable[(K, Set[V])]): C =
5452
fromSpecific(it.view.flatMap { case (k, vs) => vs.view.map(v => (k, v)) })
5553

56-
protected[this] def fromSets[L, W](it: Iterable[(L, Set[W])]): CC[L, W] =
57-
multiMapFromIterable(it.view.flatMap { case (k, vs) => vs.view.map(v => (k, v)) })
54+
protected def fromSets[L, W](it: Iterable[(L, Set[W])]): CC[L, W] =
55+
multiDictFromIterable(it.view.flatMap { case (k, vs) => vs.view.map(v => (k, v)) })
5856

5957
/**
6058
* @return All the elements contained in this multidict, grouped by key
@@ -104,7 +102,7 @@ trait MultiDictOps[K, V, +CC[X, Y] <: MultiDict[X, Y], +C <: MultiDict[K, V]]
104102
* @tparam W new type of values
105103
*/
106104
def map[L, W](f: ((K, V)) => (L, W)): CC[L, W] =
107-
multiMapFromIterable(new View.Map(toIterable, f))
105+
multiDictFromIterable(new View.Map(toIterable, f))
108106

109107
/**
110108
* @return a multidict that contains all the entries of `this` multidict,
@@ -115,7 +113,7 @@ trait MultiDictOps[K, V, +CC[X, Y] <: MultiDict[X, Y], +C <: MultiDict[K, V]]
115113
* @tparam W new type of values
116114
*/
117115
def flatMap[L, W](f: ((K, V)) => IterableOnce[(L, W)]): CC[L, W] =
118-
multiMapFromIterable(new View.FlatMap(toIterable, f))
116+
multiDictFromIterable(new View.FlatMap(toIterable, f))
119117

120118
/**
121119
* @return a multidict that contains all the entries of `this` multidict
@@ -138,9 +136,6 @@ trait MultiDictOps[K, V, +CC[X, Y] <: MultiDict[X, Y], +C <: MultiDict[K, V]]
138136
case _ => iterator ++ that.iterator
139137
})
140138

141-
override def withFilter(p: ((K, V)) => Boolean): MultiDictOps.WithFilter[K, V, IterableCC, CC] =
142-
new MultiDictOps.WithFilter(this, p)
143-
144139
/**
145140
* @return Whether there exists a value associated with the given `key`
146141
* that satisfies the given predicate `p`
@@ -211,10 +206,10 @@ object MultiDictOps {
211206
) extends IterableOps.WithFilter[(K, V), IterableCC](`this`, p) {
212207

213208
def map[L, W](f: ((K, V)) => (L, W)): CC[L, W] =
214-
`this`.multiMapFactory.from(new View.Map(filtered, f))
209+
`this`.multiDictFactory.from(new View.Map(filtered, f))
215210

216211
def flatMap[L, W](f: ((K, V)) => IterableOnce[(L, W)]): CC[L, W] =
217-
`this`.multiMapFactory.from(new View.FlatMap(filtered, f))
212+
`this`.multiDictFactory.from(new View.FlatMap(filtered, f))
218213

219214
override def withFilter(q: ((K, V)) => Boolean): WithFilter[K, V, IterableCC, CC] =
220215
new WithFilter[K, V, IterableCC, CC](`this`, (kv: (K, V)) => p(kv) && q(kv))

src/main/scala/scala/collection/MultiSet.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ trait MultiSet[A]
1212
with MultiSetOps[A, MultiSet, MultiSet[A]]
1313
with Equals {
1414

15+
override def iterableFactory: IterableFactory[MultiSet] = MultiSet
16+
override protected def fromSpecific(coll: IterableOnce[A]): MultiSet[A] = iterableFactory.from(coll)
17+
override protected def newSpecificBuilder: mutable.Builder[A, MultiSet[A]] = iterableFactory.newBuilder
18+
override def empty: MultiSet[A] = iterableFactory.empty
19+
1520
def canEqual(that: Any): Boolean = true
1621

1722
override def equals(o: Any): Boolean = o match {

src/main/scala/scala/collection/SortedMultiDict.scala

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package scala.collection
22

3-
import annotation.unchecked.uncheckedVariance
4-
53
/**
64
* A multidict whose keys are sorted
75
* @tparam K the type of keys
@@ -13,19 +11,21 @@ trait SortedMultiDict[K, V]
1311

1412
def unsorted: MultiDict[K, V] = this
1513

16-
override protected[this] def fromSpecific(coll: IterableOnce[(K, V)]): SortedMultiDictCC[K, V] = sortedMultiMapFactory.from(coll)
17-
override protected[this] def newSpecificBuilder: mutable.Builder[(K, V), SortedMultiDictCC[K, V]] = sortedMultiMapFactory.newBuilder[K, V]
14+
def sortedMultiDictFactory: SortedMapFactory[SortedMultiDict] = SortedMultiDict
15+
override protected def fromSpecific(coll: IterableOnce[(K, V)]): SortedMultiDict[K, V] = sortedMultiDictFactory.from(coll)
16+
override protected def newSpecificBuilder: mutable.Builder[(K, V), SortedMultiDict[K, V]] = sortedMultiDictFactory.newBuilder
17+
override def empty: SortedMultiDict[K, V] = sortedMultiDictFactory.empty
18+
override def withFilter(p: ((K, V)) => Boolean): SortedMultiDictOps.WithFilter[K, V, Iterable, MultiDict, SortedMultiDict] = new SortedMultiDictOps.WithFilter(this, p)
19+
1820
}
1921

2022
trait SortedMultiDictOps[K, V, +CC[X, Y] <: MultiDict[X, Y], +C <: MultiDict[K, V]]
2123
extends MultiDictOps[K, V, MultiDict, C]
2224
with SortedOps[K, C] {
2325

24-
protected[this] type SortedMultiDictCC[X, Y] = CC[X, Y] @uncheckedVariance
26+
def sortedMultiDictFactory: SortedMapFactory[CC]
2527

26-
def sortedMultiMapFactory: SortedMapFactory[SortedMultiDictCC]
27-
28-
protected[this] def sortedFromIterable[L : Ordering, W](it: Iterable[(L, W)]): CC[L, W]
28+
protected[this] def sortedFromIterable[L : Ordering, W](it: Iterable[(L, W)]): CC[L, W] = sortedMultiDictFactory.from(it)
2929
protected[this] def sortedFromSets[L : Ordering, W](it: Iterable[(L, Set[W])]): CC[L, W] =
3030
sortedFromIterable(it.view.flatMap { case (l, ws) => ws.map(w => (l, w)) })
3131

@@ -52,9 +52,6 @@ trait SortedMultiDictOps[K, V, +CC[X, Y] <: MultiDict[X, Y], +C <: MultiDict[K,
5252
rangeUntil(next)
5353
}
5454

55-
override def withFilter(p: ((K, V)) => Boolean): SortedMultiDictOps.WithFilter[K, V, IterableCC, MultiDictCC, CC] =
56-
new SortedMultiDictOps.WithFilter[K, V, IterableCC, MultiDictCC, CC](this, p)
57-
5855
/**
5956
* @return a sorted multidict that contains all the entries of `this` sorted multidict,
6057
* transformed by the function `f`
@@ -134,10 +131,10 @@ object SortedMultiDictOps {
134131
) extends MultiDictOps.WithFilter[K, V, IterableCC, MultiDictCC](`this`, p) {
135132

136133
def map[L : Ordering, W](f: ((K, V)) => (L, W)): CC[L, W] =
137-
`this`.sortedMultiMapFactory.from(new View.Map(filtered, f))
134+
`this`.sortedMultiDictFactory.from(new View.Map(filtered, f))
138135

139136
def flatMap[L : Ordering, W](f: ((K, V)) => IterableOnce[(L, W)]): CC[L, W] =
140-
`this`.sortedMultiMapFactory.from(new View.FlatMap(filtered, f))
137+
`this`.sortedMultiDictFactory.from(new View.FlatMap(filtered, f))
141138

142139
override def withFilter(q: ((K, V)) => Boolean): WithFilter[K, V, IterableCC, MultiDictCC, CC] =
143140
new WithFilter[K, V, IterableCC, MultiDictCC, CC](`this`, kv => p(kv) && q(kv))

src/main/scala/scala/collection/SortedMultiSet.scala

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,22 @@ trait SortedMultiSet[A]
1212

1313
def unsorted: MultiSet[A] = this
1414

15-
override protected[this] def fromSpecific(coll: IterableOnce[A]): SortedIterableCC[A] = sortedIterableFactory.from(coll)
16-
override protected[this] def newSpecificBuilder: mutable.Builder[A, SortedIterableCC[A]] = sortedIterableFactory.newBuilder[A]
15+
def sortedIterableFactory: SortedIterableFactory[SortedMultiSet] = SortedMultiSet
16+
override protected def fromSpecific(coll: IterableOnce[A]): SortedMultiSet[A] = sortedIterableFactory.from(coll)
17+
override protected def newSpecificBuilder: mutable.Builder[A, SortedMultiSet[A]] = sortedIterableFactory.newBuilder
18+
override def empty: SortedMultiSet[A] = sortedIterableFactory.empty
19+
override def withFilter(p: A => Boolean): SortedMultiSetOps.WithFilter[A, MultiSet, SortedMultiSet] = new SortedMultiSetOps.WithFilter(this, p)
1720

18-
protected[this] def sortedFromIterable[B : Ordering](it: scala.collection.Iterable[B]): SortedIterableCC[B] = sortedIterableFactory.from(it)
19-
20-
def sortedIterableFactory: SortedIterableFactory[SortedIterableCC] = SortedMultiSet
2121
}
2222

2323
trait SortedMultiSetOps[A, +CC[X] <: MultiSet[X], +C <: MultiSet[A]]
2424
extends MultiSetOps[A, MultiSet, C]
2525
with SortedOps[A, C] {
2626

27-
protected[this] type SortedIterableCC[X] = CC[X] @uncheckedVariance
28-
29-
def sortedIterableFactory: SortedIterableFactory[SortedIterableCC]
27+
def sortedIterableFactory: SortedIterableFactory[CC]
3028

31-
protected[this] def sortedFromIterable[B : Ordering](it: Iterable[B]): SortedIterableCC[B]
32-
protected[this] def sortedFromOccurrences[B : Ordering](it: Iterable[(B, Int)]): CC[B] =
29+
protected def sortedFromIterable[B : Ordering](it: Iterable[B]): CC[B] = sortedIterableFactory.from(it)
30+
protected def sortedFromOccurrences[B : Ordering](it: Iterable[(B, Int)]): CC[B] =
3331
sortedFromIterable(it.view.flatMap { case (b, n) => new View.Fill(n)(b) })
3432

3533
/** `this` sorted multiset upcasted to an unsorted multiset */
@@ -62,9 +60,6 @@ trait SortedMultiSetOps[A, +CC[X] <: MultiSet[X], +C <: MultiSet[A]]
6260
rangeUntil(next)
6361
}
6462

65-
override def withFilter(p: A => Boolean): SortedMultiSetOps.WithFilter[A, IterableCC, CC] =
66-
new SortedMultiSetOps.WithFilter(this, p)
67-
6863
/** Builds a new sorted multiset by applying a function to all elements of this sorted multiset.
6964
*
7065
* @param f the function to apply to each element.

src/main/scala/scala/collection/immutable/MultiDict.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package scala
22
package collection
33
package immutable
44

5-
import collection.decorators._
65
import scala.collection.mutable.{Builder, ImmutableBuilder}
76

87
/**
@@ -18,7 +17,12 @@ class MultiDict[K, V] private (elems: Map[K, Set[V]])
1817

1918
def sets: Map[K, Set[V]] = elems
2019

21-
override def multiMapFactory: MapFactory[MultiDict] = MultiDict
20+
override def multiDictFactory: MapFactory[MultiDict] = MultiDict
21+
override protected def fromSpecific(coll: IterableOnce[(K, V)]): MultiDict[K, V] = multiDictFactory.from(coll)
22+
override protected def newSpecificBuilder: mutable.Builder[(K, V), MultiDict[K, V]] = multiDictFactory.newBuilder[K, V]
23+
override def empty: MultiDict[K, V] = multiDictFactory.empty
24+
override def withFilter(p: ((K, V)) => Boolean): MultiDictOps.WithFilter[K, V, Iterable, MultiDict] =
25+
new MultiDictOps.WithFilter(this, p)
2226

2327
/**
2428
* @return a new multidict that contains all the entries of this multidict

src/main/scala/scala/collection/immutable/MultiSet.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ trait MultiSet[A]
1414
with MultiSetOps[A, MultiSet, MultiSet[A]] {
1515

1616
override def iterableFactory: IterableFactory[MultiSet] = MultiSet
17+
override protected def fromSpecific(coll: IterableOnce[A]): MultiSet[A] = iterableFactory.from(coll)
18+
override protected def newSpecificBuilder: mutable.Builder[A, MultiSet[A]] = iterableFactory.newBuilder
19+
override def empty: MultiSet[A] = iterableFactory.empty
20+
1721
}
1822

1923
trait MultiSetOps[A, +CC[X] <: MultiSet[X], +C <: MultiSet[A]] extends collection.MultiSetOps[A, CC, C] {
@@ -44,7 +48,6 @@ class MultiSetImpl[A] private[immutable] (elems: Map[A, Int]) extends MultiSet[A
4448
def occurrences: Map[A, Int] = elems
4549

4650
override def iterableFactory: IterableFactory[MultiSet] = MultiSet
47-
override def knownSize = elems.knownSize
4851

4952
/**
5053
* @return an immutable multiset containing all the elements of this multiset

src/main/scala/scala/collection/immutable/SortedMultiDict.scala

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@ class SortedMultiDict[K, V] private (elems: SortedMap[K, Set[V]])(implicit val o
1515
with collection.SortedMultiDictOps[K, V, SortedMultiDict, SortedMultiDict[K, V]]
1616
with collection.IterableOps[(K, V), Iterable, SortedMultiDict[K, V]] {
1717

18-
def sortedMultiMapFactory: SortedMapFactory[SortedMultiDict] = SortedMultiDict
19-
20-
protected[this] def sortedFromIterable[L: Ordering, W](it: collection.Iterable[(L, W)]): SortedMultiDict[L, W] = sortedMultiMapFactory.from(it)
18+
override def sortedMultiDictFactory: SortedMapFactory[SortedMultiDict] = SortedMultiDict
19+
override protected def fromSpecific(coll: IterableOnce[(K, V)]): SortedMultiDict[K, V] = sortedMultiDictFactory.from(coll)
20+
override protected def newSpecificBuilder: mutable.Builder[(K, V), SortedMultiDict[K, V]] = sortedMultiDictFactory.newBuilder[K, V]
21+
override def empty: SortedMultiDict[K, V] = sortedMultiDictFactory.empty
22+
override def withFilter(p: ((K, V)) => Boolean): SortedMultiDictOps.WithFilter[K, V, Iterable, collection.MultiDict, SortedMultiDict] =
23+
new SortedMultiDictOps.WithFilter[K, V, Iterable, collection.MultiDict, SortedMultiDict](this, p)
2124

2225
def sets: SortedMap[K, Set[V]] = elems
2326

@@ -32,7 +35,7 @@ class SortedMultiDict[K, V] private (elems: SortedMap[K, Set[V]])(implicit val o
3235
new SortedMultiDict(elems.updatedWith(key) {
3336
case None => Some(Set(value))
3437
case Some(vs) => Some(vs + value)
35-
}.asInstanceOf[SortedMap[K, Set[V]]] /* temporary */)
38+
})
3639

3740
/** Alias for `add` */
3841
@`inline` final def + (kv: (K, V)): SortedMultiDict[K, V] = add(kv._1, kv._2)
@@ -47,7 +50,7 @@ class SortedMultiDict[K, V] private (elems: SortedMap[K, Set[V]])(implicit val o
4750
val updatedVs = vs - value
4851
if (updatedVs.nonEmpty) Some(updatedVs) else None
4952
case None => None
50-
}.asInstanceOf[SortedMap[K, Set[V]]] /* temporary */)
53+
})
5154

5255
/** Alias for `remove` */
5356
@`inline` final def - (kv: (K, V)): SortedMultiDict[K, V] = remove(kv._1, kv._2)

src/main/scala/scala/collection/immutable/SortedMultiSet.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ class SortedMultiSet[A] private (elems: SortedMap[A, Int])(implicit val ordering
1717

1818
def occurrences: SortedMap[A, Int] = elems
1919

20-
override def iterableFactory: IterableFactory[MultiSet] = MultiSet
2120
override def sortedIterableFactory: SortedIterableFactory[SortedMultiSet] = SortedMultiSet
21+
override protected def fromSpecific(coll: IterableOnce[A]): SortedMultiSet[A] = sortedIterableFactory.from(coll)
22+
override protected def newSpecificBuilder: mutable.Builder[A, SortedMultiSet[A]] = sortedIterableFactory.newBuilder[A]
23+
override def empty: SortedMultiSet[A] = sortedIterableFactory.empty
24+
override def withFilter(p: A => Boolean): SortedMultiSetOps.WithFilter[A, MultiSet, SortedMultiSet] =
25+
new SortedMultiSetOps.WithFilter(this, p)
2226

2327
def rangeImpl(from: Option[A], until: Option[A]): SortedMultiSet[A] =
2428
new SortedMultiSet(elems.rangeImpl(from, until))
@@ -32,7 +36,7 @@ class SortedMultiSet[A] private (elems: SortedMap[A, Int])(implicit val ordering
3236
new SortedMultiSet(elems.updatedWith(elem) {
3337
case None => Some(1)
3438
case Some(n) => Some(n + 1)
35-
}.asInstanceOf[SortedMap[A, Int]] /* temporary */)
39+
})
3640

3741
/**
3842
* @return an immutable sorted multiset containing all the elements of
@@ -44,7 +48,7 @@ class SortedMultiSet[A] private (elems: SortedMap[A, Int])(implicit val ordering
4448
new SortedMultiSet(elems.updatedWith(elem) {
4549
case Some(n) => if (n > 1) Some(n - 1) else None
4650
case None => None
47-
}.asInstanceOf[SortedMap[A, Int]] /* temporary */)
51+
})
4852
}
4953

5054
object SortedMultiSet extends SortedIterableFactory[SortedMultiSet] {

src/main/scala/scala/collection/mutable/MultiDict.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@ package scala
22
package collection
33
package mutable
44

5-
import collection.decorators._
6-
75
/**
86
* A mutable multidict
97
* @tparam K the type of keys
108
* @tparam V the type of values
119
*/
1210
class MultiDict[K, V] private (elems: Map[K, Set[V]])
1311
extends collection.MultiDict[K, V]
12+
with Iterable[(K, V)]
13+
with IterableOps[(K, V), Iterable, MultiDict[K, V]]
1414
with collection.MultiDictOps[K, V, MultiDict, MultiDict[K, V]]
1515
with Growable[(K, V)]
1616
with Shrinkable[(K, V)] {
1717

18-
override def multiMapFactory: MapFactory[MultiDict] = MultiDict
19-
override def knownSize = elems.knownSize
18+
override def multiDictFactory: MapFactory[MultiDict] = MultiDict
19+
override protected def fromSpecific(coll: IterableOnce[(K, V)]): MultiDict[K, V] = multiDictFactory.from(coll)
20+
override protected def newSpecificBuilder: mutable.Builder[(K, V), MultiDict[K, V]] = multiDictFactory.newBuilder[K, V]
21+
override def empty: MultiDict[K, V] = multiDictFactory.empty
22+
override def withFilter(p: ((K, V)) => Boolean): MultiDictOps.WithFilter[K, V, Iterable, MultiDict] =
23+
new MultiDictOps.WithFilter(this, p)
2024

2125
def sets: collection.Map[K, collection.Set[V]] = elems
2226

src/main/scala/scala/collection/mutable/MultiSet.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ trait MultiSet[A]
1212
with Shrinkable [A] {
1313

1414
override def iterableFactory: IterableFactory[MultiSet] = MultiSet
15+
override protected def fromSpecific(coll: IterableOnce[A]): MultiSet[A] = iterableFactory.from(coll)
16+
override protected def newSpecificBuilder: mutable.Builder[A, MultiSet[A]] = iterableFactory.newBuilder
17+
override def empty: MultiSet[A] = iterableFactory.empty
18+
1519
override def knownSize = super[Growable].knownSize
1620
}
1721

1822
class MultiSetImpl[A] private[mutable] (val elems: Map[A, Int]) extends MultiSet[A] {
1923

20-
override def knownSize = elems.knownSize
21-
2224
def occurrences: collection.Map[A, Int] = elems
2325

2426
def addOne(elem: A): this.type = {

0 commit comments

Comments
 (0)