From 5942ccbe1f8d62890824525aab8666b424055afa Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 3 Jan 2021 00:59:38 -0500 Subject: [PATCH] Add Scala 2.13 support --- .github/workflows/ci.yml | 2 +- build.sbt | 3 ++- .../scala/sbt/librarymanagement/EvictionError.scala | 8 ++++---- .../scala/sbt/librarymanagement/EvictionWarning.scala | 4 ++-- .../scala/sbt/librarymanagement/ModuleIDExtra.scala | 2 +- core/src/test/scala/UpdateReportSpec.scala | 5 +++-- .../sbt/internal/librarymanagement/UnitSpec.scala | 5 +++-- .../scala/sbt/librarymanagement/ConfigMacroTest.scala | 5 +++-- .../sbt/librarymanagement/SemanticSelectorSpec.scala | 5 +++-- .../sbt/librarymanagement/VersionNumberSpec.scala | 6 ++++-- .../internal/librarymanagement/CustomPomParser.scala | 4 ++-- .../sbt/internal/librarymanagement/IvyActions.scala | 2 +- .../sbt/internal/librarymanagement/IvyRetrieve.scala | 2 +- .../ivyint/IvyCredentialsLookup.scala | 10 +++++----- .../mavenint/PomExtraDependencyAttributes.scala | 2 +- .../sbt/internal/librarymanagement/IvyUtilSpec.scala | 4 ++-- project/Dependencies.scala | 5 +++-- 17 files changed, 41 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11c60e597..6f16581f8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: run: | case ${{ matrix.jobtype }} in 1) - sbt -v -Dfile.encoding=UTF8 scalafmtCheckAll whitesourceCheckPolicies test packagedArtifacts + sbt -v -Dfile.encoding=UTF8 scalafmtCheckAll whitesourceCheckPolicies +test +packagedArtifacts ;; *) echo unknown jobtype diff --git a/build.sbt b/build.sbt index 62640cfb8..9a93044f7 100644 --- a/build.sbt +++ b/build.sbt @@ -54,7 +54,8 @@ def commonSettings: Seq[Setting[_]] = Def.settings( case sv if sv.startsWith("2.10") => old diff List("-Xfuture", "-Ywarn-unused", "-Ywarn-unused-import") case sv if sv.startsWith("2.11") => old ++ List("-Ywarn-unused", "-Ywarn-unused-import") - case _ => old ++ List("-Ywarn-unused", "-Ywarn-unused-import", "-YdisableFlatCpCaching") + case sv if sv.startsWith("2.12") => old ++ List("-Ywarn-unused", "-Ywarn-unused-import", "-YdisableFlatCpCaching") + case _ => old } }, inCompileAndTest( diff --git a/core/src/main/scala/sbt/librarymanagement/EvictionError.scala b/core/src/main/scala/sbt/librarymanagement/EvictionError.scala index 09a767bad..ee9be4629 100644 --- a/core/src/main/scala/sbt/librarymanagement/EvictionError.scala +++ b/core/src/main/scala/sbt/librarymanagement/EvictionError.scala @@ -59,11 +59,11 @@ object EvictionError { }: _*) def calculateCompatible(p: EvictionPair): (Boolean, String) = { val winnerOpt = p.winner map { _.module } - val extraAttributes = (p.winner match { - case Some(r) => r.extraAttributes + val extraAttributes = ((p.winner match { + case Some(r) => r.extraAttributes.toMap case _ => Map.empty - }) ++ (winnerOpt match { - case Some(w) => w.extraAttributes + }): collection.immutable.Map[String, String]) ++ (winnerOpt match { + case Some(w) => w.extraAttributes.toMap case _ => Map.empty }) // prioritize user-defined version scheme to allow overriding the real scheme diff --git a/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala b/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala index e0519d981..926e93529 100644 --- a/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala +++ b/core/src/main/scala/sbt/librarymanagement/EvictionWarning.scala @@ -332,10 +332,10 @@ object EvictionWarning { def guessCompatible(p: EvictionPair): Boolean = p.evicteds forall { r => val winnerOpt = p.winner map { _.module } - val extraAttributes = (p.winner match { + val extraAttributes = ((p.winner match { case Some(r) => r.extraAttributes case _ => Map.empty - }) ++ (winnerOpt match { + }): collection.immutable.Map[String, String]) ++ (winnerOpt match { case Some(w) => w.extraAttributes case _ => Map.empty }) diff --git a/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala b/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala index 40db9def1..f98f46aae 100644 --- a/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala +++ b/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala @@ -63,7 +63,7 @@ private[librarymanagement] abstract class ModuleIDExtra { /** Returns the extra attributes except for ones marked as information only (ones that typically would not be used for dependency resolution). */ def extraDependencyAttributes: Map[String, String] = - extraAttributes.filterKeys(!_.startsWith(SbtPomExtraProperties.POM_INFO_KEY_PREFIX)) + extraAttributes.filterKeys(!_.startsWith(SbtPomExtraProperties.POM_INFO_KEY_PREFIX)).toMap @deprecated( "Use `cross(CrossVersion)`, the variant accepting a CrossVersion value constructed by a member of the CrossVersion object instead.", diff --git a/core/src/test/scala/UpdateReportSpec.scala b/core/src/test/scala/UpdateReportSpec.scala index 12d7e70ca..d12d76585 100644 --- a/core/src/test/scala/UpdateReportSpec.scala +++ b/core/src/test/scala/UpdateReportSpec.scala @@ -2,9 +2,10 @@ package sbt.librarymanagement import java.io.File -import org.scalatest._ +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers -class UpdateReportSpec extends FlatSpec with Matchers { +class UpdateReportSpec extends AnyFlatSpec with Matchers { "UpdateReport.toString" should "have a nice toString" in { assert(updateReport.toString === s""" |Update report: diff --git a/core/src/test/scala/sbt/internal/librarymanagement/UnitSpec.scala b/core/src/test/scala/sbt/internal/librarymanagement/UnitSpec.scala index 238e018e9..c656812d0 100644 --- a/core/src/test/scala/sbt/internal/librarymanagement/UnitSpec.scala +++ b/core/src/test/scala/sbt/internal/librarymanagement/UnitSpec.scala @@ -2,6 +2,7 @@ package sbt package internal package librarymanagement -import org.scalatest._ +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers -abstract class UnitSpec extends FlatSpec with Matchers +abstract class UnitSpec extends AnyFlatSpec with Matchers diff --git a/core/src/test/scala/sbt/librarymanagement/ConfigMacroTest.scala b/core/src/test/scala/sbt/librarymanagement/ConfigMacroTest.scala index 85d798a21..1bb5d7a16 100644 --- a/core/src/test/scala/sbt/librarymanagement/ConfigMacroTest.scala +++ b/core/src/test/scala/sbt/librarymanagement/ConfigMacroTest.scala @@ -1,9 +1,10 @@ package sbt.librarymanagement import sbt.librarymanagement.Configurations.config -import org.scalatest._ +import org.scalatest.funspec.AnyFunSpec +import org.scalatest.matchers.should.Matchers -class ConfigMacroTest extends FunSpec with Matchers { +class ConfigMacroTest extends AnyFunSpec with Matchers { describe("Configurations.config") { it("should validate the ID in compile time") { """val A = config("a")""" should compile diff --git a/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala b/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala index f7bf4f5bf..411554260 100644 --- a/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala +++ b/core/src/test/scala/sbt/librarymanagement/SemanticSelectorSpec.scala @@ -1,8 +1,9 @@ package sbt.librarymanagement -import org.scalatest.{ FreeSpec, Matchers } +import org.scalatest.freespec.AnyFreeSpec +import org.scalatest.matchers.should.Matchers -class SemanticSelectorSpec extends FreeSpec with Matchers { +class SemanticSelectorSpec extends AnyFreeSpec with Matchers { semsel("<=1.2.3") { sel => assertMatches(sel, "1.2.3") assertMatches(sel, "1.2-beta") diff --git a/core/src/test/scala/sbt/librarymanagement/VersionNumberSpec.scala b/core/src/test/scala/sbt/librarymanagement/VersionNumberSpec.scala index 7a7038fba..a8691089e 100644 --- a/core/src/test/scala/sbt/librarymanagement/VersionNumberSpec.scala +++ b/core/src/test/scala/sbt/librarymanagement/VersionNumberSpec.scala @@ -1,9 +1,11 @@ package sbt.librarymanagement -import org.scalatest.{ FreeSpec, Inside, Matchers } +import org.scalatest.Inside +import org.scalatest.freespec.AnyFreeSpec +import org.scalatest.matchers.should.Matchers // This is a specification to check VersionNumber and VersionNumberCompatibility. -class VersionNumberSpec extends FreeSpec with Matchers with Inside { +class VersionNumberSpec extends AnyFreeSpec with Matchers with Inside { import VersionNumber.{ EarlySemVer, SemVer, PackVer } version("1") { v => diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala index 514843cf4..e81ef45cd 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala @@ -154,7 +154,7 @@ object CustomPomParser { (propertyAttributes - ExtraAttributesKey) map { case (k, v) => ("e:" + k, v) } private[this] def shouldBeUnqualified(m: Map[String, String]): Map[String, String] = - m.filterKeys(unqualifiedKeys) + m.filterKeys(unqualifiedKeys).toMap private[this] def addExtra( properties: Map[String, String], @@ -182,7 +182,7 @@ object CustomPomParser { def filterCustomExtra(item: ExtendableItem, include: Boolean): Map[String, String] = (qualifiedExtra(item) filterKeys { k => qualifiedIsExtra(k) == include - }) + }).toMap def writeDependencyExtra(s: Seq[DependencyDescriptor]): Seq[String] = PomExtraDependencyAttributes.writeDependencyExtra(s) diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala index 09e8b1e6b..41f82ab6d 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala @@ -237,7 +237,7 @@ object IvyActions { }.toMap def grouped[T](grouping: ModuleID => T)(mods: Seq[ModuleID]): Map[T, Set[String]] = - mods groupBy (grouping) mapValues (_.map(_.revision).toSet) + mods.groupBy(grouping).mapValues(_.map(_.revision).toSet).toMap def addExcluded( report: UpdateReport, diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyRetrieve.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyRetrieve.scala index 67ebaa521..a6d2604ce 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyRetrieve.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyRetrieve.scala @@ -231,7 +231,7 @@ object IvyRetrieve { reports(report) map configurationReport, updateStats(report), Map.empty - ) recomputeStamps () + ).recomputeStamps() def updateStats(report: ResolveReport): UpdateStats = UpdateStats(report.getResolveTime, report.getDownloadTime, report.getDownloadSize, false) def configurationReport(confReport: ConfigurationResolveReport): ConfigurationReport = diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/IvyCredentialsLookup.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/IvyCredentialsLookup.scala index e2e119123..4d1e92420 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/IvyCredentialsLookup.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/IvyCredentialsLookup.scala @@ -47,20 +47,20 @@ private[sbt] object IvyCredentialsLookup { val map = credKeyringField.get(null).asInstanceOf[java.util.HashMap[String, Any]] // make a clone of the set... (map.keySet.asScala.map { - case KeySplit(realm, host) => Realm(host, realm) - case host => Host(host) - })(collection.breakOut) + case KeySplit(realm, host) => (Realm(host, realm): CredentialKey) + case host => (Host(host): CredentialKey) + }).toSet } /** * A mapping of host -> realms in the ivy credentials store. */ def realmsForHost: Map[String, Set[String]] = - keyringKeys collect { + (keyringKeys collect { case x: Realm => x } groupBy { realm => realm.host } mapValues { realms => realms map (_.realm) - } + }).toMap } diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/mavenint/PomExtraDependencyAttributes.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/mavenint/PomExtraDependencyAttributes.scala index c198f046d..25ab896b1 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/mavenint/PomExtraDependencyAttributes.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/mavenint/PomExtraDependencyAttributes.scala @@ -80,7 +80,7 @@ object PomExtraDependencyAttributes { def filterCustomExtra(item: ExtendableItem, include: Boolean): Map[String, String] = (qualifiedExtra(item) filterKeys { k => qualifiedIsExtra(k) == include - }) + }).toMap def qualifiedIsExtra(k: String): Boolean = k.endsWith(ScalaVersionKey) || k.endsWith(SbtVersionKey) diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/IvyUtilSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/IvyUtilSpec.scala index 6924d739a..7b000ae45 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/IvyUtilSpec.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/IvyUtilSpec.scala @@ -2,10 +2,10 @@ package sbt.internal.librarymanagement import java.io.IOException -import org.scalatest.FunSuite +import org.scalatest.funsuite.AnyFunSuite import sbt.internal.librarymanagement.IvyUtil._ -class IvyUtilSpec extends FunSuite { +class IvyUtilSpec extends AnyFunSuite { test("503 should be a TransientNetworkException") { val statusCode503Exception = new IOException("Server returned HTTP response code: 503 for URL:") diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 186ffe67b..597789c67 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -3,7 +3,8 @@ import Keys._ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { - val scala212 = "2.12.10" + val scala212 = "2.12.12" + val scala213 = "2.13.4" def nightlyVersion: Option[String] = sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") @@ -51,7 +52,7 @@ object Dependencies { val scalaReflect = Def.setting { "org.scala-lang" % "scala-reflect" % scalaVersion.value } val scalaCompiler = Def.setting { "org.scala-lang" % "scala-compiler" % scalaVersion.value } val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.2.0" - val scalaTest = "org.scalatest" %% "scalatest" % "3.0.6-SNAP5" + val scalaTest = "org.scalatest" %% "scalatest" % "3.2.0" val scalaVerify = "com.eed3si9n.verify" %% "verify" % "0.1.0" val scalaCheck = "org.scalacheck" %% "scalacheck" % "1.14.0" val sjsonnew = Def.setting {