From eadf1117f693f744baf68a29520674709d514aa8 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 15 Feb 2024 16:18:54 +0100 Subject: [PATCH 01/12] Store bootServerSocket in state --- main/src/main/scala/sbt/Main.scala | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 74e777de1..671cff4e8 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -131,9 +131,8 @@ private[sbt] object xMain: ) .put(BasicKeys.detachStdio, detachStdio) val state = bootServerSocket match { - // todo: fix this - // case Some(l) => state0.put(Keys.bootServerSocket, l) - case _ => state0 + case Some(l) => state0.put(Keys.bootServerSocket, l) + case _ => state0 } try StandardMain.runManaged(state) finally bootServerSocket.foreach(_.close()) From 5d0a0b735602932ab4a503ef9ec6a35cc1151195 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 5 Mar 2024 10:09:22 +0100 Subject: [PATCH 02/12] Uncomment EmbeddedXmlSpec --- .../test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/buildfile/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala b/buildfile/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala index 01d1a86e0..b73fb7eff 100644 --- a/buildfile/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala +++ b/buildfile/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala @@ -9,7 +9,6 @@ package sbt.internal.parser import sbt.internal.util.MessageOnlyException -/* object EmbeddedXmlSpec extends CheckIfParsedSpec { test("File with xml content should Handle last xml part") { @@ -36,7 +35,7 @@ object EmbeddedXmlSpec extends CheckIfParsedSpec { |""".stripMargin try { - split(buildSbt) + splitter(buildSbt) sys.error("expected MessageOnlyException") } catch { case exception: MessageOnlyException => @@ -163,8 +162,6 @@ object EmbeddedXmlSpec extends CheckIfParsedSpec { | | | - | - | """.stripMargin, "xml with blank line", false, @@ -173,4 +170,3 @@ object EmbeddedXmlSpec extends CheckIfParsedSpec { ) } - */ From c15a4031a9ea54a46c13b9716b5176cd7aed7c7d Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 5 Mar 2024 10:39:00 +0100 Subject: [PATCH 03/12] Fix or mute warnings --- .../src/main/scala/sbt/internal/Eval.scala | 16 ++++----- .../sbt/internal/EvaluateConfigurations.scala | 21 ++++------- .../scala/sbt/internal/parser/SbtParser.scala | 2 +- .../sbt/internal/util/appmacro/Cont.scala | 3 +- .../internal/util/appmacro/ContextUtil.scala | 3 +- .../sbt/internal/util/appmacro/Convert.scala | 2 +- .../scala/sbt/internal/ConvertTestMacro.scala | 4 +-- .../util/complete/ExampleSource.scala | 23 ++++++------ .../util/complete/HistoryCommands.scala | 2 +- .../util/complete/JLineCompletion.scala | 4 +-- .../sbt/internal/util/complete/Parser.scala | 2 +- .../main/scala/sbt/internal/util/JLine3.scala | 2 +- .../sbt/internal/util/ProgressState.scala | 4 +-- .../main/scala/sbt/internal/util/Prompt.scala | 2 +- .../main/scala/sbt/util/InterfaceUtil.scala | 2 +- .../main/scala/sbt/util/LoggerContext.scala | 2 +- .../scala/sbt/internal/util/Relation.scala | 36 +++++++++---------- .../sbt/internal/scripted/ScriptedTests.scala | 5 +-- .../src/main/scala/sbt/ForkTests.scala | 9 ++--- main-actions/src/main/scala/sbt/Pkg.scala | 11 +++--- main-actions/src/main/scala/sbt/Sync.scala | 8 ++--- main-actions/src/main/scala/sbt/Tests.scala | 6 ++-- .../src/main/scala/sbt/BasicCommands.scala | 6 ++-- main-command/src/main/scala/sbt/Command.scala | 2 +- .../src/main/scala/sbt/MainControl.scala | 4 +-- main-command/src/main/scala/sbt/State.scala | 6 ++-- main-command/src/main/scala/sbt/Watched.scala | 4 +++ .../scala/sbt/internal/CommandChannel.scala | 2 +- .../internal/classpath/ClassLoaderCache.scala | 3 +- main-settings/src/main/scala/sbt/Def.scala | 10 +++--- .../src/main/scala/sbt/Previous.scala | 15 ++++---- .../src/main/scala/sbt/Structure.scala | 3 +- .../src/main/scala/sbt/std/InputConvert.scala | 20 +++++------ .../src/main/scala/sbt/std/SettingMacro.scala | 4 +-- .../main/scala/sbt/std/TaskLinterDSL.scala | 2 +- .../src/test/scala/sbt/AppendSpec.scala | 3 +- .../scala/sbt/BuildSettingsInstances.scala | 3 +- .../src/test/scala/sbt/ScopeDisplaySpec.scala | 3 +- .../src/test/scala/sbt/ScopedSpec.scala | 3 +- .../src/test/scala/sbt/SlashSyntaxSpec.scala | 3 +- .../src/test/scala/sbt/SlashSyntaxTest.scala | 3 +- .../test/scala/sbt/std/TaskConfigSpec.scala | 3 +- .../src/test/scala/sbt/std/TaskPosSpec.scala | 3 +- .../src/test/scala/sbt/std/TestUtil.scala | 3 +- .../test/scala/sbt/std/neg/TaskNegSpec.scala | 3 +- main/src/main/scala/sbt/Cross.scala | 4 ++- main/src/main/scala/sbt/Defaults.scala | 18 +++++----- main/src/main/scala/sbt/Main.scala | 9 ++--- main/src/main/scala/sbt/ProjectExtra.scala | 2 +- main/src/main/scala/sbt/RemoteCache.scala | 2 +- main/src/main/scala/sbt/ScriptedPlugin.scala | 2 +- .../sbt/coursierint/CoursierInputsTasks.scala | 4 +-- .../scala/sbt/coursierint/LMCoursier.scala | 2 +- main/src/main/scala/sbt/internal/Act.scala | 6 ++-- .../main/scala/sbt/internal/AddSettings.scala | 4 +-- .../main/scala/sbt/internal/Aggregation.scala | 2 +- .../main/scala/sbt/internal/BuildDef.scala | 2 +- .../scala/sbt/internal/BuildStructure.scala | 5 +-- .../scala/sbt/internal/ClasspathImpl.scala | 4 +-- .../scala/sbt/internal/CompileInputs2.scala | 1 - .../main/scala/sbt/internal/Continuous.scala | 3 +- .../main/scala/sbt/internal/CrossJava.scala | 2 +- .../DefaultBackgroundJobService.scala | 14 ++++---- .../main/scala/sbt/internal/GCMonitor.scala | 4 +-- .../sbt/internal/GroupedAutoPlugins.scala | 2 +- .../sbt/internal/LayeredClassLoaders.scala | 4 +-- .../sbt/internal/LibraryManagement.scala | 15 ++++---- main/src/main/scala/sbt/internal/Load.scala | 10 +++--- .../main/scala/sbt/internal/LogManager.scala | 8 ++--- .../scala/sbt/internal/PluginDiscovery.scala | 2 +- .../scala/sbt/internal/PluginsDebug.scala | 2 +- .../scala/sbt/internal/SessionSettings.scala | 2 +- .../sbt/internal/SettingCompletions.scala | 2 +- .../scala/sbt/internal/TaskProgress.scala | 2 +- .../sbt/internal/VirtualFileValueCache.scala | 2 +- .../WatchTransitiveDependencies.scala | 6 ++-- .../graph/backend/SbtUpdateReport.scala | 2 +- .../main/scala/sbt/internal/graph/model.scala | 8 ++--- .../internal/librarymanagement/IvyXml.scala | 3 +- .../sbt/internal/server/BspCompileTask.scala | 12 +++---- .../internal/server/BuildServerReporter.scala | 2 +- .../sbt/internal/server/Definition.scala | 2 +- .../sbt/internal/server/NetworkChannel.scala | 17 ++++----- .../sbt/internal/server/SettingQuery.scala | 2 +- .../sbt/internal/server/VirtualTerminal.scala | 2 +- main/src/test/scala/ParseKey.scala | 3 +- main/src/test/scala/ParserSpec.scala | 3 +- main/src/test/scala/PluginCommandTest.scala | 3 +- .../test/scala/sbt/internal/TestBuild.scala | 2 +- .../test/scala/testpkg/CompletionSpec.scala | 3 +- run/src/test/scala/sbt/ForkTest.scala | 4 +-- sbt-app/src/main/scala/package.scala | 2 +- .../sbt-test/classloader-cache/jni/build.sbt | 2 +- .../jni/src/main/scala/TestMain.scala | 2 +- .../classloader-cache/snapshot/build.sbt | 2 +- sbt-app/src/sbt-test/watch/commands/build.sbt | 2 +- .../test/scala/sbt/IllegalReferenceSpec.scala | 3 +- .../test/scala/sbt/RunFromSourceMain.scala | 2 +- .../sbt/scriptedtest/ScriptedTests.scala | 17 ++++----- .../src/main/scala/sbt/std/Transform.scala | 2 +- .../scala/sbt/JUnitXmlTestsListener.scala | 2 +- .../src/main/scala/sbt/TestFramework.scala | 4 +-- .../main/scala/sbt/TestStatusReporter.scala | 2 +- .../sbt/internal/util/WrappedMap.scala | 2 +- .../main/scala/sbt/internal/util/Dag.scala | 4 +-- .../main/scala/sbt/internal/util/IDSet.scala | 4 +-- .../scala/sbt/internal/util/Settings.scala | 4 +-- .../scala/sbt/internal/util/WrappedMap.scala | 2 +- 108 files changed, 266 insertions(+), 287 deletions(-) diff --git a/buildfile/src/main/scala/sbt/internal/Eval.scala b/buildfile/src/main/scala/sbt/internal/Eval.scala index f558d51ff..1b0f2eeda 100644 --- a/buildfile/src/main/scala/sbt/internal/Eval.scala +++ b/buildfile/src/main/scala/sbt/internal/Eval.scala @@ -19,7 +19,7 @@ import java.net.URLClassLoader import java.nio.charset.StandardCharsets import java.nio.file.{ Files, Path, Paths, StandardOpenOption } import java.security.MessageDigest -import scala.collection.JavaConverters.* +import scala.jdk.CollectionConverters.* import scala.quoted.* import sbt.io.Hash @@ -255,13 +255,13 @@ class Eval( private[this] def getGeneratedFiles(moduleName: String): Seq[Path] = backingDir match case Some(dir) => - asScala( - Files - .list(dir) - .filter(!Files.isDirectory(_)) - .filter(_.getFileName.toString.contains(moduleName)) - .iterator - ).toList + Files + .list(dir) + .filter(!Files.isDirectory(_)) + .filter(_.getFileName.toString.contains(moduleName)) + .iterator + .asScala + .toList case None => Nil private[this] def makeModuleName(hash: String): String = "$Wrap" + hash.take(10) diff --git a/buildfile/src/main/scala/sbt/internal/EvaluateConfigurations.scala b/buildfile/src/main/scala/sbt/internal/EvaluateConfigurations.scala index 6057a9261..5df534590 100644 --- a/buildfile/src/main/scala/sbt/internal/EvaluateConfigurations.scala +++ b/buildfile/src/main/scala/sbt/internal/EvaluateConfigurations.scala @@ -173,24 +173,15 @@ private[sbt] object EvaluateConfigurations { val allGeneratedFiles: Seq[Path] = (definitions.generated ++ dslEntries.flatMap(_.generated)) loader => { val projects = { - val compositeProjects = definitions.values(loader).collect { case p: CompositeProject => - p - } + val compositeProjects = definitions + .values(loader) + .collect { case p: CompositeProject => p } // todo: resolveBase? CompositeProject.expand(compositeProjects) // .map(resolveBase(file.getParentFile, _)) } - val (settingsRaw, manipulationsRaw) = - dslEntries map (_.result apply loader) partition { - case DslEntry.ProjectSettings(_) => true - case _ => false - } - val settings = settingsRaw flatMap { - case DslEntry.ProjectSettings(settings) => settings - case _ => Nil - } - val manipulations = manipulationsRaw map { case DslEntry.ProjectManipulation(f) => - f - } + val loadedDslEntries = dslEntries.map(_.result.apply(loader)) + val settings = loadedDslEntries.collect { case DslEntry.ProjectSettings(s) => s }.flatten + val manipulations = loadedDslEntries.collect { case DslEntry.ProjectManipulation(f) => f } // TODO -get project manipulations. new LoadedSbtFile( settings, diff --git a/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala b/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala index 8cd524092..2deeedeb3 100644 --- a/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala +++ b/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala @@ -54,7 +54,7 @@ private[sbt] object SbtParser: """.stripMargin private final val defaultClasspath = - sbt.io.Path.makeString(sbt.io.IO.classLocationPath[Product].toFile :: Nil) + sbt.io.Path.makeString(sbt.io.IO.classLocationPath(classOf[Product]).toFile :: Nil) def isIdentifier(ident: String): Boolean = val code = s"val $ident = 0; val ${ident}${ident} = $ident" diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala index e94c84ba4..ce79860cc 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala @@ -19,6 +19,7 @@ import sbt.util.{ } import xsbti.VirtualFile import Types.Id +import scala.annotation.nowarn /** * Implementation of a macro that provides a direct syntax for applicative functors and monads. It @@ -266,7 +267,7 @@ trait Cont: val expr = input.term.asExprOf[F[a]] typed[F[A1]]( '{ - $applicativeExpr.map[a, A1]($expr.asInstanceOf[F[a]])($lambda) + $applicativeExpr.map[a @nowarn, A1]($expr.asInstanceOf[F[a @nowarn]])($lambda) }.asTerm ).asExprOf[F[A1]] eitherTree match diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala index 1ed2fffb5..c4493905b 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala @@ -8,8 +8,9 @@ import scala.collection.mutable import sbt.util.cacheLevel import sbt.util.CacheLevelTag -trait ContextUtil[C <: Quotes & scala.Singleton](val qctx: C, val valStart: Int): +trait ContextUtil[C <: Quotes & scala.Singleton](val valStart: Int): import qctx.reflect.* + val qctx: C given qctx.type = qctx private var counter: Int = valStart - 1 diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/Convert.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/Convert.scala index f317ba46b..1eb0edef4 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/Convert.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/Convert.scala @@ -18,7 +18,7 @@ import scala.quoted.* * code matched using `appTransformer`, which is a generic function with a single type param and a * single term param like `X.wrapInit[A](...)`. */ -trait Convert[C <: Quotes & Singleton](override val qctx: C) extends ContextUtil[C]: +trait Convert[C <: Quotes & Singleton] extends ContextUtil[C]: import qctx.reflect.* def convert[A: Type](nme: String, in: Term): Converted diff --git a/core-macros/src/test/scala/sbt/internal/ConvertTestMacro.scala b/core-macros/src/test/scala/sbt/internal/ConvertTestMacro.scala index b343ecb17..4ed00d022 100644 --- a/core-macros/src/test/scala/sbt/internal/ConvertTestMacro.scala +++ b/core-macros/src/test/scala/sbt/internal/ConvertTestMacro.scala @@ -27,8 +27,8 @@ object ConvertTestMacro: convert1.transformWrappers(expr.asTerm, substitute, Symbol.spliceOwner).asExprOf[Boolean] class InputInitConvert[C <: Quotes & scala.Singleton](override val qctx: C) - extends Convert[C](qctx) - with ContextUtil[C](qctx, 0): + extends Convert[C] + with ContextUtil[C](0): // with TupleBuilder[C](qctx) // with TupleNBuilder[C](qctx): import qctx.reflect.* diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/ExampleSource.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/ExampleSource.scala index c9b2725bf..25031bd8c 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/ExampleSource.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/ExampleSource.scala @@ -60,22 +60,21 @@ sealed case class FixedSetExamples(examples: Iterable[String]) extends ExampleSo * the part of the path already written by the user. */ class FileExamples(base: File, prefix: String = "") extends ExampleSource { - override def apply(): Stream[String] = files(base).map(_ substring prefix.length) + override def apply(): LazyList[String] = files(base).map(_.substring(prefix.length)) override def withAddedPrefix(addedPrefix: String): FileExamples = new FileExamples(base, prefix + addedPrefix) - protected def files(directory: File): Stream[String] = { - val childPaths = IO.listFiles(directory).toStream - val prefixedDirectChildPaths = childPaths map { IO.relativize(base, _).get } filter { - _ startsWith prefix - } - val dirsToRecurseInto = childPaths filter { _.isDirectory } map { - IO.relativize(base, _).get - } filter { - dirStartsWithPrefix - } - prefixedDirectChildPaths append dirsToRecurseInto.flatMap(dir => files(new File(base, dir))) + protected def files(directory: File): LazyList[String] = { + val childPaths = LazyList(IO.listFiles(directory)*) + val prefixedDirectChildPaths = childPaths + .map(IO.relativize(base, _).get) + .filter(_.startsWith(prefix)) + val dirsToRecurseInto = childPaths + .filter(_.isDirectory) + .map(IO.relativize(base, _).get) + .filter(dirStartsWithPrefix) + prefixedDirectChildPaths ++ dirsToRecurseInto.flatMap(dir => files(new File(base, dir))) } private def dirStartsWithPrefix(relativizedPath: String): Boolean = diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/HistoryCommands.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/HistoryCommands.scala index 81e874e2f..bd2f637b6 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/HistoryCommands.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/HistoryCommands.scala @@ -76,7 +76,7 @@ object HistoryCommands { val lines = h.lines.toArray command.foreach(lines(lines.length - 1) = _) h.path foreach { h => - IO.writeLines(h, lines) + IO.writeLines(h, lines.toSeq) } command.toList.some } diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/JLineCompletion.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/JLineCompletion.scala index a0cfb929e..10ebcc7e7 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/JLineCompletion.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/JLineCompletion.scala @@ -11,7 +11,7 @@ package complete import jline.console.ConsoleReader import jline.console.completer.{ Completer, CompletionHandler } import scala.annotation.tailrec -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* object JLineCompletion { def installCustomCompletor(reader: ConsoleReader, parser: Parser[_]): Unit = @@ -57,7 +57,7 @@ object JLineCompletion { // always provides dummy completions so that the custom completion handler gets called // (ConsoleReader doesn't call the handler if there aren't any completions) // the custom handler will then throw away the candidates and call the custom function - private[this] final object DummyCompletor extends Completer { + private[this] object DummyCompletor extends Completer { override def complete( buffer: String, cursor: Int, diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parser.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parser.scala index e1057f788..6cef91e2e 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parser.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parser.scala @@ -230,7 +230,7 @@ object Parser extends ParserMain: case Some(av) => success(f(av)) case None => a match { - case m: MapParser[_, A] => m.map(f) + case m: MapParser[?, ?] => m.map(f) case _ => new MapParser(a, f) } } diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala b/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala index 64be598eb..a8c10a62f 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala @@ -21,7 +21,7 @@ import org.jline.terminal.impl.{ AbstractTerminal, DumbTerminal } import org.jline.terminal.impl.jansi.JansiSupportImpl import org.jline.terminal.impl.jansi.win.JansiWinSysTerminal import org.jline.utils.OSUtils -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import scala.util.Try import java.util.concurrent.LinkedBlockingQueue diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala index 1f4ea2e13..9608be5a9 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala @@ -20,7 +20,7 @@ import sbt.internal.util.ConsoleAppender.{ } import scala.collection.mutable.ArrayBuffer -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* private[sbt] final class ProgressState( val progressLines: AtomicReference[Seq[String]], @@ -96,7 +96,7 @@ private[sbt] final class ProgressState( ): Unit = { if (hasProgress) { val canClearPrompt = currentLineBytes.get.isEmpty - addBytes(terminal, bytes) + addBytes(terminal, bytes.toSeq) val toWrite = new ArrayBuffer[Byte] terminal.prompt match { case a: Prompt.AskUser if a.render().nonEmpty && canClearPrompt => toWrite ++= cleanPrompt diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala index 89c1872cb..4a780873c 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Prompt.scala @@ -8,7 +8,7 @@ package sbt.internal.util import java.util.concurrent.LinkedBlockingQueue -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* private[sbt] sealed trait Prompt { def mkPrompt: () => String diff --git a/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala b/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala index 37b4fffcb..cb5fc5e13 100644 --- a/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala +++ b/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala @@ -146,7 +146,7 @@ object InterfaceUtil { val get2: A2 = a2 override def toString: String = s"ConcreteT2($a1, $a2)" override def equals(o: Any): Boolean = o match { - case o: ConcreteT2[A1, A2] => + case o: ConcreteT2[?, ?] => this.get1 == o.get1 && this.get2 == o.get2 case _ => false diff --git a/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala b/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala index 0005b4c18..8e33f0649 100644 --- a/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala +++ b/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala @@ -11,7 +11,7 @@ import sbt.internal.util._ import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicBoolean -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* /** * Provides a context for generating loggers during task evaluation. The logger context can be diff --git a/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala b/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala index 0172bf507..15144c3cf 100644 --- a/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala +++ b/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala @@ -34,7 +34,7 @@ object Relation { make(forward filter { case (a, bs) => bs.nonEmpty }, reverse) } - def merge[A, B](rels: Traversable[Relation[A, B]]): Relation[A, B] = + def merge[A, B](rels: Iterable[Relation[A, B]]): Relation[A, B] = rels.foldLeft(Relation.empty[A, B])(_ ++ _) private[sbt] def remove[X, Y](map: M[X, Y], from: X, to: Y): M[X, Y] = @@ -48,7 +48,7 @@ object Relation { private[sbt] def combine[X, Y](a: M[X, Y], b: M[X, Y]): M[X, Y] = b.foldLeft(a)((map, mapping) => add(map, mapping._1, mapping._2)) - private[sbt] def add[X, Y](map: M[X, Y], from: X, to: Traversable[Y]): M[X, Y] = + private[sbt] def add[X, Y](map: M[X, Y], from: X, to: Iterable[Y]): M[X, Y] = map.updated(from, get(map, from) ++ to) private[sbt] def get[X, Y](map: M[X, Y], t: X): Set[Y] = map.getOrElse(t, Set.empty[Y]) @@ -83,19 +83,19 @@ trait Relation[A, B] { def +(a: A, b: B): Relation[A, B] /** Includes in the relation `(a, b)` for all `b` in `bs`. */ - def +(a: A, bs: Traversable[B]): Relation[A, B] + def +(a: A, bs: Iterable[B]): Relation[A, B] /** Returns the union of the relation `r` with this relation. */ def ++(r: Relation[A, B]): Relation[A, B] /** Includes the given pairs in this relation. */ - def ++(rs: Traversable[(A, B)]): Relation[A, B] + def ++(rs: Iterable[(A, B)]): Relation[A, B] /** Removes all elements `(_1, _2)` for all `_1` in `_1s` from this relation. */ - def --(_1s: Traversable[A]): Relation[A, B] + def --(_1s: Iterable[A]): Relation[A, B] /** Removes all `pairs` from this relation. */ - def --(pairs: TraversableOnce[(A, B)]): Relation[A, B] + def --(pairs: IterableOnce[(A, B)]): Relation[A, B] /** Removes all `relations` from this relation. */ def --(relations: Relation[A, B]): Relation[A, B] @@ -107,10 +107,10 @@ trait Relation[A, B] { def -(pair: (A, B)): Relation[A, B] /** Returns the set of all `_1`s such that `(_1, _2)` is in this relation. */ - def _1s: collection.Set[A] + def _1s: Set[A] /** Returns the set of all `_2`s such that `(_1, _2)` is in this relation. */ - def _2s: collection.Set[B] + def _2s: Set[B] /** Returns the number of pairs in this relation */ def size: Int @@ -131,7 +131,7 @@ trait Relation[A, B] { def groupBy[K](discriminator: ((A, B)) => K): Map[K, Relation[A, B]] /** Returns all pairs in this relation. */ - def all: Traversable[(A, B)] + def all: Iterable[(A, B)] /** * Represents this relation as a `Map` from a `_1` to the set of `_2`s such that `(_1, _2)` is in @@ -168,22 +168,22 @@ private final class MRelation[A, B](fwd: Map[A, Set[B]], rev: Map[B, Set[A]]) def size = (fwd.valuesIterator map (_.size)).sum - def all: Traversable[(A, B)] = - fwd.iterator.flatMap { case (a, bs) => bs.iterator.map(b => (a, b)) }.toTraversable + def all: Iterable[(A, B)] = + fwd.iterator.flatMap { case (a, bs) => bs.iterator.map(b => (a, b)) }.to(Iterable) def +(pair: (A, B)) = this + (pair._1, Set(pair._2)) def +(from: A, to: B) = this + (from, to :: Nil) - def +(from: A, to: Traversable[B]) = + def +(from: A, to: Iterable[B]) = if (to.isEmpty) this else new MRelation(add(fwd, from, to), to.foldLeft(rev)((map, t) => add(map, t, from :: Nil))) - def ++(rs: Traversable[(A, B)]) = rs.foldLeft(this: Relation[A, B]) { _ + _ } + def ++(rs: Iterable[(A, B)]) = rs.foldLeft(this: Relation[A, B]) { _ + _ } def ++(other: Relation[A, B]) = new MRelation[A, B](combine(fwd, other.forwardMap), combine(rev, other.reverseMap)) - def --(ts: Traversable[A]): Relation[A, B] = ts.foldLeft(this: Relation[A, B]) { _ - _ } - def --(pairs: TraversableOnce[(A, B)]): Relation[A, B] = - pairs.foldLeft(this: Relation[A, B])(_ - _) + def --(ts: Iterable[A]): Relation[A, B] = ts.foldLeft(this: Relation[A, B]) { _ - _ } + def --(pairs: IterableOnce[(A, B)]): Relation[A, B] = + pairs.iterator.foldLeft(this: Relation[A, B])(_ - _) def --(relations: Relation[A, B]): Relation[A, B] = --(relations.all) def -(pair: (A, B)): Relation[A, B] = @@ -205,14 +205,14 @@ private final class MRelation[A, B](fwd: Map[A, Set[B]], rev: Map[B, Set[A]]) } def groupBy[K](discriminator: ((A, B)) => K): Map[K, Relation[A, B]] = - (all.groupBy(discriminator) mapValues { Relation.empty[A, B] ++ _ }).toMap + all.groupBy(discriminator).view.mapValues { Relation.empty[A, B] ++ _ }.toMap def contains(a: A, b: B): Boolean = forward(a)(b) override def equals(other: Any) = other match { // We assume that the forward and reverse maps are consistent, so we only use the forward map // for equality. Note that key -> Empty is semantically the same as key not existing. - case o: MRelation[A, B] => + case o: MRelation[?, ?] => forwardMap.filterNot(_._2.isEmpty) == o.forwardMap.filterNot(_._2.isEmpty) case _ => false } diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptedTests.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptedTests.scala index e606ef411..aac26b140 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptedTests.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptedTests.scala @@ -28,7 +28,7 @@ object ScriptedRunnerImpl { val context = LoggerContext() val runner = new ScriptedTests(resourceBaseDirectory, bufferLog, handlersProvider) val logger = newLogger(context) - val allTests = get(tests, resourceBaseDirectory, logger) flatMap { + val allTests = get(tests.toSeq, resourceBaseDirectory, logger) flatMap { case ScriptedTest(group, name) => runner.scriptedTest(group, name, logger, context) } @@ -197,7 +197,8 @@ final case class ScriptedTest(group: String, name: String) { } object ListTests { - def list(directory: File, filter: java.io.FileFilter) = wrapNull(directory.listFiles(filter)) + def list(directory: File, filter: java.io.FileFilter): Seq[File] = + wrapNull(directory.listFiles(filter)).toSeq } import ListTests._ final class ListTests(baseDirectory: File, accept: ScriptedTest => Boolean, log: Logger) { diff --git a/main-actions/src/main/scala/sbt/ForkTests.scala b/main-actions/src/main/scala/sbt/ForkTests.scala index a464b3622..83ba4e5a1 100755 --- a/main-actions/src/main/scala/sbt/ForkTests.scala +++ b/main-actions/src/main/scala/sbt/ForkTests.scala @@ -157,8 +157,8 @@ private[sbt] object ForkTests { acceptorThread.start() val cpFiles = classpath.map(converter.toPath).map(_.toFile()) val fullCp = cpFiles ++ Seq( - IO.classLocationPath[ForkMain].toFile, - IO.classLocationPath[Framework].toFile + IO.classLocationPath(classOf[ForkMain]).toFile, + IO.classLocationPath(classOf[Framework]).toFile, ) val options = Seq( "-classpath", @@ -220,10 +220,11 @@ private final class React( case t: Throwable => log.trace(t); react() case Array(group: String, tEvents: Array[Event]) => + val events = tEvents.toSeq listeners.foreach(_ startGroup group) - val event = TestEvent(tEvents) + val event = TestEvent(events) listeners.foreach(_ testEvent event) - val suiteResult = SuiteResult(tEvents) + val suiteResult = SuiteResult(events) results += group -> suiteResult listeners.foreach(_.endGroup(group, suiteResult.result)) react() diff --git a/main-actions/src/main/scala/sbt/Pkg.scala b/main-actions/src/main/scala/sbt/Pkg.scala index 67f0ffe0f..375c9bd7e 100644 --- a/main-actions/src/main/scala/sbt/Pkg.scala +++ b/main-actions/src/main/scala/sbt/Pkg.scala @@ -10,7 +10,7 @@ package sbt import java.io.File import java.time.OffsetDateTime import java.util.jar.{ Attributes, Manifest } -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import sbt.io.IO import sjsonnew.{ @@ -122,7 +122,7 @@ object Pkg: (in: Vector[(HashedVirtualFileRef, String)] :*: VirtualFileRef :*: Seq[PackageOption] :*: LNil) => Configuration(in.head, in.tail.head, in.tail.tail.head), ) - given JsonFormat[Configuration] = summon[JsonFormat[Configuration]] + given JsonFormat[Configuration] = isolistFormat end Configuration /** @@ -158,12 +158,11 @@ object Pkg: val main = manifest.getMainAttributes for option <- conf.options do option match - case PackageOption.JarManifest(mergeManifest) => mergeManifests(manifest, mergeManifest); () + case PackageOption.JarManifest(mergeManifest) => mergeManifests(manifest, mergeManifest) case PackageOption.MainClass(mainClassName) => - main.put(Attributes.Name.MAIN_CLASS, mainClassName); () - case PackageOption.ManifestAttributes(attributes @ _*) => main.asScala ++= attributes; () + main.put(Attributes.Name.MAIN_CLASS, mainClassName) + case PackageOption.ManifestAttributes(attributes @ _*) => main.asScala ++= attributes case PackageOption.FixedTimestamp(value) => () - case _ => log.warn("Ignored unknown package option " + option) setVersion(main) manifest diff --git a/main-actions/src/main/scala/sbt/Sync.scala b/main-actions/src/main/scala/sbt/Sync.scala index 4e783d4c9..9dc53b836 100644 --- a/main-actions/src/main/scala/sbt/Sync.scala +++ b/main-actions/src/main/scala/sbt/Sync.scala @@ -46,19 +46,19 @@ object Sync { store: CacheStore, inStyle: FileInfo.Style = FileInfo.lastModified, outStyle: FileInfo.Style = FileInfo.exists - ): Traversable[(File, File)] => Relation[File, File] = + ): Iterable[(File, File)] => Relation[File, File] = sync(store, inStyle) def sync( store: CacheStore, fileConverter: FileConverter - ): Traversable[(File, File)] => Relation[File, File] = + ): Iterable[(File, File)] => Relation[File, File] = sync(store, FileInfo.lastModified, fileConverter) def sync( store: CacheStore, inStyle: FileInfo.Style = FileInfo.lastModified, - ): Traversable[(File, File)] => Relation[File, File] = + ): Iterable[(File, File)] => Relation[File, File] = sync(store, inStyle, MappedFileConverter.empty) /** this function ensures that the latest files in /src are also in /target, so that they are synchronised */ @@ -66,7 +66,7 @@ object Sync { store: CacheStore, inStyle: FileInfo.Style, fileConverter: FileConverter - ): Traversable[(File, File)] => Relation[File, File] = + ): Iterable[(File, File)] => Relation[File, File] = mappings => { val relation = Relation.empty ++ mappings noDuplicateTargets(relation) diff --git a/main-actions/src/main/scala/sbt/Tests.scala b/main-actions/src/main/scala/sbt/Tests.scala index 9ba786af3..797e19f9f 100644 --- a/main-actions/src/main/scala/sbt/Tests.scala +++ b/main-actions/src/main/scala/sbt/Tests.scala @@ -415,10 +415,8 @@ object Tests { tasks.join.map(_.foldLeft(Map.empty[String, SuiteResult]) { case (sum, e) => val merged = sum.toSeq ++ e.toSeq val grouped = merged.groupBy(_._1) - grouped - .mapValues(_.map(_._2).foldLeft(SuiteResult.Empty) { case (resultSum, result) => - resultSum + result - }) + grouped.view + .mapValues(_.map(_._2).foldLeft(SuiteResult.Empty)(_ + _)) .toMap }) } diff --git a/main-command/src/main/scala/sbt/BasicCommands.scala b/main-command/src/main/scala/sbt/BasicCommands.scala index 0db201b83..c0b26fd93 100644 --- a/main-command/src/main/scala/sbt/BasicCommands.scala +++ b/main-command/src/main/scala/sbt/BasicCommands.scala @@ -491,12 +491,10 @@ object BasicCommands { def runAlias(s: State, args: Option[(String, Option[Option[String]])]): State = args match { - case None => - printAliases(s); s - case Some(x ~ None) if !x.isEmpty => - printAlias(s, x.trim); s + case Some(x ~ None) if !x.isEmpty => printAlias(s, x.trim); s case Some(name ~ Some(None)) => removeAlias(s, name.trim) case Some(name ~ Some(Some(value))) => addAlias(s, name.trim, value.trim) + case _ => printAliases(s); s } def addAlias(s: State, name: String, value: String): State = if (Command validID name) { diff --git a/main-command/src/main/scala/sbt/Command.scala b/main-command/src/main/scala/sbt/Command.scala index ec224b551..45e7dce06 100644 --- a/main-command/src/main/scala/sbt/Command.scala +++ b/main-command/src/main/scala/sbt/Command.scala @@ -293,6 +293,6 @@ object Help { } trait CommandDefinitions extends (State => State) { - def commands: Seq[Command] = ReflectUtilities.allVals[Command](this).values.toSeq + def commands: Seq[Command] = ReflectUtilities.allValsC(this, classOf[Command]).values.toSeq def apply(s: State): State = s ++ commands } diff --git a/main-command/src/main/scala/sbt/MainControl.scala b/main-command/src/main/scala/sbt/MainControl.scala index 69d0d2fdb..e552dc14c 100644 --- a/main-command/src/main/scala/sbt/MainControl.scala +++ b/main-command/src/main/scala/sbt/MainControl.scala @@ -43,8 +43,8 @@ object ApplicationID { delegate.name, delegate.version, delegate.mainClass, - delegate.mainComponents, + delegate.mainComponents.toSeq, delegate.crossVersionedValue, - delegate.classpathExtra + delegate.classpathExtra.toSeq ) } diff --git a/main-command/src/main/scala/sbt/State.scala b/main-command/src/main/scala/sbt/State.scala index 8b43bc7db..caafeaa61 100644 --- a/main-command/src/main/scala/sbt/State.scala +++ b/main-command/src/main/scala/sbt/State.scala @@ -233,10 +233,10 @@ object State { final class Return(val result: xsbti.MainResult) extends Next /** Indicates that global logging should be rotated. */ - final object ClearGlobalLog extends Next + object ClearGlobalLog extends Next /** Indicates that the previous log file should be preserved instead of discarded. */ - final object KeepLastLog extends Next + object KeepLastLog extends Next /** * Provides a list of recently executed commands. The commands are stored as processed instead of as entered by the user. @@ -424,7 +424,7 @@ object State { .sameElements(rest.map(_.toURI.toURL)) => cache.cachedCustomClassloader( jars.toList, - () => new UncloseableURLLoader(jars, fullScalaLoader) + () => new UncloseableURLLoader(jars.toSeq, fullScalaLoader) ) () case _ => diff --git a/main-command/src/main/scala/sbt/Watched.scala b/main-command/src/main/scala/sbt/Watched.scala index 1cda76284..9fcf7c765 100644 --- a/main-command/src/main/scala/sbt/Watched.scala +++ b/main-command/src/main/scala/sbt/Watched.scala @@ -19,6 +19,7 @@ import sbt.io._ import scala.concurrent.duration._ import scala.util.Properties +import scala.annotation.nowarn @deprecated("Watched is no longer used to implement continuous execution", "1.3.0") trait Watched { @@ -52,6 +53,8 @@ trait Watched { object Watched { type WatchSource = Source + + @nowarn def terminateWatch(key: Int): Boolean = Watched.isEnter(key) private def waitMessage(project: String): String = @@ -82,6 +85,7 @@ object Watched { } + @nowarn private[sbt] val newWatchService: () => WatchService = (() => createWatchService()).label("Watched.newWatchService") def createWatchService(pollDelay: FiniteDuration): WatchService = { diff --git a/main-command/src/main/scala/sbt/internal/CommandChannel.scala b/main-command/src/main/scala/sbt/internal/CommandChannel.scala index 374497dd1..b85af5d0b 100644 --- a/main-command/src/main/scala/sbt/internal/CommandChannel.scala +++ b/main-command/src/main/scala/sbt/internal/CommandChannel.scala @@ -16,7 +16,7 @@ import sbt.internal.util.Terminal import sbt.protocol.EventMessage import sbt.util.Level -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* /** * A command channel represents an IO device such as network socket or human diff --git a/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala b/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala index 2fe75b257..098bb42a1 100644 --- a/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala +++ b/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala @@ -23,7 +23,7 @@ import xsbti.ScalaProvider import xsbti.compile.{ ClasspathOptions, ScalaInstance } import scala.annotation.tailrec -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import scala.util.control.NonFatal private object ClassLoaderCache { @@ -227,7 +227,6 @@ private[sbt] class ClassLoaderCache( case null => case classLoader => close(classLoader) } - case (_, _) => } delegate.clear() } diff --git a/main-settings/src/main/scala/sbt/Def.scala b/main-settings/src/main/scala/sbt/Def.scala index 3dd1301b2..c0b2b5c31 100644 --- a/main-settings/src/main/scala/sbt/Def.scala +++ b/main-settings/src/main/scala/sbt/Def.scala @@ -24,6 +24,7 @@ import Util._ import sbt.util.Show import xsbti.{ HashedVirtualFileRef, VirtualFile } import sjsonnew.JsonFormat +import scala.reflect.ClassTag /** A concrete settings system that uses `sbt.Scope` for the scope type. */ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits: @@ -396,7 +397,7 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits: */ def unit(a: Any): Unit = () - private[sbt] def dummy[A: Manifest](name: String, description: String): (TaskKey[A], Task[A]) = + private[sbt] def dummy[A: ClassTag](name: String, description: String): (TaskKey[A], Task[A]) = (TaskKey[A](name, description, DTask), dummyTask(name)) private[sbt] def dummyTask[T](name: String): Task[T] = { @@ -420,11 +421,8 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits: private[sbt] val (stateKey: TaskKey[State], dummyState: Task[State]) = dummy[State]("state", "Current build state.") - private[sbt] val ( - streamsManagerKey: TaskKey[std.Streams[ScopedKey[_]]], - dummyStreamsManager: Task[std.Streams[ScopedKey[_]]] - ) = - Def.dummy[std.Streams[ScopedKey[_]]]( + private[sbt] val (streamsManagerKey, dummyStreamsManager) = + Def.dummy[std.Streams[ScopedKey[?]]]( "streams-manager", "Streams manager, which provides streams for different contexts." ) diff --git a/main-settings/src/main/scala/sbt/Previous.scala b/main-settings/src/main/scala/sbt/Previous.scala index 72e98a53a..013bad6b4 100644 --- a/main-settings/src/main/scala/sbt/Previous.scala +++ b/main-settings/src/main/scala/sbt/Previous.scala @@ -17,6 +17,7 @@ import sbt.util.StampedFormat import sjsonnew.JsonFormat import scala.util.control.NonFatal +import scala.annotation.nowarn /** * Reads the previous value of tasks on-demand. The read values are cached so that they are only read once per task execution. @@ -123,10 +124,12 @@ object Previous { // We first collect all of the successful tasks and write their scoped key into a map // along with their values. - val successfulTaskResults = (for - results.TPair(task: Task[?], Result.Value(v)) <- results.toTypedSeq - key <- task.info.attributes.get(Def.taskDefinitionKey).asInstanceOf[Option[AnyTaskKey]] - yield key -> v).toMap + val successfulTaskResults = ( + for + case results.TPair(task: Task[?], Result.Value(v)) <- results.toTypedSeq + key <- task.info.attributes.get(Def.taskDefinitionKey).asInstanceOf[Option[AnyTaskKey]] + yield key -> v + ).toMap // We then traverse the successful results and look up all of the referenced values for // each of these tasks. This can be a many to one relationship if multiple tasks refer // the previous value of another task. For each reference we find, we check if the task has @@ -168,8 +171,8 @@ object Previous { .zip(Def.validated(skey, selfRefOk = true)) .zip(Global / references) .zip(Def.resolvedScoped) - inputs { case (((prevTask, resolved), refs), inTask: ScopedKey[Task[_]] @unchecked) => - val key = Key(resolved, inTask) + inputs { case (((prevTask, resolved), refs), inTask) => + val key = Key(resolved, inTask.asInstanceOf[ScopedKey[Task[Any]]]) refs.recordReference(key, format) // always evaluated on project load prevTask.map(_.get(key)) // evaluated if this task is evaluated } diff --git a/main-settings/src/main/scala/sbt/Structure.scala b/main-settings/src/main/scala/sbt/Structure.scala index fc527cd4a..e0d93a3fa 100644 --- a/main-settings/src/main/scala/sbt/Structure.scala +++ b/main-settings/src/main/scala/sbt/Structure.scala @@ -18,6 +18,7 @@ import sbt.Def.{ Initialize, ScopedKey, Setting, setting } import std.TaskMacro import std.TaskExtra.{ task => mktask, _ } import scala.reflect.{ ClassTag, ManifestFactory } +import scala.annotation.nowarn /** An abstraction on top of Settings for build configuration and task definition. */ sealed trait Scoped extends Equals: @@ -79,7 +80,7 @@ sealed abstract class SettingKey[A1] inline def settingMacro[A](inline a: A): Initialize[A] = ${ std.SettingMacro.settingMacroImpl[A]('a) } - final inline def :=(inline v: A1): Setting[A1] = + final inline def :=(inline v: A1): Setting[A1 @nowarn] = ${ TaskMacro.settingAssignMacroImpl('this, 'v) } final inline def +=[A2](inline v: A2)(using Append.Value[A1, A2]): Setting[A1] = diff --git a/main-settings/src/main/scala/sbt/std/InputConvert.scala b/main-settings/src/main/scala/sbt/std/InputConvert.scala index b75f99cca..a02ccb133 100644 --- a/main-settings/src/main/scala/sbt/std/InputConvert.scala +++ b/main-settings/src/main/scala/sbt/std/InputConvert.scala @@ -15,8 +15,8 @@ import sbt.util.Applicative import scala.quoted.* class InputInitConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) - extends Convert[C](qctx) - with ContextUtil[C](qctx, valStart): + extends Convert[C] + with ContextUtil[C](valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = @@ -33,8 +33,8 @@ end InputInitConvert /** Converts an input `Term` of type `Parser[A]` or `State => Parser[A]` into a `Term` of type `State => Parser[A]`. */ class ParserConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) - extends Convert[C](qctx) - with ContextUtil[C](qctx, valStart): + extends Convert[C] + with ContextUtil[C](valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = @@ -51,8 +51,8 @@ end ParserConvert /** Convert instance for plain `Task`s not within the settings system. */ class TaskConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) - extends Convert[C](qctx) - with ContextUtil[C](qctx, valStart): + extends Convert[C] + with ContextUtil[C](valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = if nme == InputWrapper.WrapTaskName then Converted.success(in) @@ -67,8 +67,8 @@ end TaskConvert * a `Term` of type `Initialize[Task[A]]`. */ class FullConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) - extends Convert[C](qctx) - with ContextUtil[C](qctx, valStart): + extends Convert[C] + with ContextUtil[C](valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = @@ -103,8 +103,8 @@ end FullConvert * into a `Term` of type `Initialize[State => Parser[A]]`. */ class InitParserConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) - extends Convert[C](qctx) - with ContextUtil[C](qctx, valStart): + extends Convert[C] + with ContextUtil[C](valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = diff --git a/main-settings/src/main/scala/sbt/std/SettingMacro.scala b/main-settings/src/main/scala/sbt/std/SettingMacro.scala index e86a96796..70736d30d 100644 --- a/main-settings/src/main/scala/sbt/std/SettingMacro.scala +++ b/main-settings/src/main/scala/sbt/std/SettingMacro.scala @@ -21,8 +21,8 @@ import scala.quoted.* import sbt.internal.util.complete.Parser class InitializeConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int) - extends Convert[C](qctx) - with ContextUtil[C](qctx, valStart): + extends Convert[C] + with ContextUtil[C](valStart): import qctx.reflect.* override def convert[A: Type](nme: String, in: Term): Converted = diff --git a/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala b/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala index 533db20bc..367a9ee4f 100644 --- a/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala +++ b/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala @@ -5,6 +5,7 @@ * Licensed under Apache License 2.0 (see LICENSE) */ +/* package sbt.std import sbt.SettingKey @@ -16,7 +17,6 @@ import sbt.internal.util.Terminal import scala.io.AnsiColor import scala.reflect.macros.blackbox -/* abstract class BaseTaskLinterDSL extends LinterDSL { def isDynamicTask: Boolean def convert: Convert diff --git a/main-settings/src/test/scala/sbt/AppendSpec.scala b/main-settings/src/test/scala/sbt/AppendSpec.scala index 3c83b4275..42a8d8edd 100644 --- a/main-settings/src/test/scala/sbt/AppendSpec.scala +++ b/main-settings/src/test/scala/sbt/AppendSpec.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt -/* object AppendSpec { val onLoad = SettingKey[State => State]("onLoad") diff --git a/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala b/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala index 078e9f910..f1518308b 100644 --- a/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala +++ b/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.test -/* import org.scalacheck.{ Test => _, _ }, Arbitrary.arbitrary, Gen._ import java.io.File diff --git a/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala b/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala index 4876055ea..6f0c1ae69 100644 --- a/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala +++ b/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt -/* import org.scalatest.flatspec.AnyFlatSpec import sbt.internal.util.{ AttributeKey, AttributeMap } import sbt.io.syntax.file diff --git a/main-settings/src/test/scala/sbt/ScopedSpec.scala b/main-settings/src/test/scala/sbt/ScopedSpec.scala index 25438e2f3..685778463 100644 --- a/main-settings/src/test/scala/sbt/ScopedSpec.scala +++ b/main-settings/src/test/scala/sbt/ScopedSpec.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.test -/* import org.scalacheck._, Prop._, util.Pretty import sbt.internal.util.AttributeKey diff --git a/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala b/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala index 90414ee3b..ed7391ad8 100644 --- a/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala +++ b/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.test -/* import org.scalacheck.{ Test => _, _ }, Prop._ import sbt.SlashSyntax diff --git a/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala b/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala index 894ccdcb3..cbe3bb446 100644 --- a/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala +++ b/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.test -/* import java.io.File import sjsonnew._, BasicJsonProtocol._ import sbt.Def.{ Setting, inputKey, settingKey, taskKey } diff --git a/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala b/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala index 953d8953b..223a968e7 100644 --- a/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala +++ b/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.std -/* import org.scalatest.{ TestData, fixture, funsuite } import sbt.std.TestUtil._ diff --git a/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala b/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala index 090fdfa88..c4f78fc8e 100644 --- a/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala +++ b/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.std -/* class TaskPosSpec { // Starting sbt 1.4.0, Def.task can have task value lookups inside // if branches since tasks with single if-expressions are automatically diff --git a/main-settings/src/test/scala/sbt/std/TestUtil.scala b/main-settings/src/test/scala/sbt/std/TestUtil.scala index 7449507fe..041b1f861 100644 --- a/main-settings/src/test/scala/sbt/std/TestUtil.scala +++ b/main-settings/src/test/scala/sbt/std/TestUtil.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.std -/* import org.scalatest.TestData import scala.tools.reflect.ToolBox diff --git a/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala b/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala index 9d8b1cadd..ddf4cc80a 100644 --- a/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala +++ b/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt.std.neg -/* import scala.tools.reflect.ToolBoxError import org.scalatest.{ TestData, fixture, funsuite } import sbt.std.{ TaskLinterDSLFeedback, TestUtil } diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 0169bd19d..d794ee7a1 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -179,6 +179,7 @@ object Cross { project(k).toSeq.flatMap(crossVersions(extracted, _).map(v => v -> k)) } .groupBy(_._1) + .view .mapValues(_.map(_._2).toSet) val commandsByVersion = keysByVersion.toSeq .flatMap { case (v, keys) => @@ -188,7 +189,7 @@ object Cross { if (p == extracted.currentRef || !projects.contains(extracted.currentRef)) { val parts = project(k).map(_.project) ++ k.scope.config.toOption.map { case ConfigKey(n) => - n.head.toUpper + n.tail + s"${n.head.toUpper}${n.tail}" } ++ k.scope.task.toOption.map(_.label) ++ Some(k.key.label) Some(v -> parts.mkString("", "/", fullArgs)) } else None @@ -196,6 +197,7 @@ object Cross { } } .groupBy(_._1) + .view .mapValues(_.map(_._2)) .toSeq .sortBy(_._1) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index e30eec786..b803cf42b 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -899,7 +899,7 @@ object Defaults extends BuildCommon { ) ++ configGlobal ++ defaultCompileSettings ++ compileAnalysisSettings ++ Seq( compileOutputs := { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* val c = fileConverter.value val classFiles = manipulateBytecode.value.analysis.readStamps.getAllProductStamps.keySet.asScala @@ -1236,8 +1236,8 @@ object Defaults extends BuildCommon { makeScalaInstance( dummy.version, dummy.libraryJars, - dummy.compilerJars, - dummy.allJars, + dummy.compilerJars.toSeq, + dummy.allJars.toSeq, state.value, scalaInstanceTopLoader.value, ) @@ -1264,7 +1264,7 @@ object Defaults extends BuildCommon { loadedTestFrameworks := { val loader = testLoader.value val log = streams.value.log - testFrameworks.value.flatMap(f => f.create(loader, log).map(x => (f, x)).toIterable).toMap + testFrameworks.value.flatMap(f => f.create(loader, log).map(x => (f, x))).toMap }, definedTests := detectTests.value, definedTestNames := (definedTests map (_.map( @@ -2449,7 +2449,7 @@ object Defaults extends BuildCommon { } val map = managedFileStampCache.value val analysis = analysisResult.analysis - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* analysis.readStamps.getAllProductStamps.asScala.foreach { case (f: VirtualFileRef, s) => map.put(c.toPath(f), sbt.nio.FileStamp.fromZincStamp(s)) } @@ -4046,7 +4046,7 @@ object Classpaths { includeDetails = includeDetails, log = s.log ) - } + }: @nowarn private[sbt] def dependencyPositionsTask: Initialize[Task[Map[ModuleID, SourcePosition]]] = Def.task { @@ -4064,7 +4064,7 @@ object Classpaths { (s.key.key == libraryDependencies.key) && (s.key.scope.project == Select(projRef)) } - Map(settings flatMap { case s: Setting[Seq[ModuleID]] @unchecked => + Map(settings.asInstanceOf[Seq[Setting[Seq[ModuleID]]]].flatMap { s => s.init.evaluate(empty) map { _ -> s.pos } }: _*) } catch { @@ -4394,11 +4394,11 @@ object Classpaths { if cond then Def.task { val converter = fileConverter.value - (scalaInstance.value.libraryJars: Seq[File]) + scalaInstance.value.libraryJars.toSeq .map(_.toPath) .map(converter.toVirtualFile) } - else Def.task { (Nil: Seq[HashedVirtualFileRef]) } + else Def.task { Seq.empty[HashedVirtualFileRef] } } import DependencyFilter._ diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 671cff4e8..fafc31177 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -41,6 +41,7 @@ import scala.concurrent.ExecutionContext import scala.concurrent.duration.Duration import scala.reflect.ClassTag import scala.util.control.NonFatal +import scala.util.boundary /** This class is the entry point for sbt. */ final class xMain extends xsbti.AppMain: @@ -59,7 +60,7 @@ private[sbt] object xMain: override def provider: AppProvider = config.provider() } - private[sbt] def run(configuration: xsbti.AppConfiguration): xsbti.MainResult = { + private[sbt] def run(configuration: xsbti.AppConfiguration): xsbti.MainResult = boundary { try { import BasicCommandStrings.{ DashDashClient, DashDashServer, runEarly } import BasicCommands.early @@ -79,7 +80,7 @@ private[sbt] object xMain: lazy val isServer = !userCommands.exists(c => isBsp(c) || isClient(c)) // keep this lazy to prevent project directory created prematurely lazy val bootServerSocket = if (isServer) getSocketOrExit(configuration) match { - case (_, Some(e)) => return e + case (_, Some(e)) => boundary.break(e) case (s, _) => s } else None @@ -570,7 +571,7 @@ object BuiltinCommands { val app = s.configuration.provider val classpath = app.mainClasspath ++ app.scalaProvider.jars val result = Load - .mkEval(classpath.map(_.toPath()), s.baseDir, Nil) + .mkEval(classpath.map(_.toPath()).toSeq, s.baseDir, Nil) .evalInfer(expression = arg, imports = EvalImports(Nil)) s.log.info(s"ans: ${result.tpe} = ${result.getValue(app.loader)}") } @@ -1146,7 +1147,7 @@ object BuiltinCommands { if (SysProp.allowRootDir) () else { val baseDir = state.baseDir - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* // this should return / on Unix and C:\ for Windows. val rootOpt = FileSystems.getDefault.getRootDirectories.asScala.toList.headOption rootOpt foreach { root => diff --git a/main/src/main/scala/sbt/ProjectExtra.scala b/main/src/main/scala/sbt/ProjectExtra.scala index bb9924bd2..202629c57 100755 --- a/main/src/main/scala/sbt/ProjectExtra.scala +++ b/main/src/main/scala/sbt/ProjectExtra.scala @@ -373,7 +373,7 @@ trait ProjectExtra extends Scoped.Syntax: private[this] def overlappingTargets( targets: Seq[(ProjectRef, File)] ): Map[File, Seq[ProjectRef]] = - targets.groupBy(_._2).filter(_._2.size > 1).mapValues(_.map(_._1)).toMap + targets.groupBy(_._2).view.filter(_._2.size > 1).mapValues(_.map(_._1)).toMap private[this] def allTargets(data: Settings[Scope]): Seq[(ProjectRef, File)] = { import ScopeFilter._ diff --git a/main/src/main/scala/sbt/RemoteCache.scala b/main/src/main/scala/sbt/RemoteCache.scala index 3044ae62d..32d40e46e 100644 --- a/main/src/main/scala/sbt/RemoteCache.scala +++ b/main/src/main/scala/sbt/RemoteCache.scala @@ -367,7 +367,7 @@ object RemoteCache { List((packageCache / remoteCacheArtifact).value) }, pullRemoteCache := { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* val log = streams.value.log val r = remoteCacheResolvers.value.head val p = remoteCacheProjectId.value diff --git a/main/src/main/scala/sbt/ScriptedPlugin.scala b/main/src/main/scala/sbt/ScriptedPlugin.scala index 97a84613e..916244558 100644 --- a/main/src/main/scala/sbt/ScriptedPlugin.scala +++ b/main/src/main/scala/sbt/ScriptedPlugin.scala @@ -136,7 +136,7 @@ object ScriptedPlugin extends AutoPlugin { val p = f.getParentFile (p.getParentFile.getName, p.getName) } - val pairMap = pairs.groupBy(_._1).mapValues(_.map(_._2).toSet) + val pairMap = pairs.groupBy(_._1).view.mapValues(_.map(_._2).toSet) val id = charClass(c => !c.isWhitespace && c != '/', "not whitespace and not '/'").+.string val groupP = token(id.examples(pairMap.keySet.toSet)) <~ token('/') diff --git a/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala index d30c238cc..4e2a1de25 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala @@ -36,7 +36,7 @@ import sbt.librarymanagement.ivy.{ } import sbt.ProjectExtra.transitiveInterDependencies import sbt.ScopeFilter.Make._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* object CoursierInputsTasks { private def coursierProject0( @@ -186,7 +186,7 @@ object CoursierInputsTasks { CProject( module, v.getModuleRevisionId.getRevision, - deps, + deps.toSeq, configurations, Nil, None, diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index 06d5fb159..5310076a5 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -340,7 +340,7 @@ object LMCoursier { () } } - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* (ThisBuild / Keys.credentials).value foreach registerCredentials (LocalRootProject / Keys.credentials).value foreach registerCredentials Keys.credentials.value foreach registerCredentials diff --git a/main/src/main/scala/sbt/internal/Act.scala b/main/src/main/scala/sbt/internal/Act.scala index 21fba1c13..9936d1bcf 100644 --- a/main/src/main/scala/sbt/internal/Act.scala +++ b/main/src/main/scala/sbt/internal/Act.scala @@ -601,9 +601,9 @@ object Act { sealed trait ParsedAxis[+T] { final def isExplicit = this != Omitted } - final object ParsedGlobal extends ParsedAxis[Nothing] - final object ParsedZero extends ParsedAxis[Nothing] - final object Omitted extends ParsedAxis[Nothing] + object ParsedGlobal extends ParsedAxis[Nothing] + object ParsedZero extends ParsedAxis[Nothing] + object Omitted extends ParsedAxis[Nothing] final class ParsedValue[T](val value: T) extends ParsedAxis[T] def value[T](t: Parser[T]): Parser[ParsedAxis[T]] = t map { v => new ParsedValue(v) diff --git a/main/src/main/scala/sbt/internal/AddSettings.scala b/main/src/main/scala/sbt/internal/AddSettings.scala index 547766eae..b64561362 100644 --- a/main/src/main/scala/sbt/internal/AddSettings.scala +++ b/main/src/main/scala/sbt/internal/AddSettings.scala @@ -22,13 +22,13 @@ object AddSettings { private[sbt] final class Sequence(val sequence: Seq[AddSettings]) extends AddSettings { override def toString: String = s"Sequence($sequence)" } - private[sbt] final object User extends AddSettings + private[sbt] object User extends AddSettings private[sbt] final class AutoPlugins(val include: AutoPlugin => Boolean) extends AddSettings private[sbt] final class DefaultSbtFiles(val include: VirtualFile => Boolean) extends AddSettings // private[sbt] final class SbtFiles(val files: Seq[File]) extends AddSettings { // override def toString: String = s"SbtFiles($files)" // } - private[sbt] final object BuildScalaFiles extends AddSettings + private[sbt] object BuildScalaFiles extends AddSettings /** Adds all settings from autoplugins. */ val autoPlugins: AddSettings = diff --git a/main/src/main/scala/sbt/internal/Aggregation.scala b/main/src/main/scala/sbt/internal/Aggregation.scala index 7550393bf..7bc756699 100644 --- a/main/src/main/scala/sbt/internal/Aggregation.scala +++ b/main/src/main/scala/sbt/internal/Aggregation.scala @@ -79,7 +79,7 @@ object Aggregation { val success = results match case Result.Value(_) => true case Result.Inc(_) => false - results.toEither.right.foreach { r => + results.toEither.foreach { r => if (show.taskValues) printSettings(r, show.print) } if (show.success && !state.get(suppressShow).getOrElse(false)) diff --git a/main/src/main/scala/sbt/internal/BuildDef.scala b/main/src/main/scala/sbt/internal/BuildDef.scala index 470285d62..3a5b1f886 100644 --- a/main/src/main/scala/sbt/internal/BuildDef.scala +++ b/main/src/main/scala/sbt/internal/BuildDef.scala @@ -20,7 +20,7 @@ import xsbti.HashedVirtualFileRef trait BuildDef { def projectDefinitions(@deprecated("unused", "") baseDirectory: File): Seq[Project] = projects def projects: Seq[Project] = - CompositeProject.expand(ReflectUtilities.allVals[CompositeProject](this).values.toSeq) + CompositeProject.expand(ReflectUtilities.allValsC(this, classOf[CompositeProject]).values.toSeq) // TODO: Should we grab the build core settings here or in a plugin? def settings: Seq[Setting[_]] = Defaults.buildCore def buildLoaders: Seq[BuildLoader.Components] = Nil diff --git a/main/src/main/scala/sbt/internal/BuildStructure.scala b/main/src/main/scala/sbt/internal/BuildStructure.scala index ef23fb07e..31c830fa7 100644 --- a/main/src/main/scala/sbt/internal/BuildStructure.scala +++ b/main/src/main/scala/sbt/internal/BuildStructure.scala @@ -293,7 +293,7 @@ final class PartBuildUnit( ) extends BuildUnitBase { def resolve(f: Project => ResolvedProject): LoadedBuildUnit = - new LoadedBuildUnit(unit, defined.mapValues(f).toMap, rootProjects, buildSettings) + new LoadedBuildUnit(unit, defined.view.mapValues(f).toMap, rootProjects, buildSettings) def resolveRefs(f: ProjectReference => ProjectRef): LoadedBuildUnit = resolve(_ resolve f) } @@ -371,7 +371,8 @@ object BuildStreams { case _ => Nil } def showAMap(a: AttributeMap): String = - a.entries.toStream + a.entries + .to(LazyList) .sortBy(_.key.label) .flatMap { // The Previous.scopedKeyAttribute is an implementation detail that allows us to get a diff --git a/main/src/main/scala/sbt/internal/ClasspathImpl.scala b/main/src/main/scala/sbt/internal/ClasspathImpl.scala index 2304675e4..7e2f81dd9 100644 --- a/main/src/main/scala/sbt/internal/ClasspathImpl.scala +++ b/main/src/main/scala/sbt/internal/ClasspathImpl.scala @@ -22,7 +22,7 @@ import sbt.librarymanagement.{ Configuration, TrackLevel } import sbt.librarymanagement.Configurations.names import sbt.std.TaskExtra._ import sbt.util._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import xsbti.{ HashedVirtualFileRef, VirtualFileRef } import xsbti.compile.CompileAnalysis @@ -411,7 +411,7 @@ private[sbt] object ClasspathImpl { depConfs: Seq[String], default: String => Seq[String] ): String => Seq[String] = - union(confString.split(";") map parseSingleMapping(masterConfs, depConfs, default)) + union(confString.split(";").map(parseSingleMapping(masterConfs, depConfs, default)).toSeq) def parseSingleMapping( masterConfs: Seq[String], diff --git a/main/src/main/scala/sbt/internal/CompileInputs2.scala b/main/src/main/scala/sbt/internal/CompileInputs2.scala index 7d12771ef..742fc8f04 100644 --- a/main/src/main/scala/sbt/internal/CompileInputs2.scala +++ b/main/src/main/scala/sbt/internal/CompileInputs2.scala @@ -34,5 +34,4 @@ object CompileInputs2: CompileInputs2(in.head, in.tail.head, in.tail.tail.head, in.tail.tail.tail.head) } ) - given JsonFormat[CompileInputs2] = summon end CompileInputs2 diff --git a/main/src/main/scala/sbt/internal/Continuous.scala b/main/src/main/scala/sbt/internal/Continuous.scala index 663769a61..988fa05e5 100644 --- a/main/src/main/scala/sbt/internal/Continuous.scala +++ b/main/src/main/scala/sbt/internal/Continuous.scala @@ -46,6 +46,7 @@ import scala.concurrent.duration.FiniteDuration.FiniteDurationIsOrdered import scala.concurrent.duration._ import scala.util.{ Failure, Success, Try } import scala.util.control.NonFatal +import scala.annotation.nowarn /** * Provides the implementation of the `~` command and `watch` task. The implementation is quite @@ -236,7 +237,6 @@ private[sbt] object Continuous extends DeprecatedContinuous { throw new IllegalStateException(msg) } } - case _ => Nil: Seq[ScopedKey[_]] } } impl(command) @@ -397,6 +397,7 @@ private[sbt] object Continuous extends DeprecatedContinuous { } } + @nowarn private def getOnStart( project: ProjectRef, commands: Seq[String], diff --git a/main/src/main/scala/sbt/internal/CrossJava.scala b/main/src/main/scala/sbt/internal/CrossJava.scala index 4ae022d37..6ec7d8ff9 100644 --- a/main/src/main/scala/sbt/internal/CrossJava.scala +++ b/main/src/main/scala/sbt/internal/CrossJava.scala @@ -327,7 +327,7 @@ private[sbt] object CrossJava { // We have a key, we're likely to be able to cross build this using the per project behaviour. // Group all the projects by scala version - projVersions.groupBy(_._2).mapValues(_.map(_._1)).toSeq.flatMap { + projVersions.groupBy(_._2).view.mapValues(_.map(_._1)).toSeq.flatMap { case (version, Seq(project)) => // If only one project for a version, issue it directly Seq(s"$JavaSwitchCommand $verbose $version", s"$project/$aggCommand") diff --git a/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala b/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala index 698f2c00a..f4abe9cfa 100644 --- a/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala +++ b/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala @@ -183,14 +183,12 @@ private[sbt] abstract class AbstractBackgroundJobService extends BackgroundJobSe override def shutdown(): Unit = { val deadline = 10.seconds.fromNow while (jobSet.nonEmpty && !deadline.isOverdue) { - jobSet.headOption.foreach { - case handle: ThreadJobHandle @unchecked => - if (handle.job.isRunning()) { - handle.job.shutdown() - handle.job.awaitTerminationTry(10.seconds) - } - jobSet = jobSet - handle - case _ => // + jobSet.headOption.foreach { case handle: ThreadJobHandle @unchecked => + if (handle.job.isRunning()) { + handle.job.shutdown() + handle.job.awaitTerminationTry(10.seconds) + } + jobSet = jobSet - handle } } pool.close() diff --git a/main/src/main/scala/sbt/internal/GCMonitor.scala b/main/src/main/scala/sbt/internal/GCMonitor.scala index aacd8fac3..761b5c317 100644 --- a/main/src/main/scala/sbt/internal/GCMonitor.scala +++ b/main/src/main/scala/sbt/internal/GCMonitor.scala @@ -12,7 +12,7 @@ import java.lang.management.ManagementFactory import java.util.concurrent.LinkedBlockingQueue import java.util.concurrent.atomic.AtomicReference import scala.concurrent.duration._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import scala.util.Try import sbt.util.Logger @@ -61,7 +61,7 @@ class GCMonitor(logger: Logger) extends GCMonitorBase with AutoCloseable { override protected def emitWarning(total: Long, over: Option[Long]): Unit = { val totalSeconds = total / 1000.0 - val amountMsg = over.fold(totalSeconds + " seconds") { d => + val amountMsg = over.fold(s"$totalSeconds seconds") { d => "In the last " + (d / 1000.0).ceil.toInt + f" seconds, $totalSeconds (${total.toDouble / d * 100}%.1f%%)" } val msg = s"$amountMsg were spent in GC. " + diff --git a/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala b/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala index af67e69bd..b1aabc177 100644 --- a/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala +++ b/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala @@ -23,7 +23,7 @@ private[sbt] final class GroupedAutoPlugins( private[sbt] object GroupedAutoPlugins { private[sbt] def apply(units: Map[URI, LoadedBuildUnit]): GroupedAutoPlugins = { val byBuild: Map[URI, Seq[AutoPlugin]] = - units.mapValues(unit => unit.projects.flatMap(_.autoPlugins).toSeq.distinct).toMap + units.view.mapValues(unit => unit.projects.flatMap(_.autoPlugins).toSeq.distinct).toMap val all: Seq[AutoPlugin] = byBuild.values.toSeq.flatten.distinct new GroupedAutoPlugins(all, byBuild) } diff --git a/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala b/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala index 51a148ec2..c3662ad7f 100644 --- a/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala @@ -15,7 +15,7 @@ import java.util.concurrent.atomic.{ AtomicBoolean, AtomicReference } import sbt.io.IO import sbt.util.Logger -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* /** * This classloader doesn't load any classes. It is able to create a two layer bundled ClassLoader @@ -141,7 +141,7 @@ private[internal] class NativeLookup extends NativeLoader { private[this] def findLibrary0(name: String): String = { val mappedName = System.mapLibraryName(name) - val search = searchPaths.toStream flatMap relativeLibrary(mappedName) + val search = searchPaths.to(LazyList).flatMap(relativeLibrary(mappedName)) search.headOption.map(copy).orNull } diff --git a/main/src/main/scala/sbt/internal/LibraryManagement.scala b/main/src/main/scala/sbt/internal/LibraryManagement.scala index 85bd5f971..2bc00af57 100644 --- a/main/src/main/scala/sbt/internal/LibraryManagement.scala +++ b/main/src/main/scala/sbt/internal/LibraryManagement.scala @@ -21,8 +21,8 @@ import sbt.io.IO import sbt.io.syntax._ import sbt.ProjectExtra.* import sjsonnew.JsonFormat -import scala.compat.Platform.EOL import scala.concurrent.duration.FiniteDuration +import scala.annotation.nowarn private[sbt] object LibraryManagement { implicit val linter: sbt.dsl.LinterLevel.Ignore.type = sbt.dsl.LinterLevel.Ignore @@ -92,7 +92,7 @@ private[sbt] object LibraryManagement { || assumedEvictionErrorLevel != Level.Error ) Nil else evictionError.toAssumedLines) - if (errorLines.nonEmpty) sys.error((errorLines ++ extraLines).mkString(EOL)) + if (errorLines.nonEmpty) sys.error((errorLines ++ extraLines).mkString(System.lineSeparator)) else { if (evictionError.incompatibleEvictions.isEmpty) () else evictionError.lines.foreach(log.log(evictionLevel, _: String)) @@ -244,6 +244,7 @@ private[sbt] object LibraryManagement { * Resolves and optionally retrieves classified artifacts, such as javadocs and sources, * for dependency definitions, transitively. */ + @nowarn def updateClassifiersTask: Def.Initialize[Task[UpdateReport]] = TupleWrap[ ( @@ -417,15 +418,17 @@ private[sbt] object LibraryManagement { default = Map.empty[ModuleID, Vector[ConfigRef]] ) val report = f(excludes) - val allExcludes: Map[ModuleID, Vector[ConfigRef]] = excludes ++ IvyActions - .extractExcludes(report) - .mapValues(cs => cs.map(c => ConfigRef(c)).toVector) + val allExcludes: Map[ModuleID, Vector[ConfigRef]] = excludes ++ + IvyActions + .extractExcludes(report) + .view + .mapValues(cs => cs.map(c => ConfigRef(c)).toVector) store.write(allExcludes) IvyActions .addExcluded( report, classifiers.toVector, - allExcludes.mapValues(_.map(_.name).toSet).toMap + allExcludes.view.mapValues(_.map(_.name).toSet).toMap ) } } diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 0ab162538..14ae20fc6 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -686,7 +686,7 @@ private[sbt] object Load { val resolve = (_: Project).resolve(ref => Scope.resolveProjectRef(uri, rootProject, ref)) new LoadedBuildUnit( unit.unit, - unit.defined.mapValues(resolve).toMap, + unit.defined.view.mapValues(resolve).toMap, unit.rootProjects, unit.buildSettings ) @@ -1441,11 +1441,9 @@ private[sbt] object Load { // Load only the dependency classpath for the common plugin classloader val loader = manager.loader loader.add( - sbt.io.Path.toURLs( - data(dependencyClasspath) - .map(converter.toPath) - .map(_.toFile()) - ) + sbt.io.Path + .toURLs(data(dependencyClasspath).map(converter.toPath).map(_.toFile())) + .toSeq ) loader // Load the definition classpath separately to avoid conflicts, see #511. diff --git a/main/src/main/scala/sbt/internal/LogManager.scala b/main/src/main/scala/sbt/internal/LogManager.scala index d19ad1a1a..7332e55bc 100644 --- a/main/src/main/scala/sbt/internal/LogManager.scala +++ b/main/src/main/scala/sbt/internal/LogManager.scala @@ -261,11 +261,9 @@ object LogManager { // val execId: Option[String] = execOpt flatMap { _.execId } val log = context.logger(loggerName, channelName, None) context.clearAppenders(loggerName) - val consoleOpt = consoleLocally(state, console) map { - case a: Appender => - a.setTrace(screenTrace) - a - case a => a + val consoleOpt = consoleLocally(state, console).map { a => + a.setTrace(screenTrace) + a } consoleOpt.foreach(a => context.addAppender(loggerName, a -> screenLevel)) context.addAppender(loggerName, relay -> backingLevel) diff --git a/main/src/main/scala/sbt/internal/PluginDiscovery.scala b/main/src/main/scala/sbt/internal/PluginDiscovery.scala index 091b0a780..3516351ea 100644 --- a/main/src/main/scala/sbt/internal/PluginDiscovery.scala +++ b/main/src/main/scala/sbt/internal/PluginDiscovery.scala @@ -133,7 +133,7 @@ object PluginDiscovery: loader: ClassLoader, resourceName: String ): Seq[String] = - import collection.JavaConverters._ + import scala.jdk.CollectionConverters.* loader .getResources(resourceName) .asScala diff --git a/main/src/main/scala/sbt/internal/PluginsDebug.scala b/main/src/main/scala/sbt/internal/PluginsDebug.scala index 50280ffab..27f342163 100644 --- a/main/src/main/scala/sbt/internal/PluginsDebug.scala +++ b/main/src/main/scala/sbt/internal/PluginsDebug.scala @@ -172,7 +172,7 @@ private[sbt] object PluginsDebug { def definesPlugin(p: ResolvedProject): Boolean = p.autoPlugins.contains(plugin) def projectForRef(ref: ProjectRef): ResolvedProject = get(ref / Keys.thisProject) val perBuild: Map[URI, Set[AutoPlugin]] = - structure.units.mapValues(unit => availableAutoPlugins(unit).toSet).toMap + structure.units.view.mapValues(unit => availableAutoPlugins(unit).toSet).toMap val pluginsThisBuild = perBuild.getOrElse(currentRef.build, Set.empty).toList lazy val context = Context( currentProject.plugins, diff --git a/main/src/main/scala/sbt/internal/SessionSettings.scala b/main/src/main/scala/sbt/internal/SessionSettings.scala index a3b440d2e..6ead62a78 100755 --- a/main/src/main/scala/sbt/internal/SessionSettings.scala +++ b/main/src/main/scala/sbt/internal/SessionSettings.scala @@ -229,7 +229,7 @@ object SessionSettings: val (_, oldShifted, replace) = inFile.foldLeft((0, List[Setting[_]](), Seq[SessionSetting]())) { case ((offs, olds, repl), s) => - val RangePosition(_, r @ LineRange(start, end)) = s.pos + val RangePosition(_, r @ LineRange(start, end)) = s.pos: @unchecked settings find (_._1.key == s.key) match { case Some(ss @ (ns, newLines)) if !ns.init.dependencies.contains(ns.key) => val shifted = ns withPos RangePosition( diff --git a/main/src/main/scala/sbt/internal/SettingCompletions.scala b/main/src/main/scala/sbt/internal/SettingCompletions.scala index e4a61fe18..c19069796 100644 --- a/main/src/main/scala/sbt/internal/SettingCompletions.scala +++ b/main/src/main/scala/sbt/internal/SettingCompletions.scala @@ -333,7 +333,7 @@ private[sbt] object SettingCompletions { else if (showDescriptions) { val withDescriptions = in map { case (id, key) => (id, description(key)) } val padded = CommandUtil.aligned("", " ", withDescriptions) - (padded, in).zipped.map { case (line, (id, _)) => + padded.zip(in).map { case (line, (id, _)) => Completion.tokenDisplay(append = appendString(id), display = line + "\n") } } else diff --git a/main/src/main/scala/sbt/internal/TaskProgress.scala b/main/src/main/scala/sbt/internal/TaskProgress.scala index c446f28f2..9a3c4dc3c 100644 --- a/main/src/main/scala/sbt/internal/TaskProgress.scala +++ b/main/src/main/scala/sbt/internal/TaskProgress.scala @@ -13,7 +13,7 @@ import java.util.concurrent.{ RejectedExecutionException, TimeUnit } import sbt.internal.util._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import scala.concurrent.duration._ import java.util.concurrent.{ ConcurrentHashMap, Executors, TimeoutException } import sbt.util.Logger diff --git a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala index 198286ac8..b9838b99c 100644 --- a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala +++ b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala @@ -44,7 +44,7 @@ object VirtualFileValueCache { )(f) } def make[A](stamp: VirtualFile => XStamp)(f: VirtualFile => A): VirtualFileValueCache[A] = - new VirtualFileValueCache0[A](stamp, f) + new VirtualFileValueCache0[A](stamp, f)(using Equiv.universal) } private[this] final class VirtualFileValueCache0[A]( diff --git a/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala b/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala index 62d1f7358..ccb7c0230 100644 --- a/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala +++ b/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala @@ -91,12 +91,12 @@ private[sbt] object WatchTransitiveDependencies { (extracted, compiledMap, st, rs) } .flatMapTask { case (extracted, compiledMap, st, rs) => - st.currentCommand.map(_.commandLine) match - case Some(ShowTransitive(key)) => + st.currentCommand.get.commandLine match + case ShowTransitive(key) => Parser.parse(key.trim, Act.scopedKeyParser(st)) match case Right(scopedKey) => argumentsImpl(scopedKey, extracted, compiledMap) case _ => argumentsImpl(rs, extracted, compiledMap) - case Some(_) => argumentsImpl(rs, extracted, compiledMap) + case _ => argumentsImpl(rs, extracted, compiledMap) } private[sbt] def transitiveDynamicInputs(args: Arguments): Seq[DynamicInput] = { diff --git a/main/src/main/scala/sbt/internal/graph/backend/SbtUpdateReport.scala b/main/src/main/scala/sbt/internal/graph/backend/SbtUpdateReport.scala index 5db194c8e..f3066cb3d 100644 --- a/main/src/main/scala/sbt/internal/graph/backend/SbtUpdateReport.scala +++ b/main/src/main/scala/sbt/internal/graph/backend/SbtUpdateReport.scala @@ -11,7 +11,7 @@ package graph package backend import scala.language.implicitConversions -import scala.language.reflectiveCalls +import scala.reflect.Selectable.reflectiveSelectable import sbt.librarymanagement.{ ModuleID, ModuleReport, ConfigurationReport } object SbtUpdateReport { diff --git a/main/src/main/scala/sbt/internal/graph/model.scala b/main/src/main/scala/sbt/internal/graph/model.scala index 6d84dea99..68f39dc51 100644 --- a/main/src/main/scala/sbt/internal/graph/model.scala +++ b/main/src/main/scala/sbt/internal/graph/model.scala @@ -11,7 +11,7 @@ package graph import java.io.File import sjsonnew._ -import scala.collection.mutable.{ HashMap, MultiMap, Set } +import scala.collection.mutable private[sbt] case class GraphModuleId( organization: String, @@ -97,12 +97,12 @@ private[sbt] case class ModuleGraph(nodes: Seq[Module], edges: Seq[Edge]) { def createMap( bindingFor: ((GraphModuleId, GraphModuleId)) => (GraphModuleId, GraphModuleId) ): Map[GraphModuleId, Seq[Module]] = { - val m = new HashMap[GraphModuleId, Set[Module]] with MultiMap[GraphModuleId, Module] + val map = mutable.Map.empty[GraphModuleId, mutable.Set[Module]] edges.foreach { entry => val (f, t) = bindingFor(entry) - module(t).foreach(m.addBinding(f, _)) + module(t).foreach { m => map.getOrElseUpdate(f, mutable.Set.empty) += m } } - m.toMap.mapValues(_.toSeq.sortBy(_.id.idString)).toMap.withDefaultValue(Nil) + map.view.mapValues(_.toSeq.sortBy(_.id.idString)).toMap.withDefaultValue(Nil) } def roots: Seq[Module] = diff --git a/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala b/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala index 15c104f41..ad8f50659 100644 --- a/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala +++ b/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala @@ -24,7 +24,7 @@ import sbt.Keys.{ } import sbt.ProjectExtra.* import sbt.librarymanagement.PublishConfiguration -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import scala.xml.{ Node, PrefixedAttribute } object IvyXml { @@ -135,6 +135,7 @@ object IvyXml { val publications = project.publications .groupBy { case (_, p) => p } + .view .mapValues { _.map { case (cfg, _) => cfg } } val publicationElems = publications.map { case (pub, configs) => diff --git a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala index 0e2e751d4..aa13f0629 100644 --- a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala +++ b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala @@ -56,7 +56,7 @@ object BspCompileTask { targetId: BuildTargetIdentifier, elapsedTimeMillis: Long ): CompileReport = { - val countBySeverity = problems.groupBy(_.severity()).mapValues(_.size) + val countBySeverity = problems.groupBy(_.severity).view.mapValues(_.size) val warnings = countBySeverity.getOrElse(Severity.Warn, 0) val errors = countBySeverity.getOrElse(Severity.Error, 0) CompileReport(targetId, None, errors, warnings, Some(elapsedTimeMillis.toInt)) @@ -79,15 +79,11 @@ case class BspCompileTask private ( } private[sbt] def notifySuccess(result: CompileResult): Unit = { - import collection.JavaConverters._ + import scala.jdk.CollectionConverters.* val endTimeMillis = System.currentTimeMillis() val elapsedTimeMillis = endTimeMillis - startTimeMillis - val problems = result match { - case compileResult: CompileResult => - val sourceInfos = compileResult.analysis().readSourceInfos().getAllSourceInfos.asScala - sourceInfos.values.flatMap(_.getReportedProblems).toSeq - case _ => Seq() - } + val sourceInfos = result.analysis().readSourceInfos().getAllSourceInfos.asScala + val problems = sourceInfos.values.flatMap(_.getReportedProblems).toSeq val report = compileReport(problems, targetId, elapsedTimeMillis) val params = TaskFinishParams( id, diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index 3963da325..3cd0af45f 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -24,7 +24,7 @@ import xsbti.{ Position => XPosition } -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import scala.collection.mutable sealed trait BuildServerReporter extends Reporter { diff --git a/main/src/main/scala/sbt/internal/server/Definition.scala b/main/src/main/scala/sbt/internal/server/Definition.scala index 61f5182d4..17df7a824 100644 --- a/main/src/main/scala/sbt/internal/server/Definition.scala +++ b/main/src/main/scala/sbt/internal/server/Definition.scala @@ -13,7 +13,7 @@ import java.net.URI import java.nio.file._ import scala.annotation.{ nowarn, tailrec } -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* import scala.concurrent.{ ExecutionContext, Future } import scala.reflect.NameTransformer import scala.util.matching.Regex diff --git a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala index e88978316..5a3a3d5f6 100644 --- a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala +++ b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala @@ -667,7 +667,7 @@ final class NetworkChannel( new Terminal.WriteableInputStream(inputStream, name) import sjsonnew.BasicJsonProtocol._ - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* private[this] val outputBuffer = new LinkedBlockingQueue[Byte] private[this] val flushExecutor = Executors.newSingleThreadScheduledExecutor(r => new Thread(r, s"$name-output-buffer-timer-thread") @@ -799,13 +799,14 @@ final class NetworkChannel( } private[this] def waitForPending(f: TerminalPropertiesResponse => Boolean): Boolean = { if (closed.get || !isAttached) false - withThread( - { - if (pending.get) pending.synchronized(pending.wait()) - Option(properties.get).map(f).getOrElse(false) - }, - false - ) + else + withThread( + { + if (pending.get) pending.synchronized(pending.wait()) + Option(properties.get).map(f).getOrElse(false) + }, + false + ) } private[this] val blockedThreads = ConcurrentHashMap.newKeySet[Thread] override private[sbt] val progressState: ProgressState = new ProgressState( diff --git a/main/src/main/scala/sbt/internal/server/SettingQuery.scala b/main/src/main/scala/sbt/internal/server/SettingQuery.scala index 270f7d510..3ef75eae4 100644 --- a/main/src/main/scala/sbt/internal/server/SettingQuery.scala +++ b/main/src/main/scala/sbt/internal/server/SettingQuery.scala @@ -26,7 +26,7 @@ object SettingQuery { // Similar to Act.ParsedAxis / Act.projectRef / Act.resolveProject except you can't omit the project reference sealed trait ParsedExplicitAxis[+T] - final object ParsedExplicitGlobal extends ParsedExplicitAxis[Nothing] + object ParsedExplicitGlobal extends ParsedExplicitAxis[Nothing] final class ParsedExplicitValue[T](val value: T) extends ParsedExplicitAxis[T] def explicitValue[T](t: Parser[T]): Parser[ParsedExplicitAxis[T]] = t map { v => new ParsedExplicitValue(v) diff --git a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala index c88adaab8..a1a96acd5 100644 --- a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala +++ b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala @@ -85,7 +85,7 @@ object VirtualTerminal { queue } private[sbt] def cancelRequests(name: String): Unit = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* pendingTerminalCapabilities.asScala.foreach { case (k @ (`name`, _), q) => pendingTerminalCapabilities.remove(k) diff --git a/main/src/test/scala/ParseKey.scala b/main/src/test/scala/ParseKey.scala index e6861eda3..821d1891d 100644 --- a/main/src/test/scala/ParseKey.scala +++ b/main/src/test/scala/ParseKey.scala @@ -4,7 +4,7 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt import sbt.Def.{ ScopedKey, displayFull, displayMasked } @@ -16,7 +16,6 @@ import hedgehog._ import hedgehog.core.{ ShrinkLimit, SuccessCount } import hedgehog.runner._ -/* /** * Tests that the scoped key parser in Act can correctly parse a ScopedKey converted by Def.show*Key. * This includes properly resolving omitted components. diff --git a/main/src/test/scala/ParserSpec.scala b/main/src/test/scala/ParserSpec.scala index e07216c66..1487c8e6d 100644 --- a/main/src/test/scala/ParserSpec.scala +++ b/main/src/test/scala/ParserSpec.scala @@ -4,7 +4,7 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt import java.net.URI @@ -18,7 +18,6 @@ import sbt.librarymanagement.Configuration import hedgehog._ import hedgehog.runner._ -/* object ParserSpec extends Properties { override def tests: List[Test] = List( diff --git a/main/src/test/scala/PluginCommandTest.scala b/main/src/test/scala/PluginCommandTest.scala index 630062291..d9ba8e867 100644 --- a/main/src/test/scala/PluginCommandTest.scala +++ b/main/src/test/scala/PluginCommandTest.scala @@ -4,10 +4,9 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt -/* import java.io._ import sbt.internal._ diff --git a/main/src/test/scala/sbt/internal/TestBuild.scala b/main/src/test/scala/sbt/internal/TestBuild.scala index 3fd5758f3..b8f1f5886 100644 --- a/main/src/test/scala/sbt/internal/TestBuild.scala +++ b/main/src/test/scala/sbt/internal/TestBuild.scala @@ -97,7 +97,7 @@ abstract class TestBuild { // task axis of Scope is set to Zero and the value of the second map is the original task axis val taskAxesMappings = - for ((scope, keys) <- data.data.toIterable; key <- keys.keys) + for ((scope, keys) <- data.data; key <- keys.keys) yield (ScopedKey(scope.copy(task = Zero), key), scope.task): ( ScopedKey[_], ScopeAxis[AttributeKey[_]] diff --git a/main/src/test/scala/testpkg/CompletionSpec.scala b/main/src/test/scala/testpkg/CompletionSpec.scala index dc58fe9a2..df1ab1140 100644 --- a/main/src/test/scala/testpkg/CompletionSpec.scala +++ b/main/src/test/scala/testpkg/CompletionSpec.scala @@ -4,7 +4,7 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package testpkg import java.net.URI @@ -19,7 +19,6 @@ import hedgehog._ import hedgehog.runner._ import _root_.sbt.internal.util.complete.Parser -/* object CompletionSpec extends Properties { override def tests: List[Test] = List( diff --git a/run/src/test/scala/sbt/ForkTest.scala b/run/src/test/scala/sbt/ForkTest.scala index 0ee4a0e4e..cc819113d 100644 --- a/run/src/test/scala/sbt/ForkTest.scala +++ b/run/src/test/scala/sbt/ForkTest.scala @@ -32,8 +32,8 @@ object ForkTest extends Properties("Fork") { lazy val genRelClasspath = nonEmptyListOf(path) lazy val requiredEntries = - IO.classLocationPath[scala.Option[_]].toFile :: - IO.classLocationPath[sbt.exit.type].toFile :: + IO.classLocationPath(classOf[scala.Option[_]]).toFile :: + IO.classLocationPath(classOf[sbt.exit.type]).toFile :: Nil lazy val mainAndArgs = "sbt.exit" :: diff --git a/sbt-app/src/main/scala/package.scala b/sbt-app/src/main/scala/package.scala index a2a4434cc..a48fd7b4d 100644 --- a/sbt-app/src/main/scala/package.scala +++ b/sbt-app/src/main/scala/package.scala @@ -43,7 +43,7 @@ package object sbt def file(s: String): File = new File(s) def url(s: String): URL = new URL(s) implicit def fileToRichFile(file: File): sbt.io.RichFile = new sbt.io.RichFile(file) - implicit def filesToFinder(cc: Traversable[File]): sbt.io.PathFinder = + implicit def filesToFinder(cc: Iterable[File]): sbt.io.PathFinder = sbt.io.PathFinder.strict(cc) /* * Provides macro extension methods. Because the extension methods are all macros, no instance diff --git a/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt b/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt index c51ecc780..b3f4c9d15 100644 --- a/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt @@ -1,5 +1,5 @@ import java.nio.file._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* val copyTestResources = inputKey[Unit]("Copy the native libraries to the base directory") val appendToLibraryPath = taskKey[Unit]("Append the base directory to the java.library.path system property") diff --git a/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala b/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala index 523c37799..cd18d54cb 100644 --- a/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala +++ b/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala @@ -1,7 +1,7 @@ package sbt import java.nio.file._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* object TestMain { def main(args: Array[String]): Unit = { diff --git a/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt b/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt index 26f55b6a6..0a3819c95 100644 --- a/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt @@ -3,7 +3,7 @@ ThisBuild / scalaVersion := "2.12.17" import java.nio.file.Files import java.nio.file.attribute.FileTime -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* val rewriteIvy = inputKey[Unit]("Rewrite ivy directory") ThisBuild / useCoursier := false diff --git a/sbt-app/src/sbt-test/watch/commands/build.sbt b/sbt-app/src/sbt-test/watch/commands/build.sbt index 1ac4e953a..7b77c165a 100644 --- a/sbt-app/src/sbt-test/watch/commands/build.sbt +++ b/sbt-app/src/sbt-test/watch/commands/build.sbt @@ -1,6 +1,6 @@ import java.nio.file.Files -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* val foo = taskKey[Unit]("foo") foo := { diff --git a/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala b/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala index 6175216b3..93b1426ad 100644 --- a/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala +++ b/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala @@ -4,13 +4,12 @@ * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ - +/* package sbt import org.scalatest import org.scalatest.{ TestData, fixture, funsuite } -/* import scala.tools.reflect.{ FrontEnd, ToolBoxError } class IllegalReferenceSpec extends funsuite.FixtureAnyFunSuite with fixture.TestDataFixture { diff --git a/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala b/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala index 139e7c8c2..03c5d2191 100644 --- a/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala +++ b/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala @@ -96,7 +96,7 @@ object RunFromSourceMain { context ) map exit catch { - case r: xsbti.FullReload => Some((baseDir, r.arguments())) + case r: xsbti.FullReload => Some((baseDir, r.arguments.toSeq)) case scala.util.control.NonFatal(e) => e.printStackTrace(); errorAndExit(e.toString) } diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala index d52672be9..4c6bfd253 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -536,7 +536,7 @@ class ScriptedRunner { javaCommand = "java", launchOpts, prescripted, - RunFromSourceBased(scalaVersion, sbtVersion, classpath), + RunFromSourceBased(scalaVersion, sbtVersion, classpath.toSeq), instances ) @@ -626,7 +626,7 @@ class ScriptedRunner { instances ) - private def reportErrors(errors: GenSeq[String]): Unit = + private def reportErrors(errors: Seq[String]): Unit = if (errors.nonEmpty) sys.error(errors.mkString("Failed tests:\n\t", "\n\t", "\n")) else () def runAll(toRun: Seq[ScriptedTests.TestRunner]): Unit = @@ -696,12 +696,13 @@ private[sbt] final class ListTests( def filter = DirectoryFilter -- HiddenFileFilter - def listTests: Seq[ScriptedTest] = { - IO.listFiles(baseDirectory, filter) flatMap { group => - val groupName = group.getName - listTests(group).map(ScriptedTest(groupName, _)) - } - } + def listTests: Seq[ScriptedTest] = + IO.listFiles(baseDirectory, filter) + .flatMap { group => + val groupName = group.getName + listTests(group).map(ScriptedTest(groupName, _)) + } + .toSeq private[this] def listTests(group: File): Set[String] = { val groupName = group.getName diff --git a/tasks-standard/src/main/scala/sbt/std/Transform.scala b/tasks-standard/src/main/scala/sbt/std/Transform.scala index 601096b3a..8161c8015 100644 --- a/tasks-standard/src/main/scala/sbt/std/Transform.scala +++ b/tasks-standard/src/main/scala/sbt/std/Transform.scala @@ -28,7 +28,7 @@ object Transform: final class TaskAndValue[T](val task: Task[T], val value: T) def dummyMap(dummyMap: DummyTaskMap): [A] => TaskId[A] => Option[Task[A]] = { - val pmap = new DelegatingPMap[TaskId, Task](new collection.mutable.ListMap) + val pmap = new DelegatingPMap[TaskId, Task](new collection.mutable.HashMap) def add[T](dummy: TaskAndValue[T]): Unit = { pmap(dummy.task) = fromDummyStrict(dummy.task, dummy.value) } diff --git a/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala b/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala index 8c07dc070..848a6e4ba 100644 --- a/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala +++ b/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala @@ -115,7 +115,7 @@ class JUnitXmlTestsListener(val targetDir: File, legacyTestReport: Boolean, logg diff --git a/testing/src/main/scala/sbt/TestFramework.scala b/testing/src/main/scala/sbt/TestFramework.scala index 08bd78e90..90e102345 100644 --- a/testing/src/main/scala/sbt/TestFramework.scala +++ b/testing/src/main/scala/sbt/TestFramework.scala @@ -258,7 +258,7 @@ object TestFramework { if (frameworks.nonEmpty) for (test <- tests) assignTest(test) - map.toMap.mapValues(_.toSet).toMap + map.view.mapValues(_.toSet).toMap } private def createTestTasks( @@ -334,7 +334,7 @@ object TestFramework { runner, (r: TestRunner) => withContextLoader(loader) { r.run(taskDef, testTask) } ) { - def tags = testTask.tags + def tags = testTask.tags.toSeq } } diff --git a/testing/src/main/scala/sbt/TestStatusReporter.scala b/testing/src/main/scala/sbt/TestStatusReporter.scala index 72b1a40ae..631265f41 100644 --- a/testing/src/main/scala/sbt/TestStatusReporter.scala +++ b/testing/src/main/scala/sbt/TestStatusReporter.scala @@ -35,7 +35,7 @@ private[sbt] class TestStatusReporter(f: File) extends TestsListener { private[sbt] object TestStatus { import java.util.Properties def read(f: File): concurrent.Map[String, Long] = { - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters.* val properties = new Properties IO.load(properties, f) val result = new ConcurrentHashMap[String, Long]() diff --git a/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala b/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala index 6a8caf80f..55c7bbee3 100644 --- a/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala +++ b/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala @@ -7,7 +7,7 @@ package sbt.internal.util -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* private[util] class WrappedMap[K, V](val jmap: java.util.Map[K, V]) extends Map[K, V] { def +[V1 >: V](kv: (K, V1)): scala.collection.immutable.Map[K, V1] = jmap.asScala.toMap + kv diff --git a/util-collection/src/main/scala/sbt/internal/util/Dag.scala b/util-collection/src/main/scala/sbt/internal/util/Dag.scala index ed3854a6b..df2917fb7 100644 --- a/util-collection/src/main/scala/sbt/internal/util/Dag.scala +++ b/util-collection/src/main/scala/sbt/internal/util/Dag.scala @@ -13,8 +13,8 @@ trait Dag[Node <: Dag[Node]] { self: Node => def topologicalSort = Dag.topologicalSort(self)(_.dependencies) } object Dag { - import scala.collection.{ mutable, JavaConverters } - import JavaConverters.asScalaSetConverter + import scala.collection.mutable + import scala.jdk.CollectionConverters.* def topologicalSort[T](root: T)(dependencies: T => Iterable[T]): List[T] = topologicalSort(root :: Nil)(dependencies) diff --git a/util-collection/src/main/scala/sbt/internal/util/IDSet.scala b/util-collection/src/main/scala/sbt/internal/util/IDSet.scala index e0ad1e616..6b802b291 100644 --- a/util-collection/src/main/scala/sbt/internal/util/IDSet.scala +++ b/util-collection/src/main/scala/sbt/internal/util/IDSet.scala @@ -7,7 +7,7 @@ package sbt.internal.util -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* /** A mutable set interface that uses object identity to test for set membership. */ trait IDSet[T] { @@ -24,7 +24,7 @@ trait IDSet[T] { } object IDSet { - implicit def toTraversable[T]: IDSet[T] => Traversable[T] = _.all + implicit def toTraversable[T]: IDSet[T] => Iterable[T] = _.all def apply[T](values: T*): IDSet[T] = fromIterable(values) def apply[T](values: Iterable[T]): IDSet[T] = fromIterable(values) diff --git a/util-collection/src/main/scala/sbt/internal/util/Settings.scala b/util-collection/src/main/scala/sbt/internal/util/Settings.scala index 4c784aa24..c11362418 100644 --- a/util-collection/src/main/scala/sbt/internal/util/Settings.scala +++ b/util-collection/src/main/scala/sbt/internal/util/Settings.scala @@ -964,7 +964,7 @@ trait Init[ScopeType]: override def validateKeyReferenced(g: ValidateKeyRef): ValidatedInit[A2] = val tx = inputs.map(_.validateKeyReferenced(g)) val undefs = tx.flatMap(_.left.toSeq.flatten) - if undefs.isEmpty then Right(Uniform(f, tx.map(_.right.get))) + if undefs.isEmpty then Right(Uniform(f, tx.map(_.toOption.get))) else Left(undefs) private[sbt] override def processAttributes[A2](init: A2)(f: (A2, AttributeMap) => A2): A2 = @@ -999,7 +999,7 @@ trait Init[ScopeType]: override def validateKeyReferenced(g: ValidateKeyRef): ValidatedInit[A1] = val tx: Tuple.Map[Tup, ValidatedInit] = inputs.transform(validateKeyReferencedK(g)) val undefs = tx.iterator.flatMap(_.left.toSeq.flatten) - val get = [A] => (fa: ValidatedInit[A]) => (fa.right.get) + val get = [A] => (fa: ValidatedInit[A]) => fa.toOption.get if undefs.isEmpty then Right(Apply(f, tx.transform(get))) else Left(undefs.toSeq) diff --git a/util-collection/src/main/scala/sbt/internal/util/WrappedMap.scala b/util-collection/src/main/scala/sbt/internal/util/WrappedMap.scala index 22cc832e7..e25a7f2a9 100644 --- a/util-collection/src/main/scala/sbt/internal/util/WrappedMap.scala +++ b/util-collection/src/main/scala/sbt/internal/util/WrappedMap.scala @@ -7,7 +7,7 @@ package sbt.internal.util -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters.* private[util] class WrappedMap[K, V](val jmap: java.util.Map[K, V]) extends Map[K, V] { def removed(key: K): scala.collection.immutable.Map[K, V] = jmap.asScala.toMap.removed(key) From 95a82adffc89438e9c75409cb4c8b89a6198ca96 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 5 Mar 2024 10:41:07 +0100 Subject: [PATCH 04/12] Activate -Xfatal-warnings --- project/HouseRulesPlugin.scala | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/project/HouseRulesPlugin.scala b/project/HouseRulesPlugin.scala index 036b4a967..3f7410564 100644 --- a/project/HouseRulesPlugin.scala +++ b/project/HouseRulesPlugin.scala @@ -14,16 +14,15 @@ object HouseRulesPlugin extends AutoPlugin { scalacOptions += "-language:implicitConversions", scalacOptions ++= "-Xfuture".ifScala213OrMinus.value.toList, scalacOptions ++= "-Xlint".ifScala2.value.toList, - // TODO: uncomment once we can build without warnings on Scala 3 - // scalacOptions ++= "-Xfatal-warnings" - // .ifScala3x(_ => { - // sys.props.get("sbt.build.fatal") match { - // case Some(_) => java.lang.Boolean.getBoolean("sbt.build.fatal") - // case _ => true - // } - // }) - // .value - // .toList, + scalacOptions ++= "-Xfatal-warnings" + .ifScala3x(_ => { + sys.props.get("sbt.build.fatal") match { + case Some(_) => java.lang.Boolean.getBoolean("sbt.build.fatal") + case _ => true + } + }) + .value + .toList, scalacOptions ++= "-Ykind-projector".ifScala3.value.toList, scalacOptions ++= "-Yinline-warnings".ifScala211OrMinus.value.toList, scalacOptions ++= "-Yno-adapted-args".ifScala212OrMinus.value.toList, From 0458e8063df13e0fa7ed65b8dca3c966c483488d Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 5 Mar 2024 11:16:35 +0100 Subject: [PATCH 05/12] Adapt -Wunused --- build.sbt | 13 +++++-------- .../src/test/scala/ManagedLoggerSpec.scala | 2 -- main-command/src/main/scala/sbt/BasicCommands.scala | 2 -- main-command/src/main/scala/sbt/BasicKeys.scala | 1 - .../scala/sbt/internal/client/NetworkClient.scala | 1 - main/src/main/scala/sbt/internal/Continuous.scala | 3 +++ project/HouseRulesPlugin.scala | 4 ++-- run/src/main/scala/sbt/Fork.scala | 8 +++----- .../scala/sbt/internal/testing/TestLogger.scala | 6 +++--- 9 files changed, 16 insertions(+), 24 deletions(-) diff --git a/build.sbt b/build.sbt index ffe185655..82b37f5bb 100644 --- a/build.sbt +++ b/build.sbt @@ -368,10 +368,7 @@ lazy val utilLogging = (project in file("internal") / "util-logging") ), libraryDependencies ++= Seq(scalacheck % "test", scalatest % "test"), Compile / generateContrabands / contrabandCodecsDependencies := List(sjsonNewCore.value), - Compile / scalacOptions ++= (scalaVersion.value match { - case v if v.startsWith("2.12.") => List("-Ywarn-unused:-locals,-explicits,-privates") - case _ => List() - }), + Compile / scalacOptions ++= Seq("-Wunused:imports,implicits,nowarn"), Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", @@ -479,7 +476,7 @@ lazy val testingProj = (project in file("testing")) sjsonNewScalaJson.value, sjsonNewCore.value, ), - Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", + Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", @@ -576,7 +573,7 @@ lazy val runProj = (project in file("run")) .settings( testedBaseSettings, name := "Run", - Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", + Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", @@ -699,7 +696,7 @@ lazy val protocolProj = (project in file("protocol")) testedBaseSettings, name := "Protocol", libraryDependencies ++= Seq(sjsonNewScalaJson.value, sjsonNewCore.value, ipcSocket), - Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", + Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", @@ -746,7 +743,7 @@ lazy val commandProj = (project in file("main-command")) sjsonNewScalaJson.value, templateResolverApi ), - Compile / scalacOptions += "-Ywarn-unused:-locals,-explicits,-privates", + Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", diff --git a/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala b/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala index 4cc44fb29..05a2d9bab 100644 --- a/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala +++ b/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala @@ -13,11 +13,9 @@ import sbt.util._ import sbt.internal.util.appmacro.StringTypeTag import java.io.{ File, PrintWriter } import sbt.io.Using -import scala.annotation.nowarn class ManagedLoggerSpec extends AnyFlatSpec with Matchers { val context = LoggerContext() - @nowarn // TODO create a new appender for testing purposes - 3/12/21 val asyncStdout = ConsoleAppender() def newLogger(name: String): ManagedLogger = context.logger(name, None, None) diff --git a/main-command/src/main/scala/sbt/BasicCommands.scala b/main-command/src/main/scala/sbt/BasicCommands.scala index c0b26fd93..ec78afedf 100644 --- a/main-command/src/main/scala/sbt/BasicCommands.scala +++ b/main-command/src/main/scala/sbt/BasicCommands.scala @@ -27,7 +27,6 @@ import sbt.internal.inc.ModuleUtilities import sbt.internal.client.NetworkClient import DefaultParsers._ -import Function.tupled import Command.applyEffect import BasicCommandStrings._ import CommandUtil._ @@ -35,7 +34,6 @@ import BasicKeys._ import java.io.File import sbt.io.IO -import sbt.util.Level import scala.Function.tupled import scala.collection.mutable.ListBuffer diff --git a/main-command/src/main/scala/sbt/BasicKeys.scala b/main-command/src/main/scala/sbt/BasicKeys.scala index e616f4d25..9d1917221 100644 --- a/main-command/src/main/scala/sbt/BasicKeys.scala +++ b/main-command/src/main/scala/sbt/BasicKeys.scala @@ -18,7 +18,6 @@ import sbt.util.{ ActionCacheStore, Level } import scala.annotation.nowarn import scala.concurrent.duration.FiniteDuration import xsbti.VirtualFile -import sbt.librarymanagement.Configuration object BasicKeys { val historyPath = AttributeKey[Option[File]]( diff --git a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala index e3d344b31..bf42a8d94 100644 --- a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala @@ -18,7 +18,6 @@ import java.util.concurrent.atomic.{ AtomicBoolean, AtomicReference } import java.util.concurrent.{ ConcurrentHashMap, LinkedBlockingQueue, TimeUnit } import sbt.BasicCommandStrings.{ DashDashDetachStdio, DashDashServer, Shutdown, TerminateAction } -import sbt.internal.client.NetworkClient.Arguments import sbt.internal.langserver.{ LogMessageParams, MessageType, PublishDiagnosticsParams } import sbt.internal.protocol._ import sbt.internal.util.{ ConsoleAppender, ConsoleOut, Signals, Terminal, Util } diff --git a/main/src/main/scala/sbt/internal/Continuous.scala b/main/src/main/scala/sbt/internal/Continuous.scala index 988fa05e5..aae369942 100644 --- a/main/src/main/scala/sbt/internal/Continuous.scala +++ b/main/src/main/scala/sbt/internal/Continuous.scala @@ -433,6 +433,7 @@ private[sbt] object Continuous extends DeprecatedContinuous { } } + @nowarn private def getFileEvents( configs: Seq[Config], logger: Logger, @@ -986,11 +987,13 @@ private[sbt] object Continuous extends DeprecatedContinuous { def arguments(logger: Logger): Arguments = new Arguments(logger, inputs()) end Config + @nowarn private def getStartMessage(key: ScopedKey[_])(implicit e: Extracted): StartMessage = Some { lazy val default = key.get(watchStartMessage).getOrElse(Watch.defaultStartWatch) key.get(deprecatedWatchingMessage).map(Left(_)).getOrElse(Right(default)) } + @nowarn private def getTriggerMessage( key: ScopedKey[_] )(implicit e: Extracted): TriggerMessage = { diff --git a/project/HouseRulesPlugin.scala b/project/HouseRulesPlugin.scala index 3f7410564..0c6098b00 100644 --- a/project/HouseRulesPlugin.scala +++ b/project/HouseRulesPlugin.scala @@ -38,9 +38,9 @@ object HouseRulesPlugin extends AutoPlugin { private implicit final class AnyWithIfScala[A](val __x: A) { def ifScala2x(p: Long => Boolean) = - Def.setting(scalaPartV.value collect { case (2, y) if p(y) => __x }) + Def.setting(scalaPartV.value.collect { case (2, y) if p(y) => __x }) def ifScala3x(p: Long => Boolean) = - Def.setting(scalaPartV.value collect { case (3, y) if p(y) => __x }) + Def.setting(scalaPartV.value.collect { case (3, y) if p(y) => __x }) def ifScalaLte(v: Long) = ifScala2x(_ <= v) def ifScalaGte(v: Long) = ifScala2x(_ >= v) def ifScala211OrMinus = ifScalaLte(11) diff --git a/run/src/main/scala/sbt/Fork.scala b/run/src/main/scala/sbt/Fork.scala index 51da7d89b..b1d5d05d9 100644 --- a/run/src/main/scala/sbt/Fork.scala +++ b/run/src/main/scala/sbt/Fork.scala @@ -52,16 +52,14 @@ final class Fork(val commandName: String, val runnerClass: Option[String]) { * command. */ def fork(config: ForkOptions, arguments: Seq[String]): Process = { - import config.{ envVars => env, _ } + import config.* val executable = Fork.javaCommand(javaHome, commandName).getAbsolutePath val preOptions = makeOptions(runJVMOptions, bootJars, arguments) val (classpathEnv, options) = Fork.fitClasspath(preOptions) val command = executable +: options - val environment: List[(String, String)] = env.toList ++ - (classpathEnv map { value => - Fork.ClasspathEnvKey -> value - }) + val environment: List[(String, String)] = envVars.toList ++ + classpathEnv.map(value => Fork.ClasspathEnvKey -> value) val jpb = if (Fork.shouldUseArgumentsFile(options)) new JProcessBuilder(executable, Fork.createArgumentsFile(options)) diff --git a/testing/src/main/scala/sbt/internal/testing/TestLogger.scala b/testing/src/main/scala/sbt/internal/testing/TestLogger.scala index 3ce2be998..bb772ac11 100644 --- a/testing/src/main/scala/sbt/internal/testing/TestLogger.scala +++ b/testing/src/main/scala/sbt/internal/testing/TestLogger.scala @@ -122,7 +122,7 @@ final class TestLogging( class TestLogger(val logging: TestLogging) extends TestsListener { import TestLogger._ - import logging.{ global => log, logTest, managed } + import logging.{ global, logTest, managed } import sbt.protocol.testing.codec.JsonProtocol._ def doInit(): Unit = managed.logEvent(Level.Info, TestInitEvent()) @@ -135,8 +135,8 @@ class TestLogger(val logging: TestLogging) extends TestsListener { managed.logEvent(Level.Info, EndTestGroupEvent(name, result)) def endGroup(name: String, t: Throwable): Unit = { - log.trace(t) - log.error(s"Could not run test $name: $t") + global.trace(t) + global.error(s"Could not run test $name: $t") managed.logEvent( Level.Info, EndTestGroupErrorEvent(name, (t.getMessage + t.getStackTrace.toString).mkString("\n")) From 369e64700847e34389318bbf4e39d9b8b6a95387 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 5 Mar 2024 13:24:31 +0100 Subject: [PATCH 06/12] Fix scala 2 compat with -Xsource:3 and scala-collection-compat --- build.sbt | 34 ++++++++----------- .../sbt/internal/util/ConsoleAppender.scala | 2 -- .../scala/sbt/internal/util/ConsoleOut.scala | 8 ++--- .../scala/sbt/internal/util/EscHelpers.scala | 2 -- .../main/scala/sbt/internal/util/JLine3.scala | 10 ------ .../sbt/internal/util/ProgressState.scala | 2 +- .../internal/util/SourcePositionMacro.scala | 1 - .../scala/sbt/internal/util/Relation.scala | 3 +- .../internal/scripted/FilteredLoader.scala | 7 ++-- .../internal/scripted/StatementHandler.scala | 2 +- project/Dependencies.scala | 1 + project/HouseRulesPlugin.scala | 3 +- project/PublishBinPlugin.scala | 4 ++- project/SbtLauncherPlugin.scala | 2 +- 14 files changed, 35 insertions(+), 46 deletions(-) diff --git a/build.sbt b/build.sbt index 82b37f5bb..47a731471 100644 --- a/build.sbt +++ b/build.sbt @@ -55,7 +55,7 @@ Global / excludeLint += scriptedBufferLog Global / excludeLint += checkPluginCross ThisBuild / evictionErrorLevel := Level.Info -def commonBaseSettings: Seq[Setting[_]] = Def.settings( +def commonSettings: Seq[Setting[_]] = Def.settings( headerLicense := Some( HeaderLicense.Custom( """|sbt @@ -68,7 +68,7 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( scalaVersion := baseScalaVersion, componentID := None, resolvers += Resolver.typesafeIvyRepo("releases").withName("typesafe-sbt-build-ivy-releases"), - resolvers += Resolver.sonatypeRepo("snapshots"), + resolvers ++= Resolver.sonatypeOssRepos("snapshots"), testFrameworks += TestFramework("hedgehog.sbt.Framework"), testFrameworks += TestFramework("verify.runner.Framework"), Global / concurrentRestrictions += Util.testExclusiveRestriction, @@ -101,20 +101,15 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( Test / publishArtifact := false, run / fork := true, ) -def commonSettings: Seq[Setting[_]] = - commonBaseSettings :+ { - libraryDependencies ++= { - if (scalaBinaryVersion.value == "3") { - Nil - } else { - Seq(compilerPlugin(kindProjector)) - } - } - } def utilCommonSettings: Seq[Setting[_]] = Def.settings( baseSettings, - crossScalaVersions := Seq(scala212, scala213, scala3) + crossScalaVersions := Seq(scala212, scala213, scala3), + libraryDependencies += Dependencies.scalaCollectionCompat, + libraryDependencies ++= { + if (scalaBinaryVersion.value == "3") Nil + else Seq(compilerPlugin(kindProjector)) + } ) def minimalSettings: Seq[Setting[_]] = @@ -258,12 +253,12 @@ lazy val bundledLauncherProj = /* ** subproject declarations ** */ -val collectionProj = (project in file("util-collection")) +val collectionProj = project + .in(file("util-collection")) .dependsOn(utilPosition, utilCore) .settings( name := "Collections", testedBaseSettings, - baseSettings, libraryDependencies ++= Seq(sjsonNewScalaJson.value), libraryDependencies ++= (CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, major)) if major <= 12 => Seq() @@ -349,7 +344,8 @@ lazy val utilCore = project utilMimaSettings ) -lazy val utilLogging = (project in file("internal") / "util-logging") +lazy val utilLogging = project + .in(file("internal") / "util-logging") .enablePlugins(ContrabandPlugin, JsonCodecPlugin) .dependsOn(utilInterface, utilCore) .settings( @@ -421,9 +417,9 @@ lazy val utilRelation = (project in file("internal") / "util-relation") ) // Persisted caching based on sjson-new -lazy val utilCache = (project in file("util-cache")) +lazy val utilCache = project + .in(file("util-cache")) .settings( - utilCommonSettings, testedBaseSettings, name := "Util Cache", libraryDependencies ++= @@ -1044,7 +1040,7 @@ lazy val sbtClientProj = (project in file("client")) .enablePlugins(NativeImagePlugin) .dependsOn(commandProj) .settings( - commonBaseSettings, + commonSettings, publish / skip := true, name := "sbt-client", mimaPreviousArtifacts := Set.empty, diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala index 3d0268045..d464757b8 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala @@ -373,8 +373,6 @@ object ConsoleAppender { } private[sbt] def generateName(): String = "out-" + generateId.incrementAndGet - - private[this] def ansiSupported: Boolean = Terminal.console.isAnsiSupported } // See http://stackoverflow.com/questions/24205093/how-to-create-a-custom-appender-in-log4j2 diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleOut.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleOut.scala index d1f387ab6..902fbfc43 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleOut.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleOut.scala @@ -60,7 +60,7 @@ object ConsoleOut { def systemOutOverwrite(f: (String, String) => Boolean): ConsoleOut = new ConsoleOut { val lockObject: PrintStream = System.out private[this] var last: Option[String] = None - private[this] var current = new java.lang.StringBuffer + private[this] val current = new java.lang.StringBuffer def print(s: String): Unit = synchronized { current.append(s); () } def println(s: String): Unit = synchronized { current.append(s); println() } def println(): Unit = synchronized { @@ -128,7 +128,7 @@ object ConsoleOut { case c => c } def printStreamOut(out: PrintStream): ConsoleOut = new ConsoleOut { - val lockObject = out + val lockObject: AnyRef = out def print(s: String) = out.print(s) def println(s: String) = out.println(s) def println() = out.println() @@ -136,7 +136,7 @@ object ConsoleOut { override def toString: String = s"PrintStreamConsoleOut($out)" } def printWriterOut(out: PrintWriter): ConsoleOut = new ConsoleOut { - val lockObject = out + val lockObject: AnyRef = out def print(s: String) = out.print(s) def println(s: String) = { out.println(s); flush() } def println() = { out.println(); flush() } @@ -144,7 +144,7 @@ object ConsoleOut { override def toString: String = s"PrintWriterConsoleOut($out)" } def bufferedWriterOut(out: BufferedWriter): ConsoleOut = new ConsoleOut { - val lockObject = out + val lockObject: AnyRef = out def print(s: String) = out.write(s) def println(s: String) = { out.write(s); println() } def println() = { out.newLine(); flush() } diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/EscHelpers.scala b/internal/util-logging/src/main/scala/sbt/internal/util/EscHelpers.scala index 3a43d1f4e..7bd7d7040 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/EscHelpers.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/EscHelpers.scala @@ -143,7 +143,6 @@ object EscHelpers { */ def strip(bytes: Array[Byte], stripAnsi: Boolean, stripColor: Boolean): (Array[Byte], Int) = { val res = Array.fill[Byte](bytes.length)(0) - var i = 0 var index = 0 var state = 0 var limit = 0 @@ -205,7 +204,6 @@ object EscHelpers { def stripColorsAndMoves(s: String): String = { val bytes = s.getBytes val res = Array.fill[Byte](bytes.length)(0) - var i = 0 var index = 0 var state = 0 var limit = 0 diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala b/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala index a8c10a62f..ebd92e684 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/JLine3.scala @@ -31,8 +31,6 @@ private[sbt] object JLine3 { private[this] val forceWindowsJansiHolder = new AtomicBoolean(false) private[sbt] def forceWindowsJansi(): Unit = forceWindowsJansiHolder.set(true) private[this] def windowsJansi(): org.jline.terminal.Terminal = { - val support = new JansiSupportImpl - val winConsole = support.isWindowsConsole(); val termType = sys.props.get("org.jline.terminal.type").orElse(sys.env.get("TERM")).orNull val term = JansiWinSysTerminal.createTerminal( "console", @@ -220,14 +218,6 @@ private[sbt] object JLine3 { } } } - private def enterRawModeImpl(term: JTerminal): Attributes = { - val prvAttr = term.getAttributes() - val newAttr = new Attributes(prvAttr) - newAttr.setLocalFlags(EnumSet.of(LocalFlag.ICANON, LocalFlag.ECHO, LocalFlag.IEXTEN), false) - newAttr.setInputFlags(EnumSet.of(InputFlag.IXON, InputFlag.ICRNL, InputFlag.INLCR), false) - term.setAttributes(newAttr) - prvAttr - } // We need to set the ENABLE_PROCESS_INPUT flag for ctrl+c to be treated as a signal in windows // https://docs.microsoft.com/en-us/windows/console/setconsolemode private[this] val ENABLE_PROCESS_INPUT = 1 diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala index 9608be5a9..cffa485e9 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ProgressState.scala @@ -107,7 +107,7 @@ private[sbt] final class ProgressState( val parts = new String(bytes, "UTF-8").split(System.lineSeparator) def appendLine(l: String, appendNewline: Boolean): Unit = { toWrite ++= l.getBytes("UTF-8") - if (!l.getBytes("UTF-8").endsWith("\r")) toWrite ++= clearScreenBytes + if (!l.getBytes("UTF-8").endsWith("\r".getBytes)) toWrite ++= clearScreenBytes if (appendNewline) toWrite ++= lineSeparatorBytes } parts.dropRight(1).foreach(appendLine(_, true)) diff --git a/internal/util-position/src/main/scala-2/sbt/internal/util/SourcePositionMacro.scala b/internal/util-position/src/main/scala-2/sbt/internal/util/SourcePositionMacro.scala index e872a124e..309ce5835 100644 --- a/internal/util-position/src/main/scala-2/sbt/internal/util/SourcePositionMacro.scala +++ b/internal/util-position/src/main/scala-2/sbt/internal/util/SourcePositionMacro.scala @@ -7,7 +7,6 @@ package sbt.internal.util -import scala.language.experimental.macros import scala.annotation.tailrec import scala.reflect.macros.blackbox import scala.reflect.internal.util.UndefinedPosition diff --git a/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala b/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala index 15144c3cf..4c9b0b3cf 100644 --- a/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala +++ b/internal/util-relation/src/main/scala/sbt/internal/util/Relation.scala @@ -8,6 +8,7 @@ package sbt.internal.util import Relation._ +import scala.collection.compat.* object Relation { @@ -178,7 +179,7 @@ private final class MRelation[A, B](fwd: Map[A, Set[B]], rev: Map[B, Set[A]]) else new MRelation(add(fwd, from, to), to.foldLeft(rev)((map, t) => add(map, t, from :: Nil))) def ++(rs: Iterable[(A, B)]) = rs.foldLeft(this: Relation[A, B]) { _ + _ } - def ++(other: Relation[A, B]) = + def ++(other: Relation[A, B]): Relation[A, B] = new MRelation[A, B](combine(fwd, other.forwardMap), combine(rev, other.reverseMap)) def --(ts: Iterable[A]): Relation[A, B] = ts.foldLeft(this: Relation[A, B]) { _ - _ } diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/FilteredLoader.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/FilteredLoader.scala index 8c980eb97..16499886e 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/FilteredLoader.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/FilteredLoader.scala @@ -9,6 +9,9 @@ package sbt package internal package scripted +import java.{ util => ju } +import java.net.URL + final class FilteredLoader(parent: ClassLoader) extends ClassLoader(parent) { @throws(classOf[ClassNotFoundException]) override final def loadClass(className: String, resolve: Boolean): Class[_] = { @@ -17,6 +20,6 @@ final class FilteredLoader(parent: ClassLoader) extends ClassLoader(parent) { else throw new ClassNotFoundException(className) } - override def getResources(name: String) = null - override def getResource(name: String) = null + override def getResources(name: String): ju.Enumeration[URL] = null + override def getResource(name: String): URL = null } diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/StatementHandler.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/StatementHandler.scala index 56a2bfc44..6962cee6a 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/StatementHandler.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/StatementHandler.scala @@ -29,5 +29,5 @@ trait BasicStatementHandler extends StatementHandler { /** Use when a stack trace is not useful */ final class TestFailed(msg: String) extends RuntimeException(msg) { - override def fillInStackTrace = this + override def fillInStackTrace: Throwable = this } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 2f08ef816..14b00b855 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -133,6 +133,7 @@ object Dependencies { } ) val scalaPar = "org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.4" + val scalaCollectionCompat = "org.scala-lang.modules" %% "scala-collection-compat" % "2.11.0" // specify all of log4j modules to prevent misalignment def log4jModule = (n: String) => "org.apache.logging.log4j" % n % "2.17.1" diff --git a/project/HouseRulesPlugin.scala b/project/HouseRulesPlugin.scala index 0c6098b00..5d2da8d9b 100644 --- a/project/HouseRulesPlugin.scala +++ b/project/HouseRulesPlugin.scala @@ -29,7 +29,8 @@ object HouseRulesPlugin extends AutoPlugin { scalacOptions ++= "-Ywarn-dead-code".ifScala2.value.toList, scalacOptions ++= "-Ywarn-numeric-widen".ifScala2.value.toList, scalacOptions ++= "-Ywarn-value-discard".ifScala2.value.toList, - scalacOptions ++= "-Ywarn-unused-import".ifScala2x(v => 11 <= v && v <= 12).value.toList + scalacOptions ++= "-Ywarn-unused-import".ifScala2x(v => 11 <= v && v <= 12).value.toList, + scalacOptions ++= "-Xsource:3".ifScala2.value.toList ) ++ Seq(Compile, Test).flatMap(c => (c / console / scalacOptions) --= Seq("-Ywarn-unused-import", "-Xlint") ) diff --git a/project/PublishBinPlugin.scala b/project/PublishBinPlugin.scala index 5b7c94e1d..e105f66c1 100644 --- a/project/PublishBinPlugin.scala +++ b/project/PublishBinPlugin.scala @@ -21,7 +21,9 @@ object PublishBinPlugin extends AutoPlugin { override val globalSettings = Seq(publishLocalBin := (())) override val projectSettings: Seq[Def.Setting[_]] = Def settings ( - publishLocalBin := Classpaths.publishTask(publishLocalBinConfig).value, + publishLocalBin := Classpaths + .publishOrSkip(publishLocalBinConfig, publishLocalBin / skip) + .value, publishLocalBinConfig := Classpaths.publishConfig( false, // publishMavenStyle.value, Classpaths.deliverPattern(crossTarget.value), diff --git a/project/SbtLauncherPlugin.scala b/project/SbtLauncherPlugin.scala index 65f9f2e67..9dc45626d 100644 --- a/project/SbtLauncherPlugin.scala +++ b/project/SbtLauncherPlugin.scala @@ -47,7 +47,7 @@ object SbtLauncherPlugin extends AutoPlugin { val path = dir.toPath f => if (f != dir) f -> path.relativize(f.toPath).toString :: Nil else Nil } - IO.zip(dir.allPaths.get().flatMap(rebase), target) + IO.zip(dir.allPaths.get().flatMap(rebase), target, None) } target } From 12e9267e1ed420a09a298517c5fe737a9a94f615 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 5 Mar 2024 15:21:57 +0100 Subject: [PATCH 07/12] Remove more unused --- build.sbt | 5 ----- .../src/main/scala/sbt/internal/Eval.scala | 5 +---- .../scala/sbt/internal/LoadedSbtFile.scala | 1 - .../scala/sbt/internal/parser/SbtParser.scala | 7 ------- .../sbt/internal/parser/SbtRefactorings.scala | 1 - .../internal/parser/SessionSettingsSpec.scala | 3 --- .../parser/SplitExpressionsBehavior.scala | 2 -- .../sbt/internal/util/appmacro/Cont.scala | 8 ++----- .../internal/util/appmacro/ContextUtil.scala | 2 -- .../test/scala/sbt/internal/ContTest.scala | 1 - .../scala/sbt/internal/ContTestMacro.scala | 1 - .../test/scala/sbt/internal/ConvertTest.scala | 1 - .../scala/sbt/internal/util/LineReader.scala | 2 -- .../scala/sbt/internal/util/logic/Logic.scala | 3 +-- main-actions/src/main/scala/sbt/Pkg.scala | 4 ---- main-actions/src/main/scala/sbt/Sync.scala | 1 - main-settings/src/main/scala/sbt/Def.scala | 6 ++---- .../src/main/scala/sbt/InputTask.scala | 5 ++--- .../src/main/scala/sbt/Previous.scala | 1 - .../src/main/scala/sbt/Project.scala | 4 ++-- .../src/main/scala/sbt/Reference.scala | 2 -- .../src/main/scala/sbt/SlashSyntax.scala | 2 -- .../src/main/scala/sbt/Structure.scala | 5 ++--- .../main/scala/sbt/std/InputTaskMacro.scala | 3 --- .../src/main/scala/sbt/std/InputWrapper.scala | 6 ------ .../src/main/scala/sbt/std/KeyMacro.scala | 1 - .../src/main/scala/sbt/std/TaskMacro.scala | 8 +------ .../src/test/scala/sbt/TupleSyntaxTest.scala | 1 - main/src/main/scala/sbt/Defaults.scala | 21 ++++++++----------- main/src/main/scala/sbt/EvaluateTask.scala | 2 +- main/src/main/scala/sbt/Extracted.scala | 2 -- main/src/main/scala/sbt/Main.scala | 6 +++--- main/src/main/scala/sbt/PluginCross.scala | 4 +--- main/src/main/scala/sbt/ProjectExtra.scala | 5 +---- main/src/main/scala/sbt/RemoteCache.scala | 5 +---- main/src/main/scala/sbt/ScopedKeyData.scala | 1 - .../scala/sbt/coursierint/LMCoursier.scala | 2 -- .../main/scala/sbt/internal/APIMappings.scala | 1 - .../main/scala/sbt/internal/AddSettings.scala | 1 - .../main/scala/sbt/internal/Aggregation.scala | 3 --- .../main/scala/sbt/internal/BuildDef.scala | 1 - .../scala/sbt/internal/BuildStructure.scala | 3 --- main/src/main/scala/sbt/internal/Clean.scala | 2 +- .../sbt/internal/DeprecatedContinuous.scala | 6 ++---- .../scala/sbt/internal/FileChangesMacro.scala | 1 - .../main/scala/sbt/internal/KeyIndex.scala | 3 --- .../sbt/internal/LibraryManagement.scala | 10 ++++----- main/src/main/scala/sbt/internal/Load.scala | 4 +--- .../main/scala/sbt/internal/LogManager.scala | 2 -- .../scala/sbt/internal/PluginDiscovery.scala | 2 -- .../scala/sbt/internal/PluginsDebug.scala | 1 - .../sbt/internal/ProjectNavigation.scala | 1 - .../scala/sbt/internal/SessionSettings.scala | 3 +-- .../sbt/internal/SettingCompletions.scala | 6 +----- .../WatchTransitiveDependencies.scala | 2 -- .../internal/graph/rendering/TreeView.scala | 4 ++-- .../server/BuildServerEvalReporter.scala | 13 ++++++------ .../internal/server/BuildServerProtocol.scala | 3 +-- .../sbt/internal/server/Definition.scala | 4 +--- .../sbt/internal/server/NetworkChannel.scala | 3 +-- .../sbt/internal/server/SettingQuery.scala | 1 - .../sbt/internal/server/VirtualTerminal.scala | 1 - main/src/main/scala/sbt/nio/FileStamp.scala | 1 - main/src/main/scala/sbt/nio/Settings.scala | 9 -------- main/src/main/scala/sbt/nio/Watch.scala | 1 - project/HouseRulesPlugin.scala | 7 +++++++ sbt-app/src/main/scala/package.scala | 1 - .../sbt/scriptedtest/ScriptedTests.scala | 2 +- .../src/main/scala/sbt/std/Transform.scala | 2 +- .../src/test/scala/TaskSerial.scala | 2 +- tasks/src/main/scala/sbt/Incomplete.scala | 2 +- tasks/src/main/scala/sbt/TaskId.scala | 2 -- .../sbt/internal/util/PlainVirtualFile1.scala | 4 ++-- .../scala/sbt/util/ActionCacheStore.scala | 5 +---- .../src/main/scala/sbt/util/HashUtil.scala | 1 - .../main/scala/sbt/util/PathHashWriters.scala | 2 +- .../test/scala/sbt/util/ActionCacheTest.scala | 1 - .../src/test/scala/sbt/util/HasherTest.scala | 4 +--- .../src/main/scala/sbt/util/Tracked.scala | 1 - 79 files changed, 67 insertions(+), 200 deletions(-) diff --git a/build.sbt b/build.sbt index 47a731471..500e7bc52 100644 --- a/build.sbt +++ b/build.sbt @@ -364,7 +364,6 @@ lazy val utilLogging = project ), libraryDependencies ++= Seq(scalacheck % "test", scalatest % "test"), Compile / generateContrabands / contrabandCodecsDependencies := List(sjsonNewCore.value), - Compile / scalacOptions ++= Seq("-Wunused:imports,implicits,nowarn"), Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", @@ -472,7 +471,6 @@ lazy val testingProj = (project in file("testing")) sjsonNewScalaJson.value, sjsonNewCore.value, ), - Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", @@ -569,7 +567,6 @@ lazy val runProj = (project in file("run")) .settings( testedBaseSettings, name := "Run", - Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", @@ -692,7 +689,6 @@ lazy val protocolProj = (project in file("protocol")) testedBaseSettings, name := "Protocol", libraryDependencies ++= Seq(sjsonNewScalaJson.value, sjsonNewCore.value, ipcSocket), - Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", @@ -739,7 +735,6 @@ lazy val commandProj = (project in file("main-command")) sjsonNewScalaJson.value, templateResolverApi ), - Compile / scalacOptions += "-Wunused:imports,implicits,nowarn", Compile / managedSourceDirectories += baseDirectory.value / "src" / "main" / "contraband-scala", Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", diff --git a/buildfile/src/main/scala/sbt/internal/Eval.scala b/buildfile/src/main/scala/sbt/internal/Eval.scala index 1b0f2eeda..a5cec43b5 100644 --- a/buildfile/src/main/scala/sbt/internal/Eval.scala +++ b/buildfile/src/main/scala/sbt/internal/Eval.scala @@ -2,13 +2,11 @@ package sbt package internal import dotty.tools.dotc.ast -import dotty.tools.dotc.ast.{ tpd, untpd } +import dotty.tools.dotc.ast.tpd import dotty.tools.dotc.CompilationUnit -import dotty.tools.dotc.config.ScalaSettings import dotty.tools.dotc.core.Contexts.{ atPhase, Context } import dotty.tools.dotc.core.{ Flags, Names, Phases, Symbols, Types } import dotty.tools.dotc.Driver -import dotty.tools.dotc.parsing.Parsers.Parser import dotty.tools.dotc.reporting.Reporter import dotty.tools.dotc.Run import dotty.tools.dotc.util.SourceFile @@ -53,7 +51,6 @@ class Eval( case None => EvalReporter.store final class EvalDriver extends Driver: - import dotty.tools.dotc.config.Settings.Setting._ val compileCtx0 = initCtx.fresh val options = nonCpOptions ++ Seq("-classpath", classpathString, "dummy.scala") val compileCtx1 = setup(options.toArray, compileCtx0) match diff --git a/buildfile/src/main/scala/sbt/internal/LoadedSbtFile.scala b/buildfile/src/main/scala/sbt/internal/LoadedSbtFile.scala index 6c5fdda66..9196ca5c4 100644 --- a/buildfile/src/main/scala/sbt/internal/LoadedSbtFile.scala +++ b/buildfile/src/main/scala/sbt/internal/LoadedSbtFile.scala @@ -9,7 +9,6 @@ package sbt package internal import Def.Setting -import java.io.File import java.nio.file.Path /** diff --git a/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala b/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala index 2deeedeb3..b014616de 100644 --- a/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala +++ b/buildfile/src/main/scala/sbt/internal/parser/SbtParser.scala @@ -16,12 +16,9 @@ import java.util.concurrent.ConcurrentHashMap import sbt.internal.parser.SbtParser._ import dotty.tools.dotc.ast.Trees.Lazy import dotty.tools.dotc.ast.untpd.* -import dotty.tools.dotc.CompilationUnit import dotty.tools.dotc.core.Contexts.* import dotty.tools.dotc.Driver -import dotty.tools.dotc.util.NoSourcePosition import dotty.tools.dotc.util.SourceFile -import dotty.tools.dotc.util.SourcePosition import dotty.tools.io.VirtualDirectory import dotty.tools.io.VirtualFile import dotty.tools.dotc.parsing.* @@ -30,10 +27,7 @@ import dotty.tools.dotc.reporting.Diagnostic import dotty.tools.dotc.reporting.Reporter import dotty.tools.dotc.reporting.StoreReporter import scala.util.Random -import scala.util.{ Failure, Success } import xsbti.VirtualFileRef -import dotty.tools.dotc.printing.Printer -import dotty.tools.dotc.config.Printers private[sbt] object SbtParser: val END_OF_LINE_CHAR = '\n' @@ -164,7 +158,6 @@ private[sbt] object SbtParser: * @return the parsed trees */ private def parse(filePath: String, reporterId: String)(using Context): List[Tree] = - import defaultGlobalForParser.* val reporter = globalReporter.getOrCreateReporter(reporterId) reporter.removeBufferedMessages val parser = Parsers.Parser(ctx.source) diff --git a/buildfile/src/main/scala/sbt/internal/parser/SbtRefactorings.scala b/buildfile/src/main/scala/sbt/internal/parser/SbtRefactorings.scala index 456776469..de16a4487 100644 --- a/buildfile/src/main/scala/sbt/internal/parser/SbtRefactorings.scala +++ b/buildfile/src/main/scala/sbt/internal/parser/SbtRefactorings.scala @@ -9,7 +9,6 @@ package sbt package internal package parser -import java.io.File import dotty.tools.dotc.ast.untpd import dotty.tools.dotc.core.Contexts.Context diff --git a/buildfile/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala b/buildfile/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala index 401e6a9f0..a6f9c8d6d 100644 --- a/buildfile/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala +++ b/buildfile/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala @@ -12,12 +12,9 @@ package parser import sbt.internal.inc.PlainVirtualFileConverter import sbt.internal.parser.SbtRefactorings.SessionSetting -import java.io.File -import java.io.FilenameFilter import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths -import scala.io.Source import scala.jdk.CollectionConverters.* abstract class AbstractSessionSettingsSpec(folder: String) extends AbstractSpec { diff --git a/buildfile/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala b/buildfile/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala index df1b53b7d..2714c9a2a 100644 --- a/buildfile/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala +++ b/buildfile/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala @@ -9,8 +9,6 @@ package sbt package internal package parser -import java.io.File - import sbt.internal.util.LineRange import xsbti.VirtualFileRef diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala index ce79860cc..9d52985df 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/Cont.scala @@ -4,22 +4,18 @@ package util package appmacro import scala.collection.mutable.ListBuffer -import scala.reflect.{ ClassTag, TypeTest } +import scala.reflect.ClassTag import scala.quoted.* import sjsonnew.{ BasicJsonProtocol, HashWriter, JsonFormat } import sbt.util.{ ActionCache, - ActionCacheStore, Applicative, BuildWideCacheConfiguration, - Cache, CacheLevelTag, Digest, Monad, } import xsbti.VirtualFile -import Types.Id -import scala.annotation.nowarn /** * Implementation of a macro that provides a direct syntax for applicative functors and monads. It @@ -267,7 +263,7 @@ trait Cont: val expr = input.term.asExprOf[F[a]] typed[F[A1]]( '{ - $applicativeExpr.map[a @nowarn, A1]($expr.asInstanceOf[F[a @nowarn]])($lambda) + $applicativeExpr.map[a, A1]($expr.asInstanceOf[F[a]])($lambda) }.asTerm ).asExprOf[F[A1]] eitherTree match diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala index c4493905b..5287a571f 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala @@ -1,9 +1,7 @@ package sbt.internal.util.appmacro -import sbt.internal.util.Types.Id import scala.compiletime.summonInline import scala.quoted.* -import scala.reflect.TypeTest import scala.collection.mutable import sbt.util.cacheLevel import sbt.util.CacheLevelTag diff --git a/core-macros/src/test/scala/sbt/internal/ContTest.scala b/core-macros/src/test/scala/sbt/internal/ContTest.scala index a6991f0bf..6f8f887d5 100644 --- a/core-macros/src/test/scala/sbt/internal/ContTest.scala +++ b/core-macros/src/test/scala/sbt/internal/ContTest.scala @@ -4,7 +4,6 @@ import sbt.internal.util.appmacro.* import verify.* import ContTestMacro.* import sbt.util.Applicative -import sjsonnew.BasicJsonProtocol object ContTest extends BasicTestSuite: test("pure") { diff --git a/core-macros/src/test/scala/sbt/internal/ContTestMacro.scala b/core-macros/src/test/scala/sbt/internal/ContTestMacro.scala index 06ac30b88..70b334983 100644 --- a/core-macros/src/test/scala/sbt/internal/ContTestMacro.scala +++ b/core-macros/src/test/scala/sbt/internal/ContTestMacro.scala @@ -3,7 +3,6 @@ package sbt.internal import sbt.internal.util.Types.Id import sbt.internal.util.appmacro.* import sbt.util.Applicative -import sbt.util.{ ActionCacheStore, InMemoryActionCacheStore } import scala.quoted.* import ConvertTestMacro.InputInitConvert diff --git a/core-macros/src/test/scala/sbt/internal/ConvertTest.scala b/core-macros/src/test/scala/sbt/internal/ConvertTest.scala index c36f6b6ae..3c02f8dd7 100644 --- a/core-macros/src/test/scala/sbt/internal/ConvertTest.scala +++ b/core-macros/src/test/scala/sbt/internal/ConvertTest.scala @@ -1,6 +1,5 @@ package sbt.internal -import sbt.internal.util.appmacro.* import verify.* import ConvertTestMacro._ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala b/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala index 265f76d72..8f5cdc8b5 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala @@ -25,8 +25,6 @@ import org.jline.utils.ClosedException import sbt.internal.util.complete.Parser import sbt.io.syntax._ -import scala.annotation.tailrec -import scala.concurrent.duration._ import scala.util.control.NonFatal import java.nio.channels.ClosedByInterruptException import java.net.MalformedURLException diff --git a/internal/util-logic/src/main/scala/sbt/internal/util/logic/Logic.scala b/internal/util-logic/src/main/scala/sbt/internal/util/logic/Logic.scala index 6ccca8647..5dd9836c0 100644 --- a/internal/util-logic/src/main/scala/sbt/internal/util/logic/Logic.scala +++ b/internal/util-logic/src/main/scala/sbt/internal/util/logic/Logic.scala @@ -8,7 +8,7 @@ package sbt.internal.util package logic -import scala.annotation.{ nowarn, tailrec } +import scala.annotation.tailrec import Formula.{ And, True } /* @@ -151,7 +151,6 @@ object Logic { if (contradictions.nonEmpty) Some(new InitialContradictions(contradictions)) else None } - @nowarn private[this] def checkAcyclic(clauses: Clauses): Option[CyclicNegation] = { val deps = dependencyMap(clauses) // println(s"deps = $deps") diff --git a/main-actions/src/main/scala/sbt/Pkg.scala b/main-actions/src/main/scala/sbt/Pkg.scala index 375c9bd7e..c98c82590 100644 --- a/main-actions/src/main/scala/sbt/Pkg.scala +++ b/main-actions/src/main/scala/sbt/Pkg.scala @@ -26,10 +26,7 @@ import sjsonnew.{ } import sbt.util.Logger -import sbt.util.{ CacheStoreFactory, FilesInfo, ModifiedFileInfo, PlainFileInfo } -import sbt.util.FileInfo.{ exists, lastModified } import sbt.util.CacheImplicits._ -import sbt.util.Tracked.{ inputChanged, outputChanged } import scala.sys.process.Process import xsbti.{ FileConverter, HashedVirtualFileRef, VirtualFile, VirtualFileRef } @@ -115,7 +112,6 @@ object Pkg: Vector[(HashedVirtualFileRef, String)] :*: VirtualFileRef :*: Seq[PackageOption] :*: LNil ] = import sbt.util.CacheImplicits.given - import sbt.util.PathHashWriters.given LList.iso( (c: Configuration) => ("sources", c.sources.toVector) :*: ("jar", c.jar) :*: ("options", c.options) :*: LNil, diff --git a/main-actions/src/main/scala/sbt/Sync.scala b/main-actions/src/main/scala/sbt/Sync.scala index 9dc53b836..b28f56d52 100644 --- a/main-actions/src/main/scala/sbt/Sync.scala +++ b/main-actions/src/main/scala/sbt/Sync.scala @@ -16,7 +16,6 @@ import sbt.internal.io.TranslatedException import sbt.util.CacheImplicits._ import sbt.util.{ CacheStore, FileInfo } import sbt.io.IO -import sbt.librarymanagement.LibraryManagementCodec import sjsonnew.{ Builder, IsoString, diff --git a/main-settings/src/main/scala/sbt/Def.scala b/main-settings/src/main/scala/sbt/Def.scala index c0b2b5c31..6b05794d5 100644 --- a/main-settings/src/main/scala/sbt/Def.scala +++ b/main-settings/src/main/scala/sbt/Def.scala @@ -7,11 +7,9 @@ package sbt -import java.io.File import java.nio.file.Path import java.net.URI -import scala.annotation.compileTimeOnly import scala.annotation.tailrec import scala.annotation.targetName import sbt.KeyRanks.{ DTask, Invisible } @@ -19,7 +17,7 @@ import sbt.Scope.{ GlobalScope, ThisScope } import sbt.internal.util.Types.const import sbt.internal.util.complete.Parser import sbt.internal.util.{ Terminal => ITerminal, * } -import sbt.util.{ ActionCacheStore, AggregateActionCacheStore, BuildWideCacheConfiguration, InMemoryActionCacheStore } +import sbt.util.{ ActionCacheStore, BuildWideCacheConfiguration, InMemoryActionCacheStore } import Util._ import sbt.util.Show import xsbti.{ HashedVirtualFileRef, VirtualFile } @@ -270,7 +268,7 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits: ): Initialize[Task[A2]] = fab.zipWith(fin)((ab, in) => TaskExtra.select(ab, in)) - import Scoped.syntax.{ *, given } // { Def => _, DTask => _, Invisible => _, * } + import Scoped.syntax.* // derived from select private[sbt] def branchS[A, B, C]( diff --git a/main-settings/src/main/scala/sbt/InputTask.scala b/main-settings/src/main/scala/sbt/InputTask.scala index 3f8331964..add5b859e 100644 --- a/main-settings/src/main/scala/sbt/InputTask.scala +++ b/main-settings/src/main/scala/sbt/InputTask.scala @@ -8,11 +8,10 @@ package sbt import sbt.internal.util.complete.Parser -import Def.{ Initialize, ScopedKey } +import Def.Initialize import std.TaskExtra._ -import sbt.internal.util.{ AttributeKey, Types } +import sbt.internal.util.Types import sbt.internal.util.Types._ -import sbt.internal.util.Util._ import sbt.util.Applicative /** Parses input and produces a task to run. Constructed using the companion object. */ diff --git a/main-settings/src/main/scala/sbt/Previous.scala b/main-settings/src/main/scala/sbt/Previous.scala index 013bad6b4..440d3d3c7 100644 --- a/main-settings/src/main/scala/sbt/Previous.scala +++ b/main-settings/src/main/scala/sbt/Previous.scala @@ -17,7 +17,6 @@ import sbt.util.StampedFormat import sjsonnew.JsonFormat import scala.util.control.NonFatal -import scala.annotation.nowarn /** * Reads the previous value of tasks on-demand. The read values are cached so that they are only read once per task execution. diff --git a/main-settings/src/main/scala/sbt/Project.scala b/main-settings/src/main/scala/sbt/Project.scala index 2713277de..372b29df3 100644 --- a/main-settings/src/main/scala/sbt/Project.scala +++ b/main-settings/src/main/scala/sbt/Project.scala @@ -10,11 +10,11 @@ package sbt import java.io.File import java.util.Locale import sbt.librarymanagement.Configuration -import sbt.Def.{ Flattened, Initialize, ScopedKey, Setting } +import sbt.Def.{ Initialize, ScopedKey, Setting } import sbt.internal.util.Dag import sbt.internal.util.complete.Parser import sbt.internal.util.complete.DefaultParsers -import Scope.{ Global, ThisScope } +import Scope.ThisScope sealed trait ProjectDefinition[PR <: ProjectReference] { diff --git a/main-settings/src/main/scala/sbt/Reference.scala b/main-settings/src/main/scala/sbt/Reference.scala index c880ade31..28222dd52 100644 --- a/main-settings/src/main/scala/sbt/Reference.scala +++ b/main-settings/src/main/scala/sbt/Reference.scala @@ -32,11 +32,9 @@ sealed trait Reference: def /(c: Configuration): RichConfiguration = RichConfiguration(asScope in c) // This is for handling `Zero / Zero / name`. - @nowarn def /(configAxis: ScopeAxis[ConfigKey]): RichConfiguration = new RichConfiguration(asScope.copy(config = configAxis)) - @nowarn final def /[K](key: Scoped.ScopingSetting[K]): K = key.in(asScope) @nowarn diff --git a/main-settings/src/main/scala/sbt/SlashSyntax.scala b/main-settings/src/main/scala/sbt/SlashSyntax.scala index 845ecea47..2feebc60a 100644 --- a/main-settings/src/main/scala/sbt/SlashSyntax.scala +++ b/main-settings/src/main/scala/sbt/SlashSyntax.scala @@ -66,7 +66,6 @@ object SlashSyntax { sealed trait HasSlashKey { protected def scope: Scope - @nowarn final def /[K](key: Scoped.ScopingSetting[K]): K = key.in(scope) } @@ -84,7 +83,6 @@ object SlashSyntax { def /(c: Configuration): RichConfiguration = new RichConfiguration(scope in c) // This is for handling `Zero / Zero / name`. - @nowarn def /(configAxis: ScopeAxis[ConfigKey]): RichConfiguration = new RichConfiguration(scope.copy(config = configAxis)) } diff --git a/main-settings/src/main/scala/sbt/Structure.scala b/main-settings/src/main/scala/sbt/Structure.scala index e0d93a3fa..5579b520c 100644 --- a/main-settings/src/main/scala/sbt/Structure.scala +++ b/main-settings/src/main/scala/sbt/Structure.scala @@ -17,8 +17,7 @@ import sbt.ConcurrentRestrictions.Tag import sbt.Def.{ Initialize, ScopedKey, Setting, setting } import std.TaskMacro import std.TaskExtra.{ task => mktask, _ } -import scala.reflect.{ ClassTag, ManifestFactory } -import scala.annotation.nowarn +import scala.reflect.ClassTag /** An abstraction on top of Settings for build configuration and task definition. */ sealed trait Scoped extends Equals: @@ -80,7 +79,7 @@ sealed abstract class SettingKey[A1] inline def settingMacro[A](inline a: A): Initialize[A] = ${ std.SettingMacro.settingMacroImpl[A]('a) } - final inline def :=(inline v: A1): Setting[A1 @nowarn] = + final inline def :=(inline v: A1): Setting[A1] = ${ TaskMacro.settingAssignMacroImpl('this, 'v) } final inline def +=[A2](inline v: A2)(using Append.Value[A1, A2]): Setting[A1] = diff --git a/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala b/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala index 6f39d6201..08ee3f126 100644 --- a/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala +++ b/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala @@ -26,7 +26,6 @@ object InputTaskMacro: private[this] def inputTaskMacro0[A1: Type](tree: Expr[A1])(using qctx: Quotes ): Expr[Def.Initialize[InputTask[A1]]] = - import qctx.reflect.* // println(s"tree = ${tree.show}") iInitializeMacro(tree) { et => val pt: Expr[State => Parser[Task[A1]]] = iParserMacro(et) { pt => @@ -109,7 +108,6 @@ object InputTaskMacro: convert1.contMapN[A1, ParserInstance.F1, F1](tree, convert1.appExpr, None, inner) private[this] def iTaskMacro[A1: Type](tree: Expr[A1])(using qctx: Quotes): Expr[Task[A1]] = - import qctx.reflect.* val convert1 = new TaskConvert(qctx, 2000) convert1.contMapN[A1, Task, Id](tree, convert1.appExpr, None) /* @@ -218,7 +216,6 @@ object InputTaskMacro: ): Expr[Def.Initialize[InputTask[A2]]] = import qctx.reflect.* val convert1 = new FullConvert(qctx, 1000) - import convert1.Converted def mkInputTask(params: List[ValDef], body: Term): Expr[Def.Initialize[InputTask[A2]]] = val lambdaTpe = MethodType(params.map(_.name))( diff --git a/main-settings/src/main/scala/sbt/std/InputWrapper.scala b/main-settings/src/main/scala/sbt/std/InputWrapper.scala index 2da95f9bf..c0888c836 100644 --- a/main-settings/src/main/scala/sbt/std/InputWrapper.scala +++ b/main-settings/src/main/scala/sbt/std/InputWrapper.scala @@ -11,12 +11,6 @@ package std import scala.language.experimental.macros import scala.annotation.compileTimeOnly -import scala.quoted.* -// import scala.reflect.macros._ - -import Def.Initialize -import sbt.internal.util.appmacro.ContextUtil -import sbt.internal.util.complete.Parser /** Implementation detail. The wrap methods temporarily hold inputs (as a Tree, at compile time) until a task or setting macro processes it. */ object InputWrapper: diff --git a/main-settings/src/main/scala/sbt/std/KeyMacro.scala b/main-settings/src/main/scala/sbt/std/KeyMacro.scala index 7ee065b76..2d93c047e 100644 --- a/main-settings/src/main/scala/sbt/std/KeyMacro.scala +++ b/main-settings/src/main/scala/sbt/std/KeyMacro.scala @@ -9,7 +9,6 @@ package sbt package std import java.io.File -import scala.annotation.tailrec import scala.quoted.* import scala.reflect.ClassTag diff --git a/main-settings/src/main/scala/sbt/std/TaskMacro.scala b/main-settings/src/main/scala/sbt/std/TaskMacro.scala index b5831067c..a5fcaf8d5 100644 --- a/main-settings/src/main/scala/sbt/std/TaskMacro.scala +++ b/main-settings/src/main/scala/sbt/std/TaskMacro.scala @@ -9,12 +9,9 @@ package sbt package std import Def.{ Initialize, Setting } -import sbt.util.{ ActionCacheStore, Applicative, Monad } import sbt.internal.util.Types.Id import sbt.internal.util.appmacro.{ Cont, - ContextUtil, - Convert, // Instance, // LinterDSL, // MixedBuilder, @@ -24,10 +21,8 @@ import sbt.internal.util.appmacro.{ import sbt.internal.util.{ LinePosition, NoPosition, SourcePosition } import language.experimental.macros -import scala.annotation.tailrec -import scala.reflect.internal.util.UndefinedPosition import scala.quoted.* -import sjsonnew.{ BasicJsonProtocol, JsonFormat } +import sjsonnew.JsonFormat object TaskMacro: final val AssignInitName = "set" @@ -104,7 +99,6 @@ object TaskMacro: def settingAssignMacroImpl[A1: Type](rec: Expr[Scoped.DefinableSetting[A1]], v: Expr[A1])(using qctx: Quotes ): Expr[Setting[A1]] = - import qctx.reflect.* val init = SettingMacro.settingMacroImpl[A1](v) '{ $rec.set0($init, $sourcePosition) diff --git a/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala b/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala index e2c59d806..ca2acc369 100644 --- a/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala +++ b/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala @@ -9,7 +9,6 @@ package sbt.test import sbt._ import sbt.Def.Initialize -import sbt.internal.util.Types.Id object TupleSyntaxTest: def t1[A](a: SettingKey[A], b: TaskKey[A], c: Def.Initialize[A], d: Def.Initialize[Task[A]]) = { diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index b803cf42b..4594b2c62 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -29,7 +29,7 @@ import sbt.Project.{ // richTaskSessionVar, // sbtRichTaskPromise } -import sbt.ProjectExtra.{ *, given } +import sbt.ProjectExtra.* import sbt.Scope.{ GlobalScope, ThisScope, fillTaskAxis } import sbt.State.StateOpsImpl import sbt.coursierint._ @@ -88,7 +88,6 @@ import sbt.util.CacheImplicits.given import sbt.util.InterfaceUtil.{ t2, toJavaFunction => f1 } import sbt.util._ import sjsonnew._ -import sjsonnew.support.scalajson.unsafe.Converter import xsbti.compile.TastyFiles import xsbti.{ FileConverter, Position } @@ -1068,15 +1067,15 @@ object Defaults extends BuildCommon { private def watchTransitiveSourcesTaskImpl( key: TaskKey[Seq[Source]] ): Initialize[Task[Seq[Source]]] = { - import ScopeFilter.Make.{ inDependencies => inDeps, _ } - val selectDeps = ScopeFilter(inAggregates(ThisProject) || inDeps(ThisProject)) + import ScopeFilter.Make.* + val selectDeps = ScopeFilter(inAggregates(ThisProject) || inDependencies(ThisProject)) val allWatched = (key ?? Nil).all(selectDeps) Def.task { allWatched.value.flatten } } def transitiveUpdateTask: Initialize[Task[Seq[UpdateReport]]] = { - import ScopeFilter.Make.{ inDependencies => inDeps, _ } - val selectDeps = ScopeFilter(inDeps(ThisProject, includeRoot = false)) + import ScopeFilter.Make.* + val selectDeps = ScopeFilter(inDependencies(ThisProject, includeRoot = false)) val allUpdates = update.?.all(selectDeps) // If I am a "build" (a project inside project/) then I have a globalPluginUpdate. Def.task { allUpdates.value.flatten ++ globalPluginUpdate.?.value } @@ -1440,10 +1439,10 @@ object Defaults extends BuildCommon { stamps.getOrElse( c, { val x = { - import analysis.{ apis, relations => rel } - rel.internalClassDeps(c).map(intlStamp(_, analysis, s + c)) ++ - rel.externalDeps(c).map(stamp) ++ - rel.productClassName.reverse(c).flatMap { pc => + import analysis.{ apis, relations } + relations.internalClassDeps(c).map(intlStamp(_, analysis, s + c)) ++ + relations.externalDeps(c).map(stamp) ++ + relations.productClassName.reverse(c).flatMap { pc => apis.internal.get(pc).map(_.compilationTimestamp) } + Long.MinValue }.max @@ -3046,7 +3045,6 @@ object Classpaths { case (a, true) => a }) - @nowarn def forallIn[T]( key: Scoped.ScopingSetting[SettingKey[T]], // should be just SettingKey[T] (mea culpa) pkgTasks: Seq[TaskKey[_]], @@ -4217,7 +4215,6 @@ object Classpaths { depMap(bd.classpathTransitiveRefs(thisProj), data, s.log) } - @nowarn private[sbt] def depMap( projects: Seq[ProjectRef], data: Settings[Scope], diff --git a/main/src/main/scala/sbt/EvaluateTask.scala b/main/src/main/scala/sbt/EvaluateTask.scala index 50a4dcdbc..8c8f42a66 100644 --- a/main/src/main/scala/sbt/EvaluateTask.scala +++ b/main/src/main/scala/sbt/EvaluateTask.scala @@ -475,7 +475,7 @@ object EvaluateTask { triggers: Triggers, config: EvaluateTaskConfig )(using taskToNode: NodeView): (State, Result[T]) = { - import ConcurrentRestrictions.{ cancellableCompletionService, tagged, tagsKey } + import ConcurrentRestrictions.{ cancellableCompletionService, tagged } val log = state.log log.debug( diff --git a/main/src/main/scala/sbt/Extracted.scala b/main/src/main/scala/sbt/Extracted.scala index ac7dfe4f4..94ed0d042 100644 --- a/main/src/main/scala/sbt/Extracted.scala +++ b/main/src/main/scala/sbt/Extracted.scala @@ -112,7 +112,6 @@ final case class Extracted( show = Aggregation.defaultShow(state, false), ) - @nowarn private[this] def resolve[K <: Scoped.ScopingSetting[K] with Scoped](key: K): K = key in Scope.resolveScope(GlobalScope, currentRef.build, rootProject)(key.scope) @@ -149,7 +148,6 @@ final case class Extracted( state: State, sessionSettings: Seq[Setting[_]], ): State = { - import sbt.ProjectExtra.extract val appendSettings = Load.transformSettings(Load.projectScope(currentRef), currentRef.build, rootProject, settings) val newStructure = Load.reapply(sessionSettings ++ appendSettings, structure) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index fafc31177..e137ec027 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -823,9 +823,9 @@ object BuiltinCommands { def showProjects(s: State): Unit = { val extracted = Project extract s import extracted._ - import currentRef.{ build => curi, project => cid } - listBuild(curi, structure.units(curi), true, cid, s.log) - for ((uri, build) <- structure.units if curi != uri) listBuild(uri, build, false, cid, s.log) + listBuild(currentRef.build, structure.units(currentRef.build), true, currentRef.project, s.log) + for ((uri, build) <- structure.units if currentRef.build != uri) + listBuild(uri, build, false, currentRef.project, s.log) } def transformExtraBuilds(s: State, f: List[URI] => List[URI]): State = { diff --git a/main/src/main/scala/sbt/PluginCross.scala b/main/src/main/scala/sbt/PluginCross.scala index fa560cd00..82b65f7b0 100644 --- a/main/src/main/scala/sbt/PluginCross.scala +++ b/main/src/main/scala/sbt/PluginCross.scala @@ -18,14 +18,12 @@ import sbt.internal.CommandStrings._ import Cross.{ spacedFirst, requireSession } import sbt.librarymanagement.VersionNumber import Project.inScope -import ProjectExtra.{ extract, getProject, setProject } -import scala.annotation.nowarn +import ProjectExtra.{ extract, setProject } /** * Module responsible for plugin cross building. */ private[sbt] object PluginCross { - @nowarn lazy val pluginSwitch: Command = { def switchParser(state: State): Parser[(String, String)] = { lazy val switchArgs = token(NotSpace.examples()) ~ (token( diff --git a/main/src/main/scala/sbt/ProjectExtra.scala b/main/src/main/scala/sbt/ProjectExtra.scala index 202629c57..f1f7e0f04 100755 --- a/main/src/main/scala/sbt/ProjectExtra.scala +++ b/main/src/main/scala/sbt/ProjectExtra.scala @@ -10,7 +10,6 @@ package sbt import java.io.File import java.nio.file.{ Path => NioPath } import java.net.URI -import java.util.Locale // import Project._ import Keys.{ stateBuildStructure, @@ -46,12 +45,10 @@ import sbt.internal.{ LoadedBuild, LoadedBuildUnit, SettingGraph, - SettingCompletions, SessionSettings } -import sbt.internal.util.{ AttributeKey, AttributeMap, Dag, Relation, Settings } +import sbt.internal.util.{ AttributeKey, AttributeMap, Relation, Settings } import sbt.internal.util.Types.const -import sbt.internal.util.complete.DefaultParsers import sbt.internal.server.ServerHandler import sbt.librarymanagement.Configuration import sbt.util.{ ActionCacheStore, Show, Level } diff --git a/main/src/main/scala/sbt/RemoteCache.scala b/main/src/main/scala/sbt/RemoteCache.scala index 32d40e46e..fcd162011 100644 --- a/main/src/main/scala/sbt/RemoteCache.scala +++ b/main/src/main/scala/sbt/RemoteCache.scala @@ -9,7 +9,7 @@ package sbt package internal import java.io.File -import java.nio.file.{ Files, Path } +import java.nio.file.Path import org.apache.ivy.core.module.descriptor.{ DefaultArtifact, Artifact => IArtifact } import org.apache.ivy.core.report.DownloadStatus @@ -46,14 +46,12 @@ import sbt.util.{ AggregateActionCacheStore, CacheImplicits, DiskActionCacheStore, - InMemoryActionCacheStore, Logger } import sjsonnew.JsonFormat import xsbti.{ HashedVirtualFileRef, VirtualFileRef } import xsbti.compile.{ AnalysisContents, CompileAnalysis, MiniSetup, MiniOptions } -import scala.annotation.nowarn import scala.collection.mutable object RemoteCache { @@ -266,7 +264,6 @@ object RemoteCache { file } - @nowarn def configCacheSettings[A <: RemoteCacheArtifact]( cacheArtifactTask: Def.Initialize[Task[A]] ): Seq[Def.Setting[_]] = diff --git a/main/src/main/scala/sbt/ScopedKeyData.scala b/main/src/main/scala/sbt/ScopedKeyData.scala index 23badf22d..76bafd558 100644 --- a/main/src/main/scala/sbt/ScopedKeyData.scala +++ b/main/src/main/scala/sbt/ScopedKeyData.scala @@ -11,7 +11,6 @@ import Def.ScopedKey import sbt.internal.util.KeyTag final case class ScopedKeyData[A](scoped: ScopedKey[A], value: Any) { - import sbt.internal.util.Types.const val key = scoped.key val scope = scoped.scope def typeName: String = key.tag.toString diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index 5310076a5..565919dbb 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -22,7 +22,6 @@ import lmcoursier.definitions.{ import lmcoursier.* import lmcoursier.syntax.* import lmcoursier.credentials.Credentials -import lmcoursier.syntax.* import Keys._ import sbt.internal.util.Util import sbt.librarymanagement._ @@ -34,7 +33,6 @@ import sbt.librarymanagement.ivy.{ import sbt.util.Logger import sbt.io.syntax._ import xsbti.AppConfiguration -import sbt.SlashSyntax0._ object LMCoursier { private[this] val credentialRegistry: ConcurrentHashMap[(String, String), IvyCredentials] = diff --git a/main/src/main/scala/sbt/internal/APIMappings.scala b/main/src/main/scala/sbt/internal/APIMappings.scala index f33b9c7ff..4a810cf05 100644 --- a/main/src/main/scala/sbt/internal/APIMappings.scala +++ b/main/src/main/scala/sbt/internal/APIMappings.scala @@ -8,7 +8,6 @@ package sbt package internal -import java.io.File import java.net.{ MalformedURLException, URI, URL } import sbt.internal.librarymanagement.mavenint.SbtPomExtraProperties diff --git a/main/src/main/scala/sbt/internal/AddSettings.scala b/main/src/main/scala/sbt/internal/AddSettings.scala index b64561362..68bbaaf23 100644 --- a/main/src/main/scala/sbt/internal/AddSettings.scala +++ b/main/src/main/scala/sbt/internal/AddSettings.scala @@ -9,7 +9,6 @@ package sbt package internal import sbt.internal.util.Types.const -import java.io.File import xsbti.VirtualFile /** diff --git a/main/src/main/scala/sbt/internal/Aggregation.scala b/main/src/main/scala/sbt/internal/Aggregation.scala index 7bc756699..f8a25ea3e 100644 --- a/main/src/main/scala/sbt/internal/Aggregation.scala +++ b/main/src/main/scala/sbt/internal/Aggregation.scala @@ -12,14 +12,12 @@ import java.text.DateFormat import sbt.Def.ScopedKey import sbt.Keys.{ showSuccess, showTiming, timingFormat } -import sbt.SlashSyntax0._ import sbt.ProjectExtra.* import sbt.internal.util.complete.Parser import sbt.internal.util.complete.Parser.{ failure, seq, success } import sbt.internal.util._ import sbt.std.Transform.DummyTaskMap import sbt.util.{ Logger, Show } -import scala.annotation.nowarn sealed trait Aggregation object Aggregation { @@ -297,7 +295,6 @@ object Aggregation { ScopedKey(resolved, key.key) } - @nowarn def aggregationEnabled(key: ScopedKey[_], data: Settings[Scope]): Boolean = Keys.aggregate in Scope.fillTaskAxis(key.scope, key.key) get data getOrElse true private[sbt] val suppressShow = diff --git a/main/src/main/scala/sbt/internal/BuildDef.scala b/main/src/main/scala/sbt/internal/BuildDef.scala index 3a5b1f886..785db3e30 100644 --- a/main/src/main/scala/sbt/internal/BuildDef.scala +++ b/main/src/main/scala/sbt/internal/BuildDef.scala @@ -15,7 +15,6 @@ import Def.Setting import sbt.io.Hash import sbt.internal.util.Attributed import sbt.internal.inc.ReflectUtilities -import xsbti.HashedVirtualFileRef trait BuildDef { def projectDefinitions(@deprecated("unused", "") baseDirectory: File): Seq[Project] = projects diff --git a/main/src/main/scala/sbt/internal/BuildStructure.scala b/main/src/main/scala/sbt/internal/BuildStructure.scala index 31c830fa7..8261af40e 100644 --- a/main/src/main/scala/sbt/internal/BuildStructure.scala +++ b/main/src/main/scala/sbt/internal/BuildStructure.scala @@ -16,13 +16,11 @@ import Def.{ ScopeLocal, ScopedKey, Setting, displayFull } import BuildPaths.outputDirectory import Scope.GlobalScope import BuildStreams.Streams -import sbt.LocalRootProject import sbt.io.syntax._ import sbt.internal.inc.MappedFileConverter import sbt.internal.util.{ AttributeEntry, AttributeKey, AttributeMap, Attributed, Settings } import sbt.internal.util.Attributed.data import sbt.util.Logger -import scala.annotation.nowarn import xsbti.FileConverter final class BuildStructure( @@ -400,7 +398,6 @@ object BuildStreams { def refTarget(ref: ResolvedReference, fallbackBase: File, data: Settings[Scope]): File = refTarget(GlobalScope.copy(project = Select(ref)), fallbackBase, data) - @nowarn def refTarget(scope: Scope, fallbackBase: File, data: Settings[Scope]): File = (Keys.target in scope get data getOrElse outputDirectory(fallbackBase)) / StreamsDirectory } diff --git a/main/src/main/scala/sbt/internal/Clean.scala b/main/src/main/scala/sbt/internal/Clean.scala index 90b05903b..15febbddb 100644 --- a/main/src/main/scala/sbt/internal/Clean.scala +++ b/main/src/main/scala/sbt/internal/Clean.scala @@ -14,7 +14,7 @@ import java.nio.file.{ DirectoryNotEmptyException, Files, Path } import sbt.Def._ import sbt.Keys._ // import sbt.Project.richInitializeTask -import sbt.ProjectExtra.{ *, given } +import sbt.ProjectExtra.* import sbt.SlashSyntax0._ import sbt.io.syntax._ import sbt.nio.Keys._ diff --git a/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala b/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala index 6ca0ba138..fac38c369 100644 --- a/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala +++ b/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala @@ -11,7 +11,6 @@ package internal import java.nio.file.Path import java.util.concurrent.atomic.AtomicReference -import sbt.{ ProjectRef, State, Watched } import sbt.internal.io.{ EventMonitor, Source, WatchState => WS } import sbt.internal.util.AttributeKey import sbt.nio.file.Glob @@ -63,11 +62,10 @@ private[internal] trait DeprecatedContinuous { } } -@nowarn private[sbt] object DeprecatedContinuous { private[sbt] val taskDefinitions: Seq[Def.Setting[_]] = Seq( - sbt.Keys.watchTransitiveSources := sbt.Defaults.watchTransitiveSourcesTask.value, + /* sbt.Keys.watchTransitiveSources := sbt.Defaults.watchTransitiveSourcesTask.value, sbt.Keys.watch := sbt.Defaults.watchSetting.value, - sbt.nio.Keys.watchTasks := Continuous.continuousTask.evaluated, + sbt.nio.Keys.watchTasks := Continuous.continuousTask.evaluated, */ ) } diff --git a/main/src/main/scala/sbt/internal/FileChangesMacro.scala b/main/src/main/scala/sbt/internal/FileChangesMacro.scala index 091d2329e..862e3bd47 100644 --- a/main/src/main/scala/sbt/internal/FileChangesMacro.scala +++ b/main/src/main/scala/sbt/internal/FileChangesMacro.scala @@ -77,7 +77,6 @@ object FileChangesMacro: changeKey: Expr[TaskKey[Seq[(NioPath, FileStamp)] => FileChanges]], mapKey: Expr[TaskKey[Seq[(NioPath, FileStamp)]]], )(using qctx: Quotes): Expr[FileChanges] = - import qctx.reflect.* val taskScope = getTaskScope[A](in) '{ val ts: Scope = $taskScope diff --git a/main/src/main/scala/sbt/internal/KeyIndex.scala b/main/src/main/scala/sbt/internal/KeyIndex.scala index 3413dc7f5..f6f20d119 100644 --- a/main/src/main/scala/sbt/internal/KeyIndex.scala +++ b/main/src/main/scala/sbt/internal/KeyIndex.scala @@ -14,12 +14,10 @@ import sbt.internal.util.complete.DefaultParsers.validID import sbt.internal.util.Types.some import sbt.internal.util.{ AttributeKey, Relation } import sbt.librarymanagement.Configuration -import scala.annotation.nowarn object KeyIndex { def empty: ExtendableKeyIndex = new KeyIndex0(emptyBuildIndex) - @nowarn def apply( known: Iterable[ScopedKey[_]], projects: Map[URI, Set[String]], @@ -29,7 +27,6 @@ object KeyIndex { known.par.foldLeft(base(projects, configurations)) { _ add _ } } - @nowarn def aggregate( known: Iterable[ScopedKey[_]], extra: BuildUtil[_], diff --git a/main/src/main/scala/sbt/internal/LibraryManagement.scala b/main/src/main/scala/sbt/internal/LibraryManagement.scala index 2bc00af57..7b5ac0539 100644 --- a/main/src/main/scala/sbt/internal/LibraryManagement.scala +++ b/main/src/main/scala/sbt/internal/LibraryManagement.scala @@ -188,17 +188,17 @@ private[sbt] object LibraryManagement { uwconfig: UnresolvedWarningConfiguration, log: Logger ): Either[UnresolvedWarning, UpdateReport] = { - import config.{ updateConfiguration => c, module => mod } - import mod.{ id, dependencies => deps, scalaModuleInfo } + import config.{ updateConfiguration, module } + import module.{ id, dependencies, scalaModuleInfo } val base = restrictedCopy(id, true).withName(id.name + "$" + label) - val module = lm.moduleDescriptor(base, deps, scalaModuleInfo) - val report = lm.update(module, c, uwconfig, log) match { + val mod = lm.moduleDescriptor(base, dependencies, scalaModuleInfo) + val report = lm.update(mod, updateConfiguration, uwconfig, log) match { case Right(r) => r case Left(w) => throw w.resolveException } val newConfig = config - .withModule(mod.withDependencies(report.allModules)) + .withModule(module.withDependencies(report.allModules)) lm.updateClassifiers(newConfig, uwconfig, Vector(), log) } diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 14ae20fc6..dbb7ca910 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -12,14 +12,12 @@ import sbt.BuildPaths._ import sbt.Def.{ ScopeLocal, ScopedKey, Setting, isDummy } import sbt.Keys._ import sbt.Project.inScope -import sbt.ProjectExtra.{ checkTargets, prefixConfigs, setProject, showLoadingKey, structure } +import sbt.ProjectExtra.{ prefixConfigs, setProject, showLoadingKey, structure } import sbt.Scope.GlobalScope import sbt.SlashSyntax0._ -import sbt.internal.{ Eval, EvalReporter } import sbt.internal.BuildStreams._ import sbt.internal.inc.classpath.ClasspathUtil import sbt.internal.inc.{ MappedFileConverter, ScalaInstance, ZincLmUtil, ZincUtil } -import sbt.internal.server.BuildServerEvalReporter import sbt.internal.util.Attributed.data import sbt.internal.util.Types.const import sbt.internal.util.{ Attributed, Settings } diff --git a/main/src/main/scala/sbt/internal/LogManager.scala b/main/src/main/scala/sbt/internal/LogManager.scala index 7332e55bc..f414644f5 100644 --- a/main/src/main/scala/sbt/internal/LogManager.scala +++ b/main/src/main/scala/sbt/internal/LogManager.scala @@ -18,7 +18,6 @@ import sbt.internal.util.{ Terminal => ITerminal, _ } import sbt.util.{ Level, Logger, LoggerContext } import java.io.PrintWriter -import scala.annotation.nowarn sealed abstract class LogManager { def apply( @@ -61,7 +60,6 @@ object LogManager { // This is called by mkStreams // - @nowarn def construct( data: Settings[Scope], state: State diff --git a/main/src/main/scala/sbt/internal/PluginDiscovery.scala b/main/src/main/scala/sbt/internal/PluginDiscovery.scala index 3516351ea..79f3aba11 100644 --- a/main/src/main/scala/sbt/internal/PluginDiscovery.scala +++ b/main/src/main/scala/sbt/internal/PluginDiscovery.scala @@ -8,10 +8,8 @@ package sbt package internal -import sbt.internal.util.Attributed import java.io.File import java.net.URL -import Attributed.data import sbt.internal.BuildDef.analyzed import xsbti.FileConverter import xsbt.api.{ Discovered, Discovery } diff --git a/main/src/main/scala/sbt/internal/PluginsDebug.scala b/main/src/main/scala/sbt/internal/PluginsDebug.scala index 27f342163..917a8372a 100644 --- a/main/src/main/scala/sbt/internal/PluginsDebug.scala +++ b/main/src/main/scala/sbt/internal/PluginsDebug.scala @@ -13,7 +13,6 @@ import sbt.util.Logger import sbt.ProjectExtra.* import Def.Setting -import sbt.SlashSyntax0._ import Plugins._ import PluginsDebug._ import java.net.URI diff --git a/main/src/main/scala/sbt/internal/ProjectNavigation.scala b/main/src/main/scala/sbt/internal/ProjectNavigation.scala index 04e7cf324..069c91a59 100644 --- a/main/src/main/scala/sbt/internal/ProjectNavigation.scala +++ b/main/src/main/scala/sbt/internal/ProjectNavigation.scala @@ -10,7 +10,6 @@ package internal import java.net.URI import sbt.internal.util.complete, complete.{ DefaultParsers, Parser }, DefaultParsers._ -import sbt.internal.Eval import Keys.sessionSettings import sbt.ProjectExtra.{ extract, updateCurrent } diff --git a/main/src/main/scala/sbt/internal/SessionSettings.scala b/main/src/main/scala/sbt/internal/SessionSettings.scala index 6ead62a78..2928c1328 100755 --- a/main/src/main/scala/sbt/internal/SessionSettings.scala +++ b/main/src/main/scala/sbt/internal/SessionSettings.scala @@ -8,11 +8,10 @@ package sbt package internal -import sbt.internal.util.{ complete, LineRange, RangePosition, Types } +import sbt.internal.util.{ complete, LineRange, RangePosition } import java.io.File import java.net.URI -import sbt.ProjectExtra.extract import Def.{ ScopedKey, Setting } import SessionSettings._ import sbt.ProjectExtra.{ extract, getProject, session, structure } diff --git a/main/src/main/scala/sbt/internal/SettingCompletions.scala b/main/src/main/scala/sbt/internal/SettingCompletions.scala index c19069796..2c1959c31 100644 --- a/main/src/main/scala/sbt/internal/SettingCompletions.scala +++ b/main/src/main/scala/sbt/internal/SettingCompletions.scala @@ -8,18 +8,15 @@ package sbt package internal -import sbt.internal.util.{ AttributeKey, complete, KeyTag, Relation, Settings, Types, Util } +import sbt.internal.util.{ AttributeKey, complete, Relation, Settings, Util } import sbt.util.Show import sbt.librarymanagement.Configuration import ProjectExtra.{ relation } import Def.{ ScopedKey, Setting } import Scope.Global -import Types.idFun import complete._ import DefaultParsers._ -import scala.annotation.nowarn -import scala.reflect.ClassTag /** * The resulting `session` and verbose and quiet summaries of the result of a set operation. @@ -56,7 +53,6 @@ private[sbt] object SettingCompletions { def resolve(s: Setting[_]): Seq[Setting[_]] = Load.transformSettings(projectScope, currentRef.build, rootProject, s :: Nil) - @nowarn def rescope[T](setting: Setting[T]): Seq[Setting[_]] = { val akey = setting.key.key val global = ScopedKey(Global, akey) diff --git a/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala b/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala index ccb7c0230..13374bb23 100644 --- a/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala +++ b/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala @@ -55,7 +55,6 @@ private[sbt] object WatchTransitiveDependencies { def data: Map[Scope, AttributeMap] = extracted.structure.data.data } - @nowarn private def argumentsImpl( scopedKey: ScopedKey[_], extracted: Extracted, @@ -138,7 +137,6 @@ private[sbt] object WatchTransitiveDependencies { (inputGlobs ++ triggerGlobs ++ legacy(keys :+ scopedKey, args)).distinct.sorted } - @nowarn private def legacy(keys: Seq[ScopedKey[_]], args: Arguments): Seq[DynamicInput] = { import args._ val projectScopes = diff --git a/main/src/main/scala/sbt/internal/graph/rendering/TreeView.scala b/main/src/main/scala/sbt/internal/graph/rendering/TreeView.scala index 3ff701ca1..cec138ad4 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/TreeView.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/TreeView.scala @@ -16,9 +16,9 @@ import sjsonnew.support.scalajson.unsafe.{ CompactPrinter, Converter } import java.io.{ File, FileOutputStream, InputStream, OutputStream } import java.net.URI -import scala.annotation.{ nowarn, tailrec } +import scala.annotation.tailrec -@nowarn object TreeView { +object TreeView { def createJson(graph: ModuleGraph): String = { val moduleModels = graph.roots .map(module => processSubtree(graph, module)) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala index dd653cc05..7cd55737e 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala @@ -10,21 +10,20 @@ package sbt.internal.server import dotty.tools.dotc.core.Contexts.Context import dotty.tools.dotc.reporting.{ Diagnostic => ScalaDiagnostic } import dotty.tools.dotc.reporting.Reporter -import sbt.StandardMain.exchange +// import sbt.StandardMain.exchange import sbt.internal.ForwardingReporter import sbt.internal.bsp import sbt.internal.bsp.{ BuildTargetIdentifier, Diagnostic, - DiagnosticSeverity, - PublishDiagnosticsParams, - Range, - TextDocumentIdentifier + // DiagnosticSeverity, + // PublishDiagnosticsParams, + // Range, + // TextDocumentIdentifier } -import java.nio.file.{ Files, Path, Paths } +import java.nio.file.Path import scala.collection.mutable -import sbt.internal.bsp.codec.JsonProtocol._ class BuildServerEvalReporter(buildTarget: BuildTargetIdentifier, delegate: Reporter) extends ForwardingReporter(delegate): diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 7459f6072..a6645e7b3 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -13,7 +13,6 @@ import java.net.URI import sbt.BuildPaths.{ configurationSources, projectStandard } import sbt.BuildSyntax._ import sbt.Def._ -import sbt.Def.{ parsed } import sbt.Keys._ import sbt.Project._ import sbt.ProjectExtra.* @@ -41,7 +40,7 @@ import scala.collection.mutable // import scala.annotation.nowarn import scala.util.control.NonFatal -import scala.util.{ Failure, Success, Try } +import scala.util.{ Failure, Success } import scala.annotation.nowarn import sbt.testing.Framework diff --git a/main/src/main/scala/sbt/internal/server/Definition.scala b/main/src/main/scala/sbt/internal/server/Definition.scala index 17df7a824..6514027fa 100644 --- a/main/src/main/scala/sbt/internal/server/Definition.scala +++ b/main/src/main/scala/sbt/internal/server/Definition.scala @@ -12,7 +12,7 @@ package server import java.net.URI import java.nio.file._ -import scala.annotation.{ nowarn, tailrec } +import scala.annotation.tailrec import scala.jdk.CollectionConverters.* import scala.concurrent.{ ExecutionContext, Future } import scala.reflect.NameTransformer @@ -27,7 +27,6 @@ import sbt.internal.inc.JavaInterfaceUtil._ import sbt.internal.parser.SbtParser import sbt.internal.protocol.JsonRpcResponseError import sbt.internal.protocol.codec.JsonRPCProtocol -import sbt.internal.langserver import sbt.internal.langserver.{ ErrorCodes, Location, Position, Range, TextDocumentPositionParams } import sbt.util.Logger import sbt.Keys._ @@ -239,7 +238,6 @@ private[sbt] object Definition { result.future } - @nowarn def lspDefinition( jsonDefinition: JValue, requestId: String, diff --git a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala index 5a3a3d5f6..942ef4de5 100644 --- a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala +++ b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala @@ -36,7 +36,7 @@ import sbt.internal.util.Terminal.TerminalImpl import sbt.internal.util.complete.{ Parser, Parsers } import sbt.util.Logger -import scala.annotation.{ nowarn, tailrec } +import scala.annotation.tailrec import scala.collection.mutable import scala.concurrent.duration._ import scala.util.Try @@ -422,7 +422,6 @@ final class NetworkChannel( } } - @nowarn protected def onCompletionRequest(execId: Option[String], cp: CompletionParams) = { if (initialized) { try { diff --git a/main/src/main/scala/sbt/internal/server/SettingQuery.scala b/main/src/main/scala/sbt/internal/server/SettingQuery.scala index 3ef75eae4..1d6005e99 100644 --- a/main/src/main/scala/sbt/internal/server/SettingQuery.scala +++ b/main/src/main/scala/sbt/internal/server/SettingQuery.scala @@ -13,7 +13,6 @@ import java.net.URI import sjsonnew.shaded.scalajson.ast.unsafe.JValue import scala.util.{ Left, Right } import sbt.util.{ SomeJsonWriter, NoJsonWriter } -import sbt.librarymanagement.LibraryManagementCodec._ import sbt.protocol._ import sjsonnew._ import sjsonnew.support.scalajson.unsafe._ diff --git a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala index a1a96acd5..177373a1e 100644 --- a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala +++ b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala @@ -44,7 +44,6 @@ import sbt.protocol.{ TerminalSetRawModeCommand, } import sbt.protocol.codec.JsonProtocol._ -import sbt.protocol.TerminalGetSizeResponse object VirtualTerminal { private[this] val pendingTerminalProperties = diff --git a/main/src/main/scala/sbt/nio/FileStamp.scala b/main/src/main/scala/sbt/nio/FileStamp.scala index bda77bf60..36d78d9c2 100644 --- a/main/src/main/scala/sbt/nio/FileStamp.scala +++ b/main/src/main/scala/sbt/nio/FileStamp.scala @@ -16,7 +16,6 @@ import sbt.io.IO import sbt.nio.file.FileAttributes import sjsonnew.{ Builder, JsonFormat, Unbuilder, deserializationError } import xsbti.compile.analysis.{ Stamp => XStamp } -import org.checkerframework.checker.units.qual.A /** * A trait that indicates what file stamping implementation should be used to track the state of diff --git a/main/src/main/scala/sbt/nio/Settings.scala b/main/src/main/scala/sbt/nio/Settings.scala index 26816d8d7..c39a4b909 100644 --- a/main/src/main/scala/sbt/nio/Settings.scala +++ b/main/src/main/scala/sbt/nio/Settings.scala @@ -107,7 +107,6 @@ private[sbt] object Settings { } } - @nowarn private[sbt] val inject: Def.ScopedKey[_] => Seq[Def.Setting[_]] = scopedKey => scopedKey.key match { case transitiveDynamicInputs.key => @@ -142,7 +141,6 @@ private[sbt] object Settings { * @return a task definition that retrieves the file input files and their attributes scoped * to a particular task. */ - @nowarn private[sbt] def inputPathSettings(setting: Def.Setting[_]): Seq[Def.Setting[_]] = { val scopedKey = setting.key val scope = scopedKey.scope @@ -172,7 +170,6 @@ private[sbt] object Settings { * @param scope the key whose file inputs we are seeking * @return a task definition that retrieves all of the input paths scoped to the input key. */ - @nowarn private[this] def allFilesImpl(scope: Scope): Def.Setting[_] = { addTaskDefinition(Keys.allInputFiles in scope := { val filter = @@ -192,7 +189,6 @@ private[sbt] object Settings { * @param scope the scope corresponding to the task whose fileInputs we are seeking * @return a task definition that retrieves the changed input files scoped to the key. */ - @nowarn private[this] def changedInputFilesImpl(scope: Scope): List[Def.Setting[_]] = changedFilesImpl(scope, changedInputFiles, inputFileStamps) :: (watchForceTriggerOnAnyChange in scope := { @@ -202,7 +198,6 @@ private[sbt] object Settings { } }) :: Nil - @nowarn private[this] def changedFilesImpl( scope: Scope, changeKey: TaskKey[Seq[(Path, FileStamp)] => FileChanges], @@ -249,7 +244,6 @@ private[sbt] object Settings { * @param scope the scope to add the custom clean * @return a task specific clean implementation */ - @nowarn private[sbt] def cleanImpl(scope: Scope): Def.Setting[_] = addTaskDefinition { sbt.Keys.clean in scope := Clean.task(scope, full = false).value } @@ -286,7 +280,6 @@ private[sbt] object Settings { * @return a task definition that retrieves the input files and their file stamps scoped to the * input key. */ - @nowarn private[sbt] def fileStamps(scopedKey: Def.ScopedKey[_]): Def.Setting[_] = { import sbt.internal.CompatParColls.Converters._ val scope = scopedKey.scope @@ -324,7 +317,6 @@ private[sbt] object Settings { allOutputPathsImpl(scope) :: outputFileStampsImpl(scope) :: cleanImpl(taskKey) :: changes } - @nowarn private[this] def allOutputPathsImpl(scope: Scope): Def.Setting[_] = addTaskDefinition(allOutputFiles in scope := { val filter = @@ -351,7 +343,6 @@ private[sbt] object Settings { } }) - @nowarn private[this] def outputFileStampsImpl(scope: Scope): Def.Setting[_] = addTaskDefinition(outputFileStamps in scope := { val stamper: Path => Option[FileStamp] = (outputFileStamper in scope).value match { diff --git a/main/src/main/scala/sbt/nio/Watch.scala b/main/src/main/scala/sbt/nio/Watch.scala index ea27c7ec7..88799d656 100644 --- a/main/src/main/scala/sbt/nio/Watch.scala +++ b/main/src/main/scala/sbt/nio/Watch.scala @@ -14,7 +14,6 @@ import java.util.Locale import java.util.concurrent.TimeUnit import sbt.BasicCommandStrings.{ ContinuousExecutePrefix, TerminateAction } -import sbt.SlashSyntax0._ import sbt._ import sbt.internal.LabeledFunctions._ import sbt.internal.nio.FileEvent diff --git a/project/HouseRulesPlugin.scala b/project/HouseRulesPlugin.scala index 5d2da8d9b..9657a6e5b 100644 --- a/project/HouseRulesPlugin.scala +++ b/project/HouseRulesPlugin.scala @@ -30,6 +30,13 @@ object HouseRulesPlugin extends AutoPlugin { scalacOptions ++= "-Ywarn-numeric-widen".ifScala2.value.toList, scalacOptions ++= "-Ywarn-value-discard".ifScala2.value.toList, scalacOptions ++= "-Ywarn-unused-import".ifScala2x(v => 11 <= v && v <= 12).value.toList, + scalacOptions ++= { + scalaPartV.value match { + case Some((3, _)) => Seq("-Wunused:imports,implicits,nowarn") + case Some((2, _)) => Seq("-Ywarn-unused:-privates,-locals,-explicits") + case _ => Seq.empty + } + }, scalacOptions ++= "-Xsource:3".ifScala2.value.toList ) ++ Seq(Compile, Test).flatMap(c => (c / console / scalacOptions) --= Seq("-Ywarn-unused-import", "-Xlint") diff --git a/sbt-app/src/main/scala/package.scala b/sbt-app/src/main/scala/package.scala index a48fd7b4d..3dd09f06c 100644 --- a/sbt-app/src/main/scala/package.scala +++ b/sbt-app/src/main/scala/package.scala @@ -9,7 +9,6 @@ import sbt.nio.FileStamp import sjsonnew.JsonFormat import java.nio.file.{ Path => NioPath } -import sbt.internal.FileChangesMacro import sbt.librarymanagement.{ Configuration, ConfigurationMacro } import scala.language.experimental.macros diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala index 4c6bfd253..b7c9b0611 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -20,7 +20,7 @@ import RemoteSbtCreatorProp._ import scala.annotation.nowarn import scala.collection.parallel.ForkJoinTaskSupport -import scala.collection.{ GenSeq, mutable } +import scala.collection.mutable import scala.util.control.NonFatal final class ScriptedTests( diff --git a/tasks-standard/src/main/scala/sbt/std/Transform.scala b/tasks-standard/src/main/scala/sbt/std/Transform.scala index 8161c8015..794b7610e 100644 --- a/tasks-standard/src/main/scala/sbt/std/Transform.scala +++ b/tasks-standard/src/main/scala/sbt/std/Transform.scala @@ -9,7 +9,7 @@ package sbt package std import sbt.internal.Action -import sbt.internal.util.{ DelegatingPMap, RMap } +import sbt.internal.util.DelegatingPMap import sbt.internal.util.TupleMapExtension.* import TaskExtra.{ all, existToAny } import sbt.internal.util.Types.* diff --git a/tasks-standard/src/test/scala/TaskSerial.scala b/tasks-standard/src/test/scala/TaskSerial.scala index 7e6208b09..951a94118 100644 --- a/tasks-standard/src/test/scala/TaskSerial.scala +++ b/tasks-standard/src/test/scala/TaskSerial.scala @@ -16,7 +16,7 @@ import TaskGen.MaxWorkers import org.scalacheck._ import Prop.forAll import Transform.taskToNode -import ConcurrentRestrictions.{ completionService, limitTotal, tagged } +import ConcurrentRestrictions.{ completionService, limitTotal } import java.util.concurrent.{ CountDownLatch, TimeUnit } diff --git a/tasks/src/main/scala/sbt/Incomplete.scala b/tasks/src/main/scala/sbt/Incomplete.scala index 95deb8c40..db35fac2b 100644 --- a/tasks/src/main/scala/sbt/Incomplete.scala +++ b/tasks/src/main/scala/sbt/Incomplete.scala @@ -10,7 +10,7 @@ package sbt import scala.collection.mutable.ListBuffer import sbt.internal.util.IDSet -import Incomplete.{ Error, Value => IValue } +import Incomplete.{ Value => IValue } import scala.jdk.CollectionConverters.* /** diff --git a/tasks/src/main/scala/sbt/TaskId.scala b/tasks/src/main/scala/sbt/TaskId.scala index 1ac1c9b3e..013a6baac 100644 --- a/tasks/src/main/scala/sbt/TaskId.scala +++ b/tasks/src/main/scala/sbt/TaskId.scala @@ -1,6 +1,4 @@ package sbt -import sbt.internal.util.AttributeMap - trait TaskId[A]: def tags: ConcurrentRestrictions.TagMap diff --git a/util-cache/src/main/scala/sbt/internal/util/PlainVirtualFile1.scala b/util-cache/src/main/scala/sbt/internal/util/PlainVirtualFile1.scala index ece67a279..153c4e61b 100644 --- a/util-cache/src/main/scala/sbt/internal/util/PlainVirtualFile1.scala +++ b/util-cache/src/main/scala/sbt/internal/util/PlainVirtualFile1.scala @@ -3,9 +3,9 @@ package internal package util import java.io.InputStream -import java.nio.file.{ Files, Path, Paths } +import java.nio.file.{ Files, Path } import sbt.util.{ Digest, HashUtil } -import xsbti.{ BasicVirtualFileRef, FileConverter, PathBasedFile, VirtualFileRef, VirtualFile } +import xsbti.{ BasicVirtualFileRef, PathBasedFile } class PlainVirtualFile1(path: Path, id: String) extends BasicVirtualFileRef(id) with PathBasedFile: override def contentHash: Long = HashUtil.farmHash(path) diff --git a/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala b/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala index dffc3a03c..c1bf2ef23 100644 --- a/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala +++ b/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala @@ -1,6 +1,5 @@ package sbt.util -import java.io.InputStream import java.nio.file.{ Files, Path } import sjsonnew.* import sjsonnew.support.scalajson.unsafe.{ CompactPrinter, Converter, Parser } @@ -9,11 +8,9 @@ import sjsonnew.shaded.scalajson.ast.unsafe.JValue import scala.collection.mutable import scala.reflect.ClassTag import scala.util.control.NonFatal -import sbt.internal.util.PlainVirtualFile1 import sbt.io.IO import sbt.io.syntax.* -import xsbti.{ HashedVirtualFileRef, PathBasedFile, VirtualFile, VirtualFileRef } -import sbt.nio.file.FileAttributes +import xsbti.{ HashedVirtualFileRef, PathBasedFile, VirtualFile } /** * An abstration of a remote or local cache store. diff --git a/util-cache/src/main/scala/sbt/util/HashUtil.scala b/util-cache/src/main/scala/sbt/util/HashUtil.scala index c1466c2ef..3a5f976ea 100644 --- a/util-cache/src/main/scala/sbt/util/HashUtil.scala +++ b/util-cache/src/main/scala/sbt/util/HashUtil.scala @@ -2,7 +2,6 @@ package sbt.util import java.nio.file.{ Files, Path } import net.openhft.hashing.LongHashFunction -import scala.util.Try object HashUtil: private[sbt] def farmHash(bytes: Array[Byte]): Long = diff --git a/util-cache/src/main/scala/sbt/util/PathHashWriters.scala b/util-cache/src/main/scala/sbt/util/PathHashWriters.scala index 36728c4f8..f9549db6c 100644 --- a/util-cache/src/main/scala/sbt/util/PathHashWriters.scala +++ b/util-cache/src/main/scala/sbt/util/PathHashWriters.scala @@ -2,7 +2,7 @@ package sbt.util import java.io.File import java.nio.file.Path -import sjsonnew.{ Builder, HashWriter, JsonWriter } +import sjsonnew.{ Builder, HashWriter } import StringStrings.StringString import xsbti.{ HashedVirtualFileRef, VirtualFile } diff --git a/util-cache/src/test/scala/sbt/util/ActionCacheTest.scala b/util-cache/src/test/scala/sbt/util/ActionCacheTest.scala index e2a5ca56e..98af47ab8 100644 --- a/util-cache/src/test/scala/sbt/util/ActionCacheTest.scala +++ b/util-cache/src/test/scala/sbt/util/ActionCacheTest.scala @@ -4,7 +4,6 @@ import sbt.internal.util.StringVirtualFile1 import sbt.io.IO import sbt.io.syntax.* import verify.BasicTestSuite -import java.nio.file.Paths import xsbti.VirtualFile object ActionCacheTest extends BasicTestSuite: diff --git a/util-cache/src/test/scala/sbt/util/HasherTest.scala b/util-cache/src/test/scala/sbt/util/HasherTest.scala index 15e069591..c3c84a108 100644 --- a/util-cache/src/test/scala/sbt/util/HasherTest.scala +++ b/util-cache/src/test/scala/sbt/util/HasherTest.scala @@ -1,14 +1,12 @@ package sbt.util -import java.io.File import sbt.internal.util.StringVirtualFile1 import sjsonnew.BasicJsonProtocol import sjsonnew.support.murmurhash.Hasher import verify.BasicTestSuite -import xsbti.{ BasicVirtualFileRef, HashedVirtualFileRef, VirtualFile } +import xsbti.HashedVirtualFileRef object HasherTest extends BasicTestSuite: - import BasicJsonProtocol.implicitHashWriter final val blankContentHash = -7286425919675154353L val blankContentHashStr = "farm64-9ae16a3b2f90404f" diff --git a/util-tracking/src/main/scala/sbt/util/Tracked.scala b/util-tracking/src/main/scala/sbt/util/Tracked.scala index ad83802df..850392397 100644 --- a/util-tracking/src/main/scala/sbt/util/Tracked.scala +++ b/util-tracking/src/main/scala/sbt/util/Tracked.scala @@ -11,7 +11,6 @@ import scala.util.{ Failure, Try, Success => USuccess } import java.io.File import sbt.io.IO -import sbt.io.syntax._ import sbt.internal.util.EmptyCacheError import sjsonnew.{ JsonFormat, JsonWriter } From c6176342fb67685dd86879a31822fa17a422c613 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 6 Mar 2024 13:59:33 +0100 Subject: [PATCH 08/12] Remove dep to zinc-compile --- build.sbt | 4 ++-- project/Dependencies.scala | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/build.sbt b/build.sbt index 500e7bc52..138ab9d89 100644 --- a/build.sbt +++ b/build.sbt @@ -896,7 +896,7 @@ lazy val buildFileProj = (project in file("buildfile")) addSbtLmCore, addSbtLmIvy, addSbtCompilerInterface, - addSbtZincCompile + addSbtZincCompileCore ) // The main integration project for sbt. It brings all of the projects together, configures them, and provides for overriding conventions. @@ -952,7 +952,7 @@ lazy val mainProj = (project in file("main")) addSbtLmCore, addSbtLmIvy, addSbtCompilerInterface, - addSbtZincCompile + addSbtZincCompileCore ) // Strictly for bringing implicits and aliases from subsystems into the top-level sbt namespace through a single package object diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 14b00b855..7a2c93a0c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -16,7 +16,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.8.0") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("2.0.0-alpha13") - val zincVersion = nightlyVersion.getOrElse("2.0.0-alpha10") + val zincVersion = nightlyVersion.getOrElse("2.0.0-alpha11-SNAPSHOT") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion @@ -34,7 +34,6 @@ object Dependencies { private val compilerApiInfo = "org.scala-sbt" %% "zinc-apiinfo" % zincVersion private val compilerBridge = "org.scala-sbt" %% "compiler-bridge" % zincVersion private val zinc = "org.scala-sbt" %% "zinc" % zincVersion - private val zincCompile = "org.scala-sbt" %% "zinc-compile" % zincVersion private val zincCompileCore = "org.scala-sbt" %% "zinc-compile-core" % zincVersion def getSbtModulePath(key: String) = { @@ -76,7 +75,6 @@ object Dependencies { def addSbtCompilerApiInfo = addSbtModule(sbtZincPath, "zincApiInfo", compilerApiInfo) def addSbtCompilerBridge = addSbtModule(sbtZincPath, "compilerBridge2_12", compilerBridge) def addSbtZinc = addSbtModule(sbtZincPath, "zinc", zinc) - def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) // val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.10" From 1a900ee5dcee173be09be773091333225fa2215a Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 6 Mar 2024 14:02:21 +0100 Subject: [PATCH 09/12] Publish local Zinc --- .github/workflows/ci.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 481a7b642..62cbe5f4e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -77,7 +77,7 @@ jobs: uses: actions/checkout@v3 with: repository: sbt/zinc - ref: develop + ref: wip/sbt-2.x path: zinc - name: Setup JDK uses: actions/setup-java@v3 @@ -104,6 +104,12 @@ jobs: rm -rf "$HOME/.sbt/scripted/" || true rm -rf "$HOME/.ivy2/local" || true rm -r $(find $HOME/.sbt/boot -name "*-SNAPSHOT") || true + - name: Publish local Zinc + shell: bash + run: | + ./sbt -v lowerUtils/publishLocal + cd zinc/ + sbt publishLocal - name: Build and test (1) if: ${{ matrix.jobtype == 1 }} shell: bash From 323d1da16ee5b2f8c9fc65449dd2754cabfcf653 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 6 Mar 2024 14:43:23 +0100 Subject: [PATCH 10/12] fix scripted --- .../classloader-cache/jni/src/main/scala/TestMain.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala b/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala index cd18d54cb..523c37799 100644 --- a/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala +++ b/sbt-app/src/sbt-test/classloader-cache/jni/src/main/scala/TestMain.scala @@ -1,7 +1,7 @@ package sbt import java.nio.file._ -import scala.jdk.CollectionConverters.* +import scala.collection.JavaConverters._ object TestMain { def main(args: Array[String]): Unit = { From 7ca6ad5feca30d730b0f79f1b8ad4e2a39bccb29 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 6 Mar 2024 16:40:41 +0100 Subject: [PATCH 11/12] Fix resolution of bridge using Coursier --- main/src/main/scala/sbt/Defaults.scala | 5 +++-- .../scala/sbt/coursierint/CoursierRepositoriesTasks.scala | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 4594b2c62..28a3b0a30 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -3507,7 +3507,7 @@ object Classpaths { ) ++ Seq( csrProject := CoursierInputsTasks.coursierProjectTask.value, csrConfiguration := LMCoursier.coursierConfigurationTask.value, - csrResolvers := CoursierRepositoriesTasks.coursierResolversTask.value, + csrResolvers := CoursierRepositoriesTasks.coursierResolversTask(fullResolvers).value, csrRecursiveResolvers := CoursierRepositoriesTasks.coursierRecursiveResolversTask.value, csrSbtResolvers := CoursierRepositoriesTasks.coursierSbtResolversTask.value, csrInterProjectDependencies := CoursierInputsTasks.coursierInterProjectDependenciesTask.value, @@ -3744,7 +3744,8 @@ object Classpaths { Seq( dependencyResolution := dependencyResolutionTask.value, csrConfiguration := LMCoursier.scalaCompilerBridgeConfigurationTask.value, - csrResolvers := CoursierRepositoriesTasks.coursierResolversTask.value, + csrResolvers := + CoursierRepositoriesTasks.coursierResolversTask(scalaCompilerBridgeResolvers).value, externalResolvers := scalaCompilerBridgeResolvers.value, ivyConfiguration := InlineIvyConfiguration( lock = Option(lock(appConfiguration.value)), diff --git a/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala index fbf8043da..359cc0b80 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala @@ -56,8 +56,10 @@ object CoursierRepositoriesTasks { // https://github.com/sbt/sbt/issues/4661 private final val keepPreloaded = false // coursierKeepPreloaded.value - def coursierResolversTask: Def.Initialize[sbt.Task[Seq[Resolver]]] = Def.task { - val result0 = fullResolvers.value.filterNot(_ == projectResolver.value) + def coursierResolversTask( + resolversKey: TaskKey[Seq[Resolver]] + ): Def.Initialize[sbt.Task[Seq[Resolver]]] = Def.task { + val result0 = resolversKey.value.filterNot(_ == projectResolver.value) val reorderResolvers = true // coursierReorderResolvers.value val paths = ivyPaths.value From a89ad8ad4dfac2d19b5f5f11d4d29c6e41782f27 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 7 Mar 2024 09:00:17 +0100 Subject: [PATCH 12/12] apply review --- .../src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala index 5287a571f..d36acf673 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/ContextUtil.scala @@ -7,8 +7,8 @@ import sbt.util.cacheLevel import sbt.util.CacheLevelTag trait ContextUtil[C <: Quotes & scala.Singleton](val valStart: Int): - import qctx.reflect.* val qctx: C + import qctx.reflect.* given qctx.type = qctx private var counter: Int = valStart - 1