diff --git a/core/src/main/scala/sbt/librarymanagement/ConflictWarning.scala b/core/src/main/scala/sbt/librarymanagement/ConflictWarning.scala index bed999164..5122b0144 100644 --- a/core/src/main/scala/sbt/librarymanagement/ConflictWarning.scala +++ b/core/src/main/scala/sbt/librarymanagement/ConflictWarning.scala @@ -44,7 +44,7 @@ object ConflictWarning { /** Map from (organization, rawName) to set of multiple full names. */ def crossVersionMismatches(report: UpdateReport): Map[(String, String), Set[String]] = { val mismatches = report.configurations.flatMap { confReport => - groupByRawName(confReport.allModules).mapValues { modules => + groupByRawName(confReport.allModules).view.mapValues { modules => val differentFullNames = modules.map(_.name).toSet if (differentFullNames.size > 1) differentFullNames else Set.empty[String] } diff --git a/core/src/main/scala/sbt/librarymanagement/DependencyResolution.scala b/core/src/main/scala/sbt/librarymanagement/DependencyResolution.scala index 1f2b37a2d..71b85a272 100644 --- a/core/src/main/scala/sbt/librarymanagement/DependencyResolution.scala +++ b/core/src/main/scala/sbt/librarymanagement/DependencyResolution.scala @@ -186,8 +186,8 @@ class DependencyResolution private[sbt] (lmEngine: DependencyResolutionInterface // The artifacts that came from Ivy don't have their classifier set, let's set it according to // FIXME: this is only done because IDE plugins depend on `classifier` to determine type. They val typeClassifierMap: Map[String, String] = - ((sourceArtifactTypes.toIterable map (_ -> Artifact.SourceClassifier)) - :: (docArtifactTypes.toIterable map (_ -> Artifact.DocClassifier)) :: Nil).flatten.toMap + ((sourceArtifactTypes.toSeq map (_ -> Artifact.SourceClassifier)) + :: (docArtifactTypes.toSeq map (_ -> Artifact.DocClassifier)) :: Nil).flatten.toMap Right(r.substitute { (conf, mid, artFileSeq) => artFileSeq map { case (art, f) => // Deduce the classifier from the type if no classifier is present already diff --git a/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala b/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala index f62f83d1b..0778ad831 100644 --- a/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala +++ b/core/src/main/scala/sbt/librarymanagement/ModuleIDExtra.scala @@ -64,7 +64,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)).toMap + extraAttributes.view.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/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala index 1bd0d7aad..adc202711 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ConvertResolver.scala @@ -35,7 +35,7 @@ import org.apache.ivy.core.module.descriptor.DefaultArtifact import org.apache.ivy.core.report.DownloadReport import org.apache.ivy.plugins.resolver.util.{ ResolvedResource, ResourceMDParser } import org.apache.ivy.util.{ ChecksumHelper, FileUtil, Message } -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ import sbt.internal.librarymanagement.mavenint.PomExtraDependencyAttributes import sbt.io.IO import sbt.util.Logger diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala index eb9378880..e7ded5b3a 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/CustomPomParser.scala @@ -171,7 +171,7 @@ object CustomPomParser { // The extra sbt plugin metadata in pom.xml does not need to be readable by maven, but the other information may be. // However, the pom.xml needs to be valid in all cases because other tools like repository managers may read the pom.xml. private[sbt] def getPomProperties(md: ModuleDescriptor): Map[String, String] = { - import collection.JavaConverters._ + import scala.jdk.CollectionConverters._ PomModuleDescriptorBuilder .extractPomProperties(md.getExtraInfo) .asInstanceOf[java.util.Map[String, String]] @@ -182,13 +182,13 @@ 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).toMap + m.view.filterKeys(unqualifiedKeys).toMap private[this] def addExtra( properties: Map[String, String], id: ModuleRevisionId ): ModuleRevisionId = { - import collection.JavaConverters._ + import scala.jdk.CollectionConverters._ val oldExtra = qualifiedExtra(id) val newExtra = (oldExtra ++ properties).asJava // remove the sbt plugin cross version from the resolved ModuleRevisionId @@ -211,9 +211,9 @@ object CustomPomParser { def qualifiedExtra(item: ExtendableItem): Map[String, String] = PomExtraDependencyAttributes.qualifiedExtra(item) def filterCustomExtra(item: ExtendableItem, include: Boolean): Map[String, String] = - (qualifiedExtra(item) filterKeys { k => + qualifiedExtra(item).view.filterKeys { k => qualifiedIsExtra(k) == include - }).toMap + }.toMap def writeDependencyExtra(s: Seq[DependencyDescriptor]): Seq[String] = PomExtraDependencyAttributes.writeDependencyExtra(s) @@ -275,7 +275,7 @@ object CustomPomParser { case None => dd } - import collection.JavaConverters._ + import scala.jdk.CollectionConverters._ def addExtra( properties: Map[String, String], dependencyExtra: Map[ModuleRevisionId, Map[String, String]], diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala index 97bc40143..48d360c5c 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/Ivy.scala @@ -561,7 +561,7 @@ private[sbt] object IvySbt { * Clearly, it would be better to have an explicit option in Ivy to control this. */ def hasImplicitClassifier(artifact: IArtifact): Boolean = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ artifact.getQualifiedExtraAttributes.asScala.keys .exists(_.asInstanceOf[String] startsWith "m:") } @@ -795,7 +795,7 @@ private[sbt] object IvySbt { artifact } def getExtraAttributes(revID: ExtendableItem): Map[String, String] = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ revID.getExtraAttributes.asInstanceOf[java.util.Map[String, String]].asScala.toMap } private[sbt] def extra( @@ -808,7 +808,7 @@ private[sbt] object IvySbt { javaMap(ea.extraAttributes, unqualify) } private[sbt] def javaMap(m: Map[String, String], unqualify: Boolean = false) = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ val map = if (unqualify) m map { case (k, v) => (k.stripPrefix("e:"), v) } else m if (map.isEmpty) null else map.asJava @@ -962,9 +962,9 @@ private[sbt] object IvySbt { deps.put(id, updated) } - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ deps.values.asScala.toSeq.flatMap { dds => - val mergeable = (dds, dds.tail).zipped.forall(ivyint.MergeDescriptors.mergeable _) + val mergeable = dds.lazyZip(dds.tail).forall(ivyint.MergeDescriptors.mergeable _) if (mergeable) dds.reverse.reduceLeft(ivyint.MergeDescriptors.apply _) :: Nil else dds } } diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala index 42a0eed7f..62099d06e 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala @@ -236,7 +236,7 @@ object IvyActions { }.toMap def grouped[T](grouping: ModuleID => T)(mods: Seq[ModuleID]): Map[T, Set[String]] = - mods.groupBy(grouping).mapValues(_.map(_.revision).toSet).toMap + mods.groupBy(grouping).view.mapValues(_.map(_.revision).toSet).toMap def addExcluded( report: UpdateReport, diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/CachedResolutionResolveEngine.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/CachedResolutionResolveEngine.scala index 57d1eed9b..9eea99693 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/CachedResolutionResolveEngine.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/CachedResolutionResolveEngine.scala @@ -158,7 +158,7 @@ private[sbt] class CachedResolutionResolveCache { (md1, IvySbt.isChanging(dd) || internalDependency(dd, prOpt).isDefined, dd) } def extractOverrides(md0: ModuleDescriptor): Vector[IvyOverride] = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ md0.getAllDependencyDescriptorMediators.getAllRules.asScala.toSeq.toVector sortBy { case (k, _) => k.toString 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 9d8148323..9630e3258 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/IvyCredentialsLookup.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/IvyCredentialsLookup.scala @@ -2,7 +2,7 @@ package sbt.internal.librarymanagement package ivyint import org.apache.ivy.util.url.CredentialsStore -import collection.JavaConverters._ +import scala.jdk.CollectionConverters._ /** A key used to store credentials in the ivy credentials store. */ private[sbt] sealed trait CredentialKey @@ -56,11 +56,16 @@ private[sbt] object IvyCredentialsLookup { * A mapping of host -> realms in the ivy credentials store. */ def realmsForHost: Map[String, Set[String]] = - (keyringKeys collect { case x: Realm => - x - } groupBy { realm => - realm.host - } mapValues { realms => - realms map (_.realm) - }).toMap + keyringKeys + .collect { case x: Realm => + x + } + .groupBy { realm => + realm.host + } + .view + .mapValues { realms => + realms map (_.realm) + } + .toMap } diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala index 711e03225..e683e5710 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/ParallelResolveEngine.scala @@ -40,7 +40,7 @@ private[sbt] class ParallelResolveEngine( artifactFilter: Filter, options: DownloadOptions ): Unit = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ val start = System.currentTimeMillis report.getArtifacts match { case typed: java.util.List[Artifact @unchecked] => diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala index 9dfd3b83f..494e72d91 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/ivyint/SbtChainResolver.scala @@ -433,9 +433,9 @@ private[sbt] case class SbtChainResolver( case _ => None } - val artifactRefs = md.getConfigurations.toIterator flatMap { conf => - md.getArtifacts(conf.getName).toIterator flatMap { af => - artifactRef(af, data.getDate).toIterator + val artifactRefs = md.getConfigurations.iterator flatMap { conf => + md.getArtifacts(conf.getName).iterator flatMap { af => + artifactRef(af, data.getDate).iterator } } if (artifactRefs.hasNext) Some(artifactRefs.next()) 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 25ab896b1..7e2d79c33 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/mavenint/PomExtraDependencyAttributes.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/mavenint/PomExtraDependencyAttributes.scala @@ -35,7 +35,7 @@ object PomExtraDependencyAttributes { def readFromAether( props: java.util.Map[String, AnyRef] ): Map[ModuleRevisionId, Map[String, String]] = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ (props.asScala get ExtraAttributesKey) match { case None => Map.empty case Some(str) => @@ -74,13 +74,13 @@ object PomExtraDependencyAttributes { } def qualifiedExtra(item: ExtendableItem): Map[String, String] = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ item.getQualifiedExtraAttributes.asInstanceOf[java.util.Map[String, String]].asScala.toMap } def filterCustomExtra(item: ExtendableItem, include: Boolean): Map[String, String] = - (qualifiedExtra(item) filterKeys { k => + qualifiedExtra(item).view.filterKeys { k => qualifiedIsExtra(k) == include - }).toMap + }.toMap def qualifiedIsExtra(k: String): Boolean = k.endsWith(ScalaVersionKey) || k.endsWith(SbtVersionKey) @@ -89,7 +89,7 @@ object PomExtraDependencyAttributes { // This makes the id suitable as a key to associate a dependency parsed from a element // with the extra attributes from the section def simplify(id: ModuleRevisionId): ModuleRevisionId = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ ModuleRevisionId.newInstance( id.getOrganisation, id.getName, diff --git a/ivy/src/main/scala/sbt/librarymanagement/ivy/Credentials.scala b/ivy/src/main/scala/sbt/librarymanagement/ivy/Credentials.scala index 656247304..ee29f9f60 100644 --- a/ivy/src/main/scala/sbt/librarymanagement/ivy/Credentials.scala +++ b/ivy/src/main/scala/sbt/librarymanagement/ivy/Credentials.scala @@ -67,7 +67,7 @@ object Credentials { private[this] val UserKeys = List("user", "user.name", "username") private[this] val PasswordKeys = List("password", "pwd", "pass", "passwd") - import collection.JavaConverters._ + import scala.jdk.CollectionConverters._ private[this] def read(from: File): Map[String, String] = { val properties = new java.util.Properties IO.load(properties, from) diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/FrozenModeSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/FrozenModeSpec.scala index ab6a93c90..7186fd68b 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/FrozenModeSpec.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/FrozenModeSpec.scala @@ -34,18 +34,23 @@ object FrozenModeSpec extends BaseIvySpecification { val toResolve = module(defaultModuleId, stoml, None, normalOptions) val onlineResolution = update(toResolve, onlineConf) assert(onlineResolution.isRight) - val numberResolved = onlineResolution.right.get.allModules.size - val numberReportsResolved = onlineResolution.right.get.allModuleReports.size + val numberResolved = + onlineResolution.fold(e => throw e.resolveException, identity).allModules.size + val numberReportsResolved = + onlineResolution.fold(e => throw e.resolveException, identity).allModuleReports.size cleanIvyCache() val singleFrozenResolution = update(toResolve, frozenConf) assert(singleFrozenResolution.isRight) assert( - singleFrozenResolution.right.get.allModules.size == 1, + singleFrozenResolution.fold(e => throw e.resolveException, identity).allModules.size == 1, s"The number of explicit modules in frozen mode should 1" ) assert( - singleFrozenResolution.right.get.allModuleReports.size == 1, + singleFrozenResolution + .fold(e => throw e.resolveException, identity) + .allModuleReports + .size == 1, s"The number of explicit module reports in frozen mode should 1" ) @@ -55,11 +60,17 @@ object FrozenModeSpec extends BaseIvySpecification { val frozenResolution = update(toExplicitResolve, frozenConf) assert(frozenResolution.isRight) assert( - frozenResolution.right.get.allModules.size == numberResolved, + frozenResolution + .fold(e => throw e.resolveException, identity) + .allModules + .size == numberResolved, s"The number of explicit modules in frozen mode should be equal than $numberResolved" ) assert( - frozenResolution.right.get.allModuleReports.size == numberReportsResolved, + frozenResolution + .fold(e => throw e.resolveException, identity) + .allModuleReports + .size == numberReportsResolved, s"The number of explicit module reports in frozen mode should be equal than $numberReportsResolved" ) } diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala index c3235b934..e9902bc96 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/IvyRepoSpec.scala @@ -84,8 +84,7 @@ object IvyRepoSpec extends BaseIvySpecification { val report2 = lmEngine() .updateClassifiers(gcm, UnresolvedWarningConfiguration(), Vector(), log) - .right - .get + .fold(e => throw e.resolveException, identity) import Inside._ inside(report2.configuration(ConfigRef("compile")).map(_.modules)) { case Some(Seq(mr)) => diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/ManagedChecksumsSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/ManagedChecksumsSpec.scala index fb2bc687a..df8241a2c 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/ManagedChecksumsSpec.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/ManagedChecksumsSpec.scala @@ -51,7 +51,7 @@ object ManagedChecksumsSpec extends BaseIvySpecification { val toResolve = module(defaultModuleId, dependencies, None, updateOptions) val res = IvyActions.updateEither(toResolve, onlineConf, warningConf, log) assert(res.isRight, s"Resolution with managed checksums failed! $res") - val updateReport = res.right.get + val updateReport = res.fold(e => throw e.resolveException, identity) val allModuleReports = updateReport.configurations.flatMap(_.modules) val allArtifacts: Seq[File] = allModuleReports.flatMap(_.artifacts.map(_._2)) allArtifacts.foreach(assertChecksumExists) diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/ModuleResolversTest.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/ModuleResolversTest.scala index d1b06b242..5541937c7 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/ModuleResolversTest.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/ModuleResolversTest.scala @@ -26,7 +26,8 @@ object ModuleResolversTest extends BaseIvySpecification { val ivyModule = module(stubModule, dependencies, None, updateOptions) val normalResolution = ivyUpdateEither(ivyModule) assert(normalResolution.isRight) - val normalResolutionTime = normalResolution.right.get.stats.resolveTime + val normalResolutionTime = + normalResolution.fold(e => throw e.resolveException, identity).stats.resolveTime cleanIvyCache() val moduleResolvers = Map( @@ -37,7 +38,8 @@ object ModuleResolversTest extends BaseIvySpecification { val ivyModule2 = module(stubModule, dependencies, None, customUpdateOptions) val fasterResolution = ivyUpdateEither(ivyModule2) assert(fasterResolution.isRight) - val fasterResolutionTime = fasterResolution.right.get.stats.resolveTime + val fasterResolutionTime = + fasterResolution.fold(e => throw e.resolveException, identity).stats.resolveTime // THis is left on purpose so that in spurious error we see the times println(s"NORMAL RESOLUTION TIME $normalResolutionTime") diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/OfflineModeSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/OfflineModeSpec.scala index 5044be951..04484931e 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/OfflineModeSpec.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/OfflineModeSpec.scala @@ -34,14 +34,16 @@ object OfflineModeSpec extends BaseIvySpecification { val onlineResolution = IvyActions.updateEither(toResolve, onlineConf, warningConf, log) assert(onlineResolution.isRight) - assert(onlineResolution.right.exists(report => report.stats.resolveTime > 0)) + assert(onlineResolution.toOption.exists(report => report.stats.resolveTime > 0)) - val originalResolveTime = onlineResolution.right.get.stats.resolveTime + val originalResolveTime = + onlineResolution.fold(e => throw e.resolveException, identity).stats.resolveTime val offlineResolution = IvyActions.updateEither(toResolve, offlineConf, warningConf, log) assert(offlineResolution.isRight) - val resolveTime = offlineResolution.right.get.stats.resolveTime + val resolveTime = + offlineResolution.fold(e => throw e.resolveException, identity).stats.resolveTime assert(originalResolveTime > resolveTime) }