diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f0e0c85..aeb17eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false matrix: java: [8, 11, 17] - scala: [2.13.8] + scala: [2.13.8, 3.1.2-RC1] runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 diff --git a/build.sbt b/build.sbt index 3aa152c..22a2868 100644 --- a/build.sbt +++ b/build.sbt @@ -1,4 +1,5 @@ -ThisBuild / scalaVersion := "2.13.8" +ThisBuild / scalaVersion := "3.1.2-RC1" +ThisBuild / crossScalaVersions := Seq((ThisBuild / scalaVersion).value, "2.13.8") lazy val root = project.in(file(".")) .aggregate(collectionContrib.jvm, collectionContrib.js) @@ -15,10 +16,20 @@ lazy val collectionContrib = crossProject(JVMPlatform, JSPlatform) .settings(ScalaModulePlugin.scalaModuleSettings) .settings( name := "scala-collection-contrib", - versionPolicyIntention := Compatibility.BinaryCompatible, + versionPolicyIntention := Compatibility.None, scalaModuleAutomaticModuleName := Some("scala.collection.contrib"), - Compile / compile / scalacOptions ++= Seq("-opt-warnings", "-language:higherKinds", "-deprecation", "-feature", "-Xfatal-warnings", "-Wconf:origin=scala.collection.IterableOps.toIterable:s"), - Compile / doc / scalacOptions ++= Seq("-implicits", "-groups", "-nowarn"), + Compile / compile / scalacOptions ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, _)) => Seq("-opt-warnings", "-Werror", "-Wconf:origin=scala.collection.IterableOps.toIterable:s") + case Some((3, _)) => Seq("-Xfatal-warnings", "-Yscala-release:3.0", "-Wconf:cat=deprecation:s") + } + }, + Compile / doc / scalacOptions ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, _)) => Seq("-implicits", "-groups", "-nowarn") + case Some((3, _)) => Seq.empty + } + }, testOptions += Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s", "-a"), Test / parallelExecution := false, // why? libraryDependencies ++= Seq( diff --git a/src/main/scala/scala/collection/decorators/package.scala b/src/main/scala/scala/collection/decorators/package.scala index 547891a..e13ccb9 100644 --- a/src/main/scala/scala/collection/decorators/package.scala +++ b/src/main/scala/scala/collection/decorators/package.scala @@ -8,13 +8,13 @@ package object decorators { implicit def iteratorDecorator[A](it: Iterator[A]): IteratorDecorator[A] = new IteratorDecorator[A](it) - implicit def IterableDecorator[C](coll: C)(implicit it: IsIterable[C]): IterableDecorator[C, it.type] = + implicit def iterableDecorator[C](coll: C)(implicit it: IsIterable[C]): IterableDecorator[C, it.type] = new IterableDecorator(coll)(it) - implicit def SeqDecorator[C](coll: C)(implicit seq: IsSeq[C]): SeqDecorator[C, seq.type] = + implicit def seqDecorator[C](coll: C)(implicit seq: IsSeq[C]): SeqDecorator[C, seq.type] = new SeqDecorator(coll)(seq) - implicit def MapDecorator[C](coll: C)(implicit map: IsMap[C]): MapDecorator[C, map.type] = + implicit def mapDecorator[C](coll: C)(implicit map: IsMap[C]): MapDecorator[C, map.type] = new MapDecorator(coll)(map) implicit def bitSetDecorator[C <: BitSet with BitSetOps[C]](bs: C): BitSetDecorator[C] = diff --git a/src/main/scala/scala/collection/immutable/MultiDict.scala b/src/main/scala/scala/collection/immutable/MultiDict.scala index 1a750ae..1114b98 100644 --- a/src/main/scala/scala/collection/immutable/MultiDict.scala +++ b/src/main/scala/scala/collection/immutable/MultiDict.scala @@ -69,7 +69,7 @@ object MultiDict extends MapFactory[MultiDict] { def from[K, V](source: IterableOnce[(K, V)]): MultiDict[K, V] = source match { - case mm: MultiDict[K, V] => mm + case mm: MultiDict[K, V] @unchecked => mm case _ => (newBuilder[K, V] ++= source).result() } diff --git a/src/main/scala/scala/collection/immutable/MultiSet.scala b/src/main/scala/scala/collection/immutable/MultiSet.scala index 14d0b80..a674c3b 100644 --- a/src/main/scala/scala/collection/immutable/MultiSet.scala +++ b/src/main/scala/scala/collection/immutable/MultiSet.scala @@ -78,7 +78,7 @@ object MultiSet extends IterableFactory[MultiSet] { def from[A](source: IterableOnce[A]): MultiSet[A] = source match { - case ms: MultiSet[A] => ms + case ms: MultiSet[A] @unchecked => ms case _ => (newBuilder[A] ++= source).result() } diff --git a/src/main/scala/scala/collection/immutable/SortedMultiDict.scala b/src/main/scala/scala/collection/immutable/SortedMultiDict.scala index 08af58f..2ea5bed 100644 --- a/src/main/scala/scala/collection/immutable/SortedMultiDict.scala +++ b/src/main/scala/scala/collection/immutable/SortedMultiDict.scala @@ -72,7 +72,7 @@ object SortedMultiDict extends SortedMapFactory[SortedMultiDict] { def from[K: Ordering, V](it: IterableOnce[(K, V)]): SortedMultiDict[K, V] = it match { - case smm: SortedMultiDict[K, V] => smm + case smm: SortedMultiDict[K, V] @unchecked => smm case _ => (newBuilder[K, V] ++= it).result() } diff --git a/src/main/scala/scala/collection/immutable/SortedMultiSet.scala b/src/main/scala/scala/collection/immutable/SortedMultiSet.scala index c1d593f..1509d1d 100644 --- a/src/main/scala/scala/collection/immutable/SortedMultiSet.scala +++ b/src/main/scala/scala/collection/immutable/SortedMultiSet.scala @@ -55,7 +55,7 @@ object SortedMultiSet extends SortedIterableFactory[SortedMultiSet] { def from[A: Ordering](source: IterableOnce[A]): SortedMultiSet[A] = source match { - case sms: SortedMultiSet[A] => sms + case sms: SortedMultiSet[A] @unchecked => sms case _ => (newBuilder[A] ++= source).result() } diff --git a/src/main/scala/scala/collection/mutable/MultiSet.scala b/src/main/scala/scala/collection/mutable/MultiSet.scala index e2098a8..a387e90 100644 --- a/src/main/scala/scala/collection/mutable/MultiSet.scala +++ b/src/main/scala/scala/collection/mutable/MultiSet.scala @@ -16,7 +16,7 @@ trait MultiSet[A] override protected def newSpecificBuilder: mutable.Builder[A, MultiSet[A]] = iterableFactory.newBuilder override def empty: MultiSet[A] = iterableFactory.empty - override def knownSize = super[Growable].knownSize + override def knownSize: Int = super[Growable].knownSize } class MultiSetImpl[A] private[mutable] (val elems: Map[A, Int]) extends MultiSet[A] {