From bc4fe0a31ac1a7ac6b3fd7c45fd47e0e33366813 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Tue, 7 Jul 2020 16:52:52 -0700 Subject: [PATCH] Cross build collectionProj --- build.sbt | 7 ++++++- .../main/scala-2.12/sbt/internal/util/Par.scala | 13 +++++++++++++ .../main/scala-2.13/sbt/internal/util/Par.scala | 14 ++++++++++++++ .../src/main/scala/sbt/internal/util/PMap.scala | 2 +- .../main/scala/sbt/internal/util/Settings.scala | 6 ++---- project/Dependencies.scala | 2 +- 6 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala create mode 100644 internal/util-collection/src/main/scala-2.13/sbt/internal/util/Par.scala diff --git a/build.sbt b/build.sbt index f96f13c8c..1f9877f24 100644 --- a/build.sbt +++ b/build.sbt @@ -108,7 +108,7 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( ) def commonSettings: Seq[Setting[_]] = commonBaseSettings :+ - addCompilerPlugin("org.spire-math" % "kind-projector" % "0.9.4" cross CrossVersion.binary) + addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full) def utilCommonSettings: Seq[Setting[_]] = commonBaseSettings :+ (crossScalaVersions := (scala212 :: scala213 :: Nil)) @@ -246,9 +246,14 @@ lazy val bundledLauncherProj = val collectionProj = (project in file("internal") / "util-collection") .settings( testedBaseSettings, + utilCommonSettings, Util.keywordsSettings, name := "Collections", libraryDependencies ++= Seq(sjsonNewScalaJson.value), + libraryDependencies ++= (CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, major)) if major <= 12 => Seq() + case _ => Seq("org.scala-lang.modules" %% "scala-parallel-collections" % "0.2.0") + }), mimaSettings, mimaBinaryIssueFilters ++= Seq( // Added private[sbt] method to capture State attributes. diff --git a/internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala b/internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala new file mode 100644 index 000000000..34e939244 --- /dev/null +++ b/internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala @@ -0,0 +1,13 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt.internal.util +import scala.collection.parallel.ParSeq + +private[util] object Par { + def apply[R](s: Seq[R]): ParSeq[R] = s.par +} diff --git a/internal/util-collection/src/main/scala-2.13/sbt/internal/util/Par.scala b/internal/util-collection/src/main/scala-2.13/sbt/internal/util/Par.scala new file mode 100644 index 000000000..d7fa1d766 --- /dev/null +++ b/internal/util-collection/src/main/scala-2.13/sbt/internal/util/Par.scala @@ -0,0 +1,14 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt.internal.util +import scala.collection.parallel.CollectionConverters._ +import scala.collection.parallel.ParSeq + +private[util] object Par { + def apply[R](s: Seq[R]): ParSeq[R] = s.par +} diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala b/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala index 356f6973b..c14f975c2 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala @@ -66,7 +66,7 @@ object IMap { put(k, f(this get k getOrElse init)) def mapValues[V2[_]](f: V ~> V2) = - new IMap0[K, V2](backing.mapValues(x => f(x))) + new IMap0[K, V2](Map(backing.iterator.map { case (k, v) => k -> f(v) }.toArray: _*)) def mapSeparate[VL[_], VR[_]](f: V ~> λ[T => Either[VL[T], VR[T]]]) = { val mapped = backing.iterator.map { diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala index b575eb1ec..f3af5e7e2 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala @@ -7,8 +7,6 @@ package sbt.internal.util -import scala.language.existentials - import Types._ import sbt.util.Show import Util.{ nil, nilSeq } @@ -242,7 +240,7 @@ trait Init[ScopeType] { if (s.definitive) Vector(s) else ss :+ s def addLocal(init: Seq[Setting[_]])(implicit scopeLocal: ScopeLocal): Seq[Setting[_]] = - init.par.map(_.dependencies flatMap scopeLocal).toVector.flatten ++ init + Par(init).map(_.dependencies flatMap scopeLocal).toVector.flatten ++ init def delegate(sMap: ScopedMap)( implicit delegates: ScopeType => Seq[ScopeType], @@ -465,7 +463,7 @@ trait Init[ScopeType] { def dependencies = settings.flatMap(_.dependencies) // This is mainly for use in the cyclic reference error message override def toString = - s"Derived settings for ${key.label}, ${definedAtString(settings.map(_.setting))}" + s"Derived settings for ${key.label}, ${definedAtString(settings.map(_.setting).toSeq)}" } // separate `derived` settings from normal settings (`defs`) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 5cd96f44c..1763b4f88 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -89,7 +89,7 @@ object Dependencies { val jansi = "org.fusesource.jansi" % "jansi" % "1.18" val scalatest = "org.scalatest" %% "scalatest" % "3.0.8" val scalacheck = "org.scalacheck" %% "scalacheck" % "1.14.0" - val specs2 = "org.specs2" %% "specs2-junit" % "4.0.1" + val specs2 = "org.specs2" %% "specs2-junit" % "4.10.0" val junit = "junit" % "junit" % "4.11" val scalaVerify = "com.eed3si9n.verify" %% "verify" % "0.2.0" val templateResolverApi = "org.scala-sbt" % "template-resolver" % "0.1"