From 6611ccf94d694a1889ed0e6414b0024cb6929ca2 Mon Sep 17 00:00:00 2001 From: Matthew de Detrich Date: Thu, 8 Dec 2022 10:48:23 +0100 Subject: [PATCH 001/207] Set socket backlog to default size of 50 --- .github/workflows/ci.yml | 1 + main-command/src/main/scala/xsbt/IPC.scala | 3 ++- .../src/test/scala/xsbt/IPCSpec.scala | 23 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 main-command/src/test/scala/xsbt/IPCSpec.scala diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c2cc30a4..8ca875355 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -186,6 +186,7 @@ jobs: shell: bash run: | # test building sbtn on Windows + sbt "commandProj/testOnly xsbt.IPCSpec" sbt "-Dsbt.io.virtual=false" nativeImage # test launcher script echo build using JDK 8, test using JDK 8, on Windows diff --git a/main-command/src/main/scala/xsbt/IPC.scala b/main-command/src/main/scala/xsbt/IPC.scala index 9c353613d..b5ce13ee5 100644 --- a/main-command/src/main/scala/xsbt/IPC.scala +++ b/main-command/src/main/scala/xsbt/IPC.scala @@ -17,6 +17,7 @@ object IPC { private val portMin = 1025 private val portMax = 65536 private val loopback = InetAddress.getByName(null) + private[xsbt] val socketBacklog = 50 // 50 is the default backlog size for the java.net.Socket def client[T](port: Int)(f: IPC => T): T = ipc(new Socket(loopback, port))(f) @@ -34,7 +35,7 @@ object IPC { def createServer(attempts: Int): ServerSocket = if (attempts > 0) { - try new ServerSocket(nextPort, 1, loopback) + try new ServerSocket(nextPort, socketBacklog, loopback) catch { case NonFatal(_) => createServer(attempts - 1) } } else sys.error("Could not connect to socket: maximum attempts exceeded") diff --git a/main-command/src/test/scala/xsbt/IPCSpec.scala b/main-command/src/test/scala/xsbt/IPCSpec.scala new file mode 100644 index 000000000..dfeb1dc4f --- /dev/null +++ b/main-command/src/test/scala/xsbt/IPCSpec.scala @@ -0,0 +1,23 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package xsbt + +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers._ + +class IPCSpec extends AnyFlatSpec { + "server" should "allow same number of connections as determined in socket backlog" in { + noException should be thrownBy { + val server = IPC.unmanagedServer + (1 until IPC.socketBacklog + 1).foreach { _ => + IPC.client(server.port)(identity) + } + server.close() + } + } +} From 6eaad925fbae66df5bc44b2d3aa2401d22f1833b Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 31 Dec 2022 16:48:52 -0500 Subject: [PATCH 002/207] ipcsocket 1.6.1 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 33941806c..8f3cf364b 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -26,7 +26,7 @@ object Dependencies { val launcherInterface = "org.scala-sbt" % "launcher-interface" % launcherVersion val rawLauncher = "org.scala-sbt" % "launcher" % launcherVersion val testInterface = "org.scala-sbt" % "test-interface" % "1.0" - val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.5.0" + val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.6.1" private val compilerInterface = "org.scala-sbt" % "compiler-interface" % zincVersion private val compilerClasspath = "org.scala-sbt" %% "zinc-classpath" % zincVersion From 0bd5e7706865c208b9eaa591363488e0015975d8 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 31 Dec 2022 16:48:52 -0500 Subject: [PATCH 003/207] ipcsocket 1.6.1 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 33941806c..8f3cf364b 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -26,7 +26,7 @@ object Dependencies { val launcherInterface = "org.scala-sbt" % "launcher-interface" % launcherVersion val rawLauncher = "org.scala-sbt" % "launcher" % launcherVersion val testInterface = "org.scala-sbt" % "test-interface" % "1.0" - val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.5.0" + val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.6.1" private val compilerInterface = "org.scala-sbt" % "compiler-interface" % zincVersion private val compilerClasspath = "org.scala-sbt" %% "zinc-classpath" % zincVersion From b5228254643804bdc84c8ffc9fd813b6ee58156e Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 2 Jan 2023 22:22:11 +0100 Subject: [PATCH 004/207] Add aarch64 libsbtipcsocket.so native-image/resource-config.json --- .../main/resources/META-INF/native-image/resource-config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/main/resources/META-INF/native-image/resource-config.json b/client/src/main/resources/META-INF/native-image/resource-config.json index 0bc65dde4..19d10f4a9 100644 --- a/client/src/main/resources/META-INF/native-image/resource-config.json +++ b/client/src/main/resources/META-INF/native-image/resource-config.json @@ -16,6 +16,7 @@ {"pattern":"org/jline/utils/screen.caps"}, {"pattern":"library.properties"}, {"pattern":"darwin/x86_64/libsbtipcsocket.dylib"}, + {"pattern":"linux/aarch64/libsbtipcsocket.so"}, {"pattern":"linux/x86_64/libsbtipcsocket.so"}, {"pattern":"win32/x86_64/sbtipcsocket.dll"} ] From 03ae9f452e703774128c845590c883ac5a67e86d Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 2 Jan 2023 23:48:13 +0100 Subject: [PATCH 005/207] Set correct page size for aarch64 binaries --- build.sbt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 46681bca6..6bd6e6fb8 100644 --- a/build.sbt +++ b/build.sbt @@ -4,6 +4,7 @@ import com.typesafe.tools.mima.core.ProblemFilters._ import com.typesafe.tools.mima.core._ import local.Scripted import java.nio.file.{ Files, Path => JPath } +import java.util.Locale import scala.util.Try @@ -1146,6 +1147,10 @@ lazy val serverTestProj = (project in file("server-test")) ) val isWin = scala.util.Properties.isWin +val isLinux = scala.util.Properties.isLinux +val isArmArchitecture: Boolean = sys.props + .getOrElse("os.arch", "") + .toLowerCase(Locale.ROOT) == "aarch64" val buildThinClient = inputKey[JPath]("generate a java implementation of the thin client") // Use a TaskKey rather than SettingKey for nativeInstallDirectory so it can left unset by default @@ -1177,7 +1182,9 @@ lazy val sbtClientProj = (project in file("client")) "-H:+ReportExceptionStackTraces", "-H:-ParseRuntimeOptions", s"-H:Name=${target.value / "bin" / "sbtn"}", - ), + ) ++ (if (isLinux && isArmArchitecture) + Seq("-H:PageSize=65536") // Make sure binary runs on kernels with page size set to 4k, 16 and 64k + else Nil), buildThinClient := { val isFish = Def.spaceDelimited("").parsed.headOption.fold(false)(_ == "--fish") val ext = if (isWin) ".bat" else if (isFish) ".fish" else ".sh" From 0a3e3aad9854909734ec946e79b12c40a31f610f Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 3 Jan 2023 00:08:22 -0500 Subject: [PATCH 006/207] Add sbtn for aarch64 support --- sbt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/sbt b/sbt index 6d4d96c4e..8d754c6fd 100755 --- a/sbt +++ b/sbt @@ -24,7 +24,7 @@ declare build_props_sbt_version= declare use_sbtn= declare no_server= declare sbtn_command="$SBTN_CMD" -declare sbtn_version="1.7.0" +declare sbtn_version="1.8.1-M1" ### ------------------------------- ### ### Helper methods for BASH scripts ### @@ -172,8 +172,14 @@ acquire_sbtn () { local archive_target= local url= if [[ "$OSTYPE" == "linux-gnu"* ]]; then - archive_target="$p/sbtn-x86_64-pc-linux-${sbtn_v}.tar.gz" - url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-x86_64-pc-linux-${sbtn_v}.tar.gz" + arch=$(uname -m) + if [[ "$arch" == "aarch64" ]] || [[ "$arch" == "x86_64" ]]; then + archive_target="$p/sbtn-${arch}-pc-linux-${sbtn_v}.tar.gz" + url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-${arch}-pc-linux-${sbtn_v}.tar.gz" + else + echoerr "sbtn is not supported on $arch" + exit 2 + fi elif [[ "$OSTYPE" == "darwin"* ]]; then archive_target="$p/sbtn-x86_64-apple-darwin-${sbtn_v}.tar.gz" url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-x86_64-apple-darwin-${sbtn_v}.tar.gz" @@ -189,7 +195,7 @@ acquire_sbtn () { if [[ -f "$target" ]]; then sbtn_command="$target" else - echoerr "downloading sbtn ${sbtn_v}" + echoerr "downloading sbtn ${sbtn_v} for ${arch}" download_url "$url" "$archive_target" if [[ "$OSTYPE" == "linux-gnu"* ]] || [[ "$OSTYPE" == "darwin"* ]]; then tar zxf "$archive_target" --directory "$p" @@ -710,7 +716,8 @@ detectNativeClient() { if [[ "$sbtn_command" != "" ]]; then : elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - [[ -f "${sbt_bin_dir}/sbtn-x86_64-pc-linux" ]] && sbtn_command="${sbt_bin_dir}/sbtn-x86_64-pc-linux" + arch=$(uname -m) + [[ -f "${sbt_bin_dir}/sbtn-${arch}-pc-linux" ]] && sbtn_command="${sbt_bin_dir}/sbtn-${arch}-pc-linux" elif [[ "$OSTYPE" == "darwin"* ]]; then [[ -f "${sbt_bin_dir}/sbtn-x86_64-apple-darwin" ]] && sbtn_command="${sbt_bin_dir}/sbtn-x86_64-apple-darwin" elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then From 5fa46859d2fa67e949fe8ccf2397f2535d530f5e Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Tue, 3 Jan 2023 12:13:51 +0100 Subject: [PATCH 007/207] Make use of sbtn aarch64 binary where possible --- launcher-package/build.sbt | 33 ++++++++++++++----- .../main/scala/sbt/internal/InstallSbtn.scala | 6 +++- .../scala/sbt/internal/InstallSbtnSpec.scala | 4 +-- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index cceaebd16..af2e25f51 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -72,9 +72,11 @@ val exportRepoCsrDirectory = settingKey[File]("") val x86MacPlatform = "x86_64-apple-darwin" val x86LinuxPlatform = "x86_64-pc-linux" +val aarch64LinuxPlatform = "aarch64-pc-linux" val x86WindowsPlatform = "x86_64-pc-win32" val x86MacImageName = s"sbtn-$x86MacPlatform" val x86LinuxImageName = s"sbtn-$x86LinuxPlatform" +val aarch64LinuxImageName = s"sbtn-$aarch64LinuxPlatform" val x86WindowsImageName = s"sbtn-$x86WindowsPlatform.exe" organization in ThisBuild := "org.scala-sbt" @@ -119,17 +121,19 @@ val root = (project in file(".")). file }, // update sbt.sh at root - sbtnVersion := "1.7.0", + sbtnVersion := "1.8.1-M1", sbtnJarsBaseUrl := "https://github.com/sbt/sbtn-dist/releases/download", sbtnJarsMappings := { val baseUrl = sbtnJarsBaseUrl.value val v = sbtnVersion.value val macosImageTar = s"sbtn-$x86MacPlatform-$v.tar.gz" - val linuxImageTar = s"sbtn-$x86LinuxPlatform-$v.tar.gz" + val linuxX86ImageTar = s"sbtn-$x86LinuxPlatform-$v.tar.gz" + val linuxAarch64ImageTar = s"sbtn-$aarch64LinuxPlatform-$v.tar.gz" val windowsImageZip = s"sbtn-$x86WindowsPlatform-$v.zip" val t = target.value val macosTar = t / macosImageTar - val linuxTar = t / linuxImageTar + val linuxX86Tar = t / linuxX86ImageTar + val linuxAarch64Tar = t / linuxAarch64ImageTar val windowsZip = t / windowsImageZip import dispatch.classic._ if(!macosTar.exists && !isWindows && sbtIncludeSbtn) { @@ -142,16 +146,26 @@ val root = (project in file(".")). s"tar zxvf $macosTar --directory $platformDir".! IO.move(platformDir / "sbtn", t / x86MacImageName) } - if(!linuxTar.exists && !isWindows && sbtIncludeSbtn) { - IO.touch(linuxTar) - val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(linuxTar)) - try Http(url(s"$baseUrl/v$v/$linuxImageTar") >>> writer) + if(!linuxX86Tar.exists && !isWindows && sbtIncludeSbtn) { + IO.touch(linuxX86Tar) + val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(linuxX86Tar)) + try Http(url(s"$baseUrl/v$v/$linuxX86ImageTar") >>> writer) finally writer.close() val platformDir = t / x86LinuxPlatform IO.createDirectory(platformDir) - s"""tar zxvf $linuxTar --directory $platformDir""".! + s"""tar zxvf $linuxX86Tar --directory $platformDir""".! IO.move(platformDir / "sbtn", t / x86LinuxImageName) } + if(!linuxAarch64Tar.exists && !isWindows && sbtIncludeSbtn) { + IO.touch(linuxAarch64Tar) + val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(linuxAarch64Tar)) + try Http(url(s"$baseUrl/v$v/$linuxAarch64ImageTar") >>> writer) + finally writer.close() + val platformDir = t / aarch64LinuxPlatform + IO.createDirectory(platformDir) + s"""tar zxvf $linuxAarch64Tar --directory $platformDir""".! + IO.move(platformDir / "sbtn", t / aarch64LinuxImageName) + } if(!windowsZip.exists && sbtIncludeSbtn) { IO.touch(windowsZip) val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(windowsZip)) @@ -166,6 +180,7 @@ val root = (project in file(".")). else Seq(t / x86MacImageName -> s"bin/$x86MacImageName", t / x86LinuxImageName -> s"bin/$x86LinuxImageName", + t / aarch64LinuxImageName -> s"bin/$aarch64LinuxImageName", t / x86WindowsImageName -> s"bin/$x86WindowsImageName") }, @@ -222,7 +237,7 @@ val root = (project in file(".")). val orig = (linuxPackageMappings in Rpm).value val nativeMappings = sbtnJarsMappings.value orig.map(o => o.copy(mappings = o.mappings.toList filterNot { - case (x, p) => p.contains("sbtn-x86_64") + case (x, p) => p.contains("sbtn-x86_64") || p.contains("sbtn-aarch64") })) }, rpmVendor := "lightbend", diff --git a/main/src/main/scala/sbt/internal/InstallSbtn.scala b/main/src/main/scala/sbt/internal/InstallSbtn.scala index b6a1a2682..e5edd4b6f 100644 --- a/main/src/main/scala/sbt/internal/InstallSbtn.scala +++ b/main/src/main/scala/sbt/internal/InstallSbtn.scala @@ -64,7 +64,11 @@ private[sbt] object InstallSbtn { if (Properties.isWin) "pc-win32.exe" else if (Properties.isLinux) "pc-linux" else "apple-darwin" - val sbtnName = s"sbt/bin/sbtn-x86_64-$bin" + val isArmArchitecture: Boolean = sys.props + .getOrElse("os.arch", "") + .toLowerCase(java.util.Locale.ROOT) == "aarch64" + val arch = if (Properties.isLinux && isArmArchitecture) "aarch64" else "x86_64" + val sbtnName = s"sbt/bin/sbtn-$arch-$bin" val fis = new FileInputStream(sbtZip.toFile) val zipInputStream = new ZipInputStream(fis) var foundBinary = false diff --git a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala index 392cc1fc9..8418c6ed3 100644 --- a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala +++ b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala @@ -37,7 +37,7 @@ class InstallSbtnSpec extends AnyFlatSpec { "InstallSbtn" should "extract native sbtn" ignore withTemp(".zip") { tmp => withTemp(".exe") { sbtn => - InstallSbtn.extractSbtn(term, "1.4.1", tmp, sbtn) + InstallSbtn.extractSbtn(term, "1.8.1-M1", tmp, sbtn) val tmpDir = Files.createTempDirectory("sbtn-test").toRealPath() Files.createDirectories(tmpDir.resolve("project")) val foo = tmpDir.resolve("foo") @@ -46,7 +46,7 @@ class InstallSbtnSpec extends AnyFlatSpec { IO.write(tmpDir.resolve("build.sbt").toFile, build) IO.write( tmpDir.resolve("project").resolve("build.properties").toFile, - "sbt.version=1.4.1" + "sbt.version=1.8.0" ) try { val proc = From 8f4841de9250deca879de12950c385f7af3e2727 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Tue, 3 Jan 2023 12:21:38 +0100 Subject: [PATCH 008/207] Define default arch variable --- sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/sbt b/sbt index 8d754c6fd..142e285b9 100755 --- a/sbt +++ b/sbt @@ -171,6 +171,7 @@ acquire_sbtn () { local target="$p/sbtn" local archive_target= local url= + local arch = "x86_64" if [[ "$OSTYPE" == "linux-gnu"* ]]; then arch=$(uname -m) if [[ "$arch" == "aarch64" ]] || [[ "$arch" == "x86_64" ]]; then From ac638a764d80d81e2473fad2e86467a7f73673b6 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Tue, 3 Jan 2023 16:02:18 +0100 Subject: [PATCH 009/207] Use latest sbtn --- launcher-package/build.sbt | 2 +- main/src/test/scala/sbt/internal/InstallSbtnSpec.scala | 2 +- sbt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index af2e25f51..60ff78f3b 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -121,7 +121,7 @@ val root = (project in file(".")). file }, // update sbt.sh at root - sbtnVersion := "1.8.1-M1", + sbtnVersion := "1.8.1", sbtnJarsBaseUrl := "https://github.com/sbt/sbtn-dist/releases/download", sbtnJarsMappings := { val baseUrl = sbtnJarsBaseUrl.value diff --git a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala index 8418c6ed3..412341810 100644 --- a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala +++ b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala @@ -37,7 +37,7 @@ class InstallSbtnSpec extends AnyFlatSpec { "InstallSbtn" should "extract native sbtn" ignore withTemp(".zip") { tmp => withTemp(".exe") { sbtn => - InstallSbtn.extractSbtn(term, "1.8.1-M1", tmp, sbtn) + InstallSbtn.extractSbtn(term, "1.8.1", tmp, sbtn) val tmpDir = Files.createTempDirectory("sbtn-test").toRealPath() Files.createDirectories(tmpDir.resolve("project")) val foo = tmpDir.resolve("foo") diff --git a/sbt b/sbt index 142e285b9..f9b0fcc4c 100755 --- a/sbt +++ b/sbt @@ -24,7 +24,7 @@ declare build_props_sbt_version= declare use_sbtn= declare no_server= declare sbtn_command="$SBTN_CMD" -declare sbtn_version="1.8.1-M1" +declare sbtn_version="1.8.1" ### ------------------------------- ### ### Helper methods for BASH scripts ### From 59be97660c1b06bb008775d95b11a7bb886ceaec Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 3 Jan 2023 14:00:29 -0500 Subject: [PATCH 010/207] lm-coursier-shaded 2.0.15 Fixes https://github.com/sbt/sbt/issues/7062 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 8f3cf364b..0a9c69c2a 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.13" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.15" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From 28f0c075acdfa07899099094c1ee58ead79f22ba Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 4 Jan 2023 15:43:43 -0500 Subject: [PATCH 011/207] Fixes M1 support Fixes https://github.com/sbt/sbt/issues/7117 Problem ------- sbt no longer works on a Mac with M1 (aarch64) chips because it fails on ipcsocket library, which we maintain. This was caused by architecture detection that was added in 1.6.1, which did not take in account for macOS universal binary. Solution -------- Update to ipcsocket 1.6.2. --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 0a9c69c2a..c25f2dcbd 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -26,7 +26,7 @@ object Dependencies { val launcherInterface = "org.scala-sbt" % "launcher-interface" % launcherVersion val rawLauncher = "org.scala-sbt" % "launcher" % launcherVersion val testInterface = "org.scala-sbt" % "test-interface" % "1.0" - val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.6.1" + val ipcSocket = "org.scala-sbt.ipcsocket" % "ipcsocket" % "1.6.2" private val compilerInterface = "org.scala-sbt" % "compiler-interface" % zincVersion private val compilerClasspath = "org.scala-sbt" %% "zinc-classpath" % zincVersion From b0b770573989739367112a43f7ad4e20ae6c5223 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 4 Jan 2023 17:18:17 -0500 Subject: [PATCH 012/207] Fixes Debian 11 compat Fixes https://github.com/sbt/sbt/issues/7118 Problem ------- sbtn 1.8.1 was built using ubuntu-latest, which meant picking up newer glibc. Solution -------- This downgraded the ubuntu machine to build sbtn. --- .github/workflows/ci.yml | 2 +- launcher-package/build.sbt | 2 +- main/src/test/scala/sbt/internal/InstallSbtnSpec.scala | 2 +- sbt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d302c00f..0f268cc16 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: fail-fast: false matrix: include: - - os: ubuntu-latest + - os: ubuntu-20.04 java: 17 distribution: temurin jobtype: 1 diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index 60ff78f3b..91a75b44e 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -121,7 +121,7 @@ val root = (project in file(".")). file }, // update sbt.sh at root - sbtnVersion := "1.8.1", + sbtnVersion := "1.8.2", sbtnJarsBaseUrl := "https://github.com/sbt/sbtn-dist/releases/download", sbtnJarsMappings := { val baseUrl = sbtnJarsBaseUrl.value diff --git a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala index 412341810..c94f1b7ea 100644 --- a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala +++ b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala @@ -37,7 +37,7 @@ class InstallSbtnSpec extends AnyFlatSpec { "InstallSbtn" should "extract native sbtn" ignore withTemp(".zip") { tmp => withTemp(".exe") { sbtn => - InstallSbtn.extractSbtn(term, "1.8.1", tmp, sbtn) + InstallSbtn.extractSbtn(term, "1.8.2", tmp, sbtn) val tmpDir = Files.createTempDirectory("sbtn-test").toRealPath() Files.createDirectories(tmpDir.resolve("project")) val foo = tmpDir.resolve("foo") diff --git a/sbt b/sbt index f9b0fcc4c..e9b228cf6 100755 --- a/sbt +++ b/sbt @@ -24,7 +24,7 @@ declare build_props_sbt_version= declare use_sbtn= declare no_server= declare sbtn_command="$SBTN_CMD" -declare sbtn_version="1.8.1" +declare sbtn_version="1.8.2" ### ------------------------------- ### ### Helper methods for BASH scripts ### From 60236f3b344a5b02eea21266ada6193bc6e45719 Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Sat, 21 Jan 2023 09:25:55 +0000 Subject: [PATCH 013/207] Remove spurious whitespace in the launcher script It causes an error in (at least) fish shell: "sbt: line 174: local: `=': not a valid identifier" --- sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt b/sbt index e9b228cf6..209d35e4d 100755 --- a/sbt +++ b/sbt @@ -171,7 +171,7 @@ acquire_sbtn () { local target="$p/sbtn" local archive_target= local url= - local arch = "x86_64" + local arch="x86_64" if [[ "$OSTYPE" == "linux-gnu"* ]]; then arch=$(uname -m) if [[ "$arch" == "aarch64" ]] || [[ "$arch" == "x86_64" ]]; then From 9b4d5a5a5a74f100b3876ba5e95ce5b76ca75123 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Fri, 27 Jan 2023 10:21:44 +0100 Subject: [PATCH 014/207] Fix reporting Java diagnostics through BSP Java diagnostics don't have a pointer but we should report them. Copied implementation from Bloop to translate the position of an xsbti.Problem to a BSP range. --- .../internal/server/BuildServerReporter.scala | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index 3963da325..a62f2356d 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -108,7 +108,7 @@ final class BuildServerReporterImpl( val hadProblems = bspCompileState.hasAnyProblems.remove(filePath) val reportedProblems = infos.getReportedProblems.toVector - val diagnostics = reportedProblems.flatMap(toDiagnostic) + val diagnostics = reportedProblems.map(toDiagnostic) // publish diagnostics if: // 1. file had any problems previously - we might want to update them with new ones @@ -165,9 +165,9 @@ final class BuildServerReporterImpl( protected override def publishDiagnostic(problem: Problem): Unit = { for { id <- problem.position.sourcePath.toOption - diagnostic <- toDiagnostic(problem) filePath <- toSafePath(VirtualFileRef.of(id)) } { + val diagnostic = toDiagnostic(problem) problemsByFile(filePath) = problemsByFile.getOrElse(filePath, Vector.empty) :+ diagnostic val params = PublishDiagnosticsParams( TextDocumentIdentifier(filePath.toUri), @@ -180,32 +180,27 @@ final class BuildServerReporterImpl( } } - private def toDiagnostic(problem: Problem): Option[Diagnostic] = { + private def toDiagnostic(problem: Problem): Diagnostic = { val pos = problem.position - for { - line <- pos.line.toOption.map(_.toLong - 1L) - pointer <- pos.pointer.toOption.map(_.toLong) - } yield { - val range = ( - pos.startLine.toOption, - pos.startColumn.toOption, - pos.endLine.toOption, - pos.endColumn.toOption - ) match { - case (Some(sl), Some(sc), Some(el), Some(ec)) => - Range(Position(sl.toLong - 1, sc.toLong), Position(el.toLong - 1, ec.toLong)) - case _ => - Range(Position(line, pointer), Position(line, pointer + 1)) - } + val startLineOpt = pos.startLine.toOption.map(_.toLong - 1) + val startColumnOpt = pos.startColumn.toOption.map(_.toLong) + val endLineOpt = pos.endLine.toOption.map(_.toLong - 1) + val endColumnOpt = pos.endColumn.toOption.map(_.toLong) - Diagnostic( - range, - Option(toDiagnosticSeverity(problem.severity)), - problem.diagnosticCode().toOption.map(_.code), - Option("sbt"), - problem.message - ) - } + def toPosition(lineOpt: Option[Long], columnOpt: Option[Long]): Option[Position] = + lineOpt.map(line => Position(line, columnOpt.getOrElse(0L))) + + val startPos = toPosition(startLineOpt, startColumnOpt).getOrElse(Position(0L, 0L)) + val endPosOpt = toPosition(endLineOpt, endColumnOpt) + val range = Range(startPos, endPosOpt.getOrElse(startPos)) + + Diagnostic( + range, + Option(toDiagnosticSeverity(problem.severity)), + problem.diagnosticCode().toOption.map(_.code), + Option("sbt"), + problem.message + ) } private def toDiagnosticSeverity(severity: Severity): Long = severity match { From 799adcda2b1ecf2b9d285bfe3177743a4f33d930 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Fri, 27 Jan 2023 10:22:23 +0100 Subject: [PATCH 015/207] Some refacto of BuildServerTest Generate BSP ids automatically --- .../test/scala/testpkg/BuildServerTest.scala | 162 +++++++++--------- 1 file changed, 85 insertions(+), 77 deletions(-) diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index aa08914f1..d2ca73d64 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -18,6 +18,7 @@ import sjsonnew.support.scalajson.unsafe.{ CompactPrinter, Converter } import java.io.File import java.net.URI import java.nio.file.Paths +import java.util.concurrent.atomic.AtomicInteger import scala.concurrent.duration._ // starts svr using server-test/buildserver and perform custom server tests @@ -27,10 +28,14 @@ object BuildServerTest extends AbstractServerTest { override val testDirectory: String = "buildserver" + private val idGen: AtomicInteger = new AtomicInteger(0) + private def nextId(): Int = idGen.getAndIncrement() + test("build/initialize") { _ => - initializeRequest() + val id = nextId() + initializeRequest(id) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"8"""") && + (s contains s""""id":"${id}"""") && (s contains """"resourcesProvider":true""") && (s contains """"outputPathsProvider":true""") }) @@ -38,7 +43,7 @@ object BuildServerTest extends AbstractServerTest { test("workspace/buildTargets") { _ => svr.sendJsonRpc( - """{ "jsonrpc": "2.0", "id": "16", "method": "workspace/buildTargets", "params": {} }""" + s"""{ "jsonrpc": "2.0", "id": "${nextId()}", "method": "workspace/buildTargets", "params": {} }""" ) assert(processing("workspace/buildTargets")) val result = svr.waitFor[WorkspaceBuildTargetsResult](10.seconds) @@ -53,7 +58,7 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/sources") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") - svr.sendJsonRpc(buildTargetSources(24, Seq(buildTarget, badBuildTarget))) + svr.sendJsonRpc(buildTargetSources(Seq(buildTarget, badBuildTarget))) assert(processing("buildTarget/sources")) val s = svr.waitFor[SourcesResult](10.seconds) val sources = s.items.head.sources.map(_.uri) @@ -61,7 +66,7 @@ object BuildServerTest extends AbstractServerTest { } test("buildTarget/sources: base sources") { _ => val buildTarget = buildTargetUri("buildserver", "Compile") - svr.sendJsonRpc(buildTargetSources(25, Seq(buildTarget))) + svr.sendJsonRpc(buildTargetSources(Seq(buildTarget))) assert(processing("buildTarget/sources")) val s = svr.waitFor[SourcesResult](10.seconds) val sources = s.items.head.sources @@ -75,7 +80,7 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/sources: sbt") { _ => val x = new URI(s"${svr.baseDirectory.getAbsoluteFile.toURI}#buildserver-build") - svr.sendJsonRpc(buildTargetSources(26, Seq(x))) + svr.sendJsonRpc(buildTargetSources(Seq(x))) assert(processing("buildTarget/sources")) val s = svr.waitFor[SourcesResult](10.seconds) val sources = s.items.head.sources.map(_.uri).sorted @@ -95,7 +100,7 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/compile") { _ => val buildTarget = buildTargetUri("util", "Compile") - compile(buildTarget, id = 32) + compile(buildTarget, id = nextId()) assert(processing("buildTarget/compile")) val res = svr.waitFor[BspCompileResult](10.seconds) @@ -105,7 +110,7 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/compile - reports compilation progress") { _ => val buildTarget = buildTargetUri("runAndTest", "Compile") - compile(buildTarget, id = 33) + compile(buildTarget) // This doesn't always come back in 10s on CI. assert(svr.waitForString(60.seconds) { s => @@ -124,7 +129,7 @@ object BuildServerTest extends AbstractServerTest { }) assert(svr.waitForString(60.seconds) { s => - s.contains("build/publishDiagnostics") + s.contains("build/publishDiagnostics") && s.contains(""""diagnostics":[]""") }) @@ -140,7 +145,7 @@ object BuildServerTest extends AbstractServerTest { val buildTarget = buildTargetUri("diagnostics", "Compile") val mainFile = new File(svr.baseDirectory, "diagnostics/src/main/scala/Diagnostics.scala") - compile(buildTarget, id = 33) + compile(buildTarget) assert(svr.waitForString(30.seconds) { s => s.contains("build/taskFinish") && @@ -155,8 +160,8 @@ object BuildServerTest extends AbstractServerTest { |}""".stripMargin ) - reloadWorkspace(id = 55) - compile(buildTarget, id = 66) + reloadWorkspace() + compile(buildTarget) assert( svr.waitForString(30.seconds) { s => @@ -175,8 +180,8 @@ object BuildServerTest extends AbstractServerTest { |}""".stripMargin ) - reloadWorkspace(id = 77) - compile(buildTarget, id = 88) + reloadWorkspace() + compile(buildTarget) assert( svr.waitForString(30.seconds) { s => @@ -188,7 +193,7 @@ object BuildServerTest extends AbstractServerTest { ) // trigger no-op compilation - compile(buildTarget, id = 99) + compile(buildTarget) assert( !svr.waitForString(20.seconds) { s => @@ -203,7 +208,7 @@ object BuildServerTest extends AbstractServerTest { val buildTarget = buildTargetUri("diagnostics", "Compile") val testFile = new File(svr.baseDirectory, s"diagnostics/src/main/scala/PatternMatch.scala") - compile(buildTarget, id = 33) + compile(buildTarget) assert( svr.waitForString(30.seconds) { s => @@ -226,8 +231,8 @@ object BuildServerTest extends AbstractServerTest { |""".stripMargin ) - reloadWorkspace(id = 55) - compile(buildTarget, id = 66) + reloadWorkspace() + compile(buildTarget) assert( svr.waitForString(30.seconds) { s => @@ -243,14 +248,15 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/scalacOptions") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") + val id = nextId() svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "40", "method": "buildTarget/scalacOptions", "params": { + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/scalacOptions", "params": { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) assert(processing("buildTarget/scalacOptions")) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"40"""") && + (s contains s""""id":"$id"""") && (s contains "scala-library-2.13.8.jar") }) } @@ -265,12 +271,12 @@ object BuildServerTest extends AbstractServerTest { .toFile val buildTarget = buildTargetUri("runAndTest", "Compile") - compile(buildTarget, id = 43) + compile(buildTarget) svr.waitFor[BspCompileResult](10.seconds) assert(targetDir.list().contains("Main.class")) svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "44", "method": "buildTarget/cleanCache", "params": { + s"""{ "jsonrpc": "2.0", "id": "${nextId()}", "method": "buildTarget/cleanCache", "params": { | "targets": [{ "uri": "$buildTarget" }] |} }""".stripMargin ) @@ -282,14 +288,14 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/cleanCache: rebuild project") { _ => svr.sendJsonRpc( - """{ "jsonrpc": "2.0", "id": "45", "method": "workspace/buildTargets", "params": {} }""" + s"""{ "jsonrpc": "2.0", "id": "${nextId()}", "method": "workspace/buildTargets", "params": {} }""" ) assert(processing("workspace/buildTargets")) val result = svr.waitFor[WorkspaceBuildTargetsResult](10.seconds) val allTargets = result.targets.map(_.id.uri) svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "46", "method": "buildTarget/cleanCache", "params": { + s"""{ "jsonrpc": "2.0", "id": "${nextId()}", "method": "buildTarget/cleanCache", "params": { | "targets": [ | ${allTargets.map(uri => s"""{ "uri": "$uri" }""").mkString(",\n")} | ] @@ -301,12 +307,13 @@ object BuildServerTest extends AbstractServerTest { } test("workspace/reload") { _ => + val id = nextId() svr.sendJsonRpc( - """{ "jsonrpc": "2.0", "id": "48", "method": "workspace/reload"}""" + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "workspace/reload"}""" ) assert(processing("workspace/reload")) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"48"""") && + (s contains s""""id":"$id"""") && (s contains """"result":null""") }) } @@ -322,8 +329,9 @@ object BuildServerTest extends AbstractServerTest { |) |""".stripMargin ) + val id = nextId() // reload - reloadWorkspace(id = 52) + reloadWorkspace(id) assert( svr.waitForString(10.seconds) { s => s.contains(s""""buildTarget":{"uri":"$metaBuildTarget"}""") && @@ -334,7 +342,7 @@ object BuildServerTest extends AbstractServerTest { ) assert( svr.waitForString(10.seconds) { s => - s.contains(""""id":"52"""") && + s.contains(s""""id":"$id"""") && s.contains(""""error"""") && s.contains(s""""code":${ErrorCodes.InternalError}""") && s.contains("Type error in expression") @@ -349,7 +357,7 @@ object BuildServerTest extends AbstractServerTest { |) |""".stripMargin ) - reloadWorkspace(id = 52) + reloadWorkspace() // assert received an empty diagnostic assert( svr.waitForString(10.seconds) { s => @@ -365,22 +373,24 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/scalaMainClasses") { _ => val buildTarget = buildTargetUri("runAndTest", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") + val id = nextId() svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "56", "method": "buildTarget/scalaMainClasses", "params": { + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/scalaMainClasses", "params": { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) assert(processing("buildTarget/scalaMainClasses")) assert(svr.waitForString(30.seconds) { s => - (s contains """"id":"56"""") && + (s contains s""""id":"$id"""") && (s contains """"class":"main.Main"""") }) } test("buildTarget/run") { _ => val buildTarget = buildTargetUri("runAndTest", "Compile") + val id = nextId() svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "64", "method": "buildTarget/run", "params": { + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/run", "params": { | "target": { "uri": "$buildTarget" }, | "dataKind": "scala-main-class", | "data": { "class": "main.Main" } @@ -392,16 +402,17 @@ object BuildServerTest extends AbstractServerTest { (s contains """"message":"Hello World!"""") }) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"64"""") && + (s contains s""""id":"$id"""") && (s contains """"statusCode":1""") }) } test("buildTarget/jvmRunEnvironment") { _ => val buildTarget = buildTargetUri("runAndTest", "Compile") + val id = nextId() svr.sendJsonRpc( s"""|{ "jsonrpc": "2.0", - | "id": "97", + | "id": "$id", | "method": "buildTarget/jvmRunEnvironment", | "params": { "targets": [{ "uri": "$buildTarget" }] } |}""".stripMargin @@ -409,7 +420,7 @@ object BuildServerTest extends AbstractServerTest { assert(processing("buildTarget/jvmRunEnvironment")) assert { svr.waitForString(10.seconds) { s => - (s contains """"id":"97"""") && + (s contains s""""id":"$id"""") && (s contains "jsoniter-scala-core_2.13-2.13.11.jar") && // compile dependency (s contains "\"jvmOptions\":[\"Xmx256M\"]") && (s contains "\"environmentVariables\":{\"KEY\":\"VALUE\"}") && @@ -420,9 +431,10 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/jvmTestEnvironment") { _ => val buildTarget = buildTargetUri("runAndTest", "Test") + val id = nextId() svr.sendJsonRpc( s"""|{ "jsonrpc": "2.0", - | "id": "98", + | "id": "$id", | "method": "buildTarget/jvmTestEnvironment", | "params": { "targets": [{ "uri": "$buildTarget" }] } |}""".stripMargin @@ -430,7 +442,7 @@ object BuildServerTest extends AbstractServerTest { assert(processing("buildTarget/jvmTestEnvironment")) assert { svr.waitForString(10.seconds) { s => - (s contains """"id":"98"""") && + (s contains s""""id":"$id"""") && // test depends on compile so it has dependencies from both (s contains "jsoniter-scala-core_2.13-2.13.11.jar") && // compile dependency (s contains "scalatest_2.13-3.0.8.jar") && // test dependency @@ -443,14 +455,15 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/scalaTestClasses") { _ => val buildTarget = buildTargetUri("runAndTest", "Test") val badBuildTarget = buildTargetUri("badBuildTarget", "Test") + val id = nextId() svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "72", "method": "buildTarget/scalaTestClasses", "params": { + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/scalaTestClasses", "params": { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) assert(processing("buildTarget/scalaTestClasses")) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"72"""") && + (s contains s""""id":"$id"""") && (s contains """"tests.FailingTest"""") && (s contains """"tests.PassingTest"""") && (s contains """"framework":"ScalaTest"""") @@ -459,22 +472,24 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/test: run all tests") { _ => val buildTarget = buildTargetUri("runAndTest", "Test") + val id = nextId() svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "80", "method": "buildTarget/test", "params": { + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/test", "params": { | "targets": [{ "uri": "$buildTarget" }] |} }""".stripMargin ) assert(processing("buildTarget/test")) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"80"""") && + (s contains s""""id":"$id"""") && (s contains """"statusCode":2""") }) } test("buildTarget/test: run one test class") { _ => val buildTarget = buildTargetUri("runAndTest", "Test") + val id = nextId() svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "84", "method": "buildTarget/test", "params": { + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/test", "params": { | "targets": [{ "uri": "$buildTarget" }], | "dataKind": "scala-test", | "data": { @@ -489,14 +504,14 @@ object BuildServerTest extends AbstractServerTest { ) assert(processing("buildTarget/test")) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"84"""") && + (s contains s""""id":"$id"""") && (s contains """"statusCode":1""") }) } test("buildTarget/compile: report error") { _ => val buildTarget = buildTargetUri("reportError", "Compile") - compile(buildTarget, id = 88) + compile(buildTarget) assert(svr.waitForString(10.seconds) { s => (s contains s""""buildTarget":{"uri":"$buildTarget"}""") && (s contains """"severity":1""") && @@ -506,7 +521,7 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/compile: report warning") { _ => val buildTarget = buildTargetUri("reportWarning", "Compile") - compile(buildTarget, id = 90) + compile(buildTarget) assert(svr.waitForString(10.seconds) { s => (s contains s""""buildTarget":{"uri":"$buildTarget"}""") && (s contains """"severity":2""") && @@ -516,9 +531,10 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/compile: respond error") { _ => val buildTarget = buildTargetUri("respondError", "Compile") - compile(buildTarget, id = 92) + val id = nextId() + compile(buildTarget, id) assert(svr.waitForString(10.seconds) { s => - s.contains(""""id":"92"""") && + s.contains(s""""id":"$id"""") && s.contains(""""error"""") && s.contains(s""""code":${ErrorCodes.InternalError}""") && s.contains("custom message") @@ -528,14 +544,15 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/resources") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") + val id = nextId() svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "96", "method": "buildTarget/resources", "params": { + s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/resources", "params": { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) assert(processing("buildTarget/resources")) assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"96"""") && (s contains "util/src/main/resources/") + (s contains s""""id":"$id"""") && (s contains "util/src/main/resources/") }) } @@ -543,7 +560,7 @@ object BuildServerTest extends AbstractServerTest { val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "97", "method": "buildTarget/outputPaths", "params": { + s"""{ "jsonrpc": "2.0", "id": "${nextId()}", "method": "buildTarget/outputPaths", "params": { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) @@ -565,18 +582,16 @@ object BuildServerTest extends AbstractServerTest { assert(actualResult == expectedResult) } - private def initializeRequest(): Unit = { - svr.sendJsonRpc( - """{ "jsonrpc": "2.0", "id": "8", "method": "build/initialize", - | "params": { - | "displayName": "test client", - | "version": "1.0.0", - | "bspVersion": "2.1.0-M1", - | "rootUri": "file://root/", - | "capabilities": { "languageIds": ["scala"] } - | } - |}""".stripMargin + private def initializeRequest(id: Int): Unit = { + val params = InitializeBuildParams( + "test client", + "1.0.0", + "2.1.0-M1", + new URI("file://root/"), + BuildClientCapabilities(Vector("scala")), + None ) + svr.sendJsonRpc(request(id, "build/initialize", params)) } private def processing(method: String, debug: Boolean = false): Boolean = { @@ -587,22 +602,16 @@ object BuildServerTest extends AbstractServerTest { } } - private def reloadWorkspace(id: Int): Unit = - svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "$id", "method": "workspace/reload"}""" - ) + private def reloadWorkspace(id: Int = nextId()): Unit = + svr.sendJsonRpc(s"""{ "jsonrpc": "2.0", "id": "$id", "method": "workspace/reload"}""") - private def compile(buildTarget: URI, id: Int): Unit = - compile(buildTarget.toString, id) + private def compile(buildTarget: URI, id: Int = nextId()): Unit = { + val params = + CompileParams(targets = Vector(BuildTargetIdentifier(buildTarget)), None, Vector.empty) + svr.sendJsonRpc(request(id, "buildTarget/compile", params)) + } - private def compile(buildTarget: String, id: Int): Unit = - svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/compile", "params": { - | "targets": [{ "uri": "$buildTarget" }] - |} }""".stripMargin - ) - - private def buildTargetSources(id: Int, buildTargets: Seq[URI]): String = { + private def buildTargetSources(buildTargets: Seq[URI], id: Int = nextId()): String = { val targets = buildTargets.map(BuildTargetIdentifier.apply).toVector request(id, "buildTarget/sources", SourcesParams(targets)) } @@ -613,9 +622,8 @@ object BuildServerTest extends AbstractServerTest { CompactPrinter(json) } - private def buildTargetUri(project: String, config: String): URI = { + private def buildTargetUri(project: String, config: String): URI = new URI(s"${svr.baseDirectory.getAbsoluteFile.toURI}#$project/$config") - } private def metaBuildTarget: String = s"${svr.baseDirectory.getAbsoluteFile.toURI}project/#buildserver-build/Compile" From ecc4469c3eb5b1af3faedde76b40bda36a626e9a Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Fri, 27 Jan 2023 11:59:04 +0100 Subject: [PATCH 016/207] Test diagnostics from Java --- .../src/server-test/buildserver/build.sbt | 6 +++++ .../src/main/java/example/Hello.java | 12 +++++++++ .../test/scala/testpkg/BuildServerTest.scala | 26 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 server-test/src/server-test/buildserver/java-proj/src/main/java/example/Hello.java diff --git a/server-test/src/server-test/buildserver/build.sbt b/server-test/src/server-test/buildserver/build.sbt index e41e0192b..7cab7de2e 100644 --- a/server-test/src/server-test/buildserver/build.sbt +++ b/server-test/src/server-test/buildserver/build.sbt @@ -36,6 +36,12 @@ lazy val util = project.settings( lazy val diagnostics = project +lazy val javaProj = project + .in(file("java-proj")) + .settings( + javacOptions += "-Xlint:all" + ) + def somethingBad = throw new MessageOnlyException("I am a bad build target") // other build targets should not be affected by this bad build target lazy val badBuildTarget = project.in(file("bad-build-target")) diff --git a/server-test/src/server-test/buildserver/java-proj/src/main/java/example/Hello.java b/server-test/src/server-test/buildserver/java-proj/src/main/java/example/Hello.java new file mode 100644 index 000000000..ddcab20e4 --- /dev/null +++ b/server-test/src/server-test/buildserver/java-proj/src/main/java/example/Hello.java @@ -0,0 +1,12 @@ +package example; + +import java.util.List; +import java.util.ArrayList; + +class Hello { + public static void main(String[] args) { + List list = new ArrayList(); + String msg = 42; + System.out.println(msg); + } +} diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index d2ca73d64..b4f25aa88 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -245,6 +245,32 @@ object BuildServerTest extends AbstractServerTest { } + test("buildTarget/compile: Java diagnostics") { _ => + val buildTarget = buildTargetUri("javaProj", "Compile") + + compile(buildTarget) + + assert( + svr.waitForString(10.seconds) { s => + s.contains("build/publishDiagnostics") && + s.contains("Hello.java") && + s.contains(""""severity":2""") && + s.contains("""missing type arguments for generic class java.util.List""") + }, + "should send publishDiagnostics with serverity 2 for Hello.java" + ) + + assert( + svr.waitForString(1.seconds) { s => + s.contains("build/publishDiagnostics") && + s.contains("Hello.java") && + s.contains(""""severity":1""") && + s.contains("""incompatible types: int cannot be converted to java.lang.String""") + }, + "should send publishDiagnostics with serverity 1 for Hello.java" + ) + } + test("buildTarget/scalacOptions") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") From 3ce8008ae7d068356cdaef3b9c52ed9b2e4fdcb5 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Fri, 10 Feb 2023 06:19:39 +0000 Subject: [PATCH 017/207] WIP support for `releaseNotesURL` --- main/src/main/scala/sbt/Defaults.scala | 10 ++++++++-- main/src/main/scala/sbt/Keys.scala | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 81aa5e509..d8b51d201 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -200,7 +200,8 @@ object Defaults extends BuildCommon { autoCompilerPlugins :== true, scalaHome :== None, apiURL := None, - javaHome :== None, + releaseNotesURL := None + javaHome :== None, discoveredJavaHomes := CrossJava.discoverJavaHomes, javaHomes :== ListMap.empty, fullJavaHomes := CrossJava.expandJavaHomes(discoveredJavaHomes.value ++ javaHomes.value), @@ -3344,7 +3345,12 @@ object Classpaths { p1.extra(SbtPomExtraProperties.VERSION_SCHEME_KEY -> x) case _ => p1 } - p2 + val p3 = releaseNotesURL.value match { + case Some(u) => + p1.extra("info.releaseNotesUrl" -> u.toExternalForm) + case _ => p2 + } + p3 } def pluginProjectID: Initialize[ModuleID] = Def.setting { diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 10ae7f1b1..65bc3687b 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -346,6 +346,7 @@ object Keys { val entryApiURL = AttributeKey[URL]("entryApiURL", "Base URL for the API documentation for a classpath entry.") val apiMappings = taskKey[Map[File, URL]]("Mappings from classpath entry to API documentation base URL.").withRank(BMinusSetting) val autoAPIMappings = settingKey[Boolean]("If true, automatically manages mappings to the API doc URL.").withRank(BMinusSetting) + val releaseNotesURL = settingKey[Option[URL]]("URL for release notes.").withRank(BMinusSetting) val scmInfo = settingKey[Option[ScmInfo]]("Basic SCM information for the project.").withRank(BMinusSetting) val projectInfo = settingKey[ModuleInfo]("Addition project information like formal name, homepage, licenses etc.").withRank(CSetting) val defaultConfiguration = settingKey[Option[Configuration]]("Defines the configuration used when none is specified for a dependency in ivyXML.").withRank(CSetting) From 3cde7f8e073ae2d9047a9c4a717f8821cf26f41e Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Sun, 12 Feb 2023 23:27:14 +0000 Subject: [PATCH 018/207] Missing comma --- main/src/main/scala/sbt/Defaults.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index d8b51d201..f6a6037fd 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -200,8 +200,8 @@ object Defaults extends BuildCommon { autoCompilerPlugins :== true, scalaHome :== None, apiURL := None, - releaseNotesURL := None - javaHome :== None, + releaseNotesURL := None, + javaHome :== None, discoveredJavaHomes := CrossJava.discoverJavaHomes, javaHomes :== ListMap.empty, fullJavaHomes := CrossJava.expandJavaHomes(discoveredJavaHomes.value ++ javaHomes.value), From 11ea11e382ede393025a8f7b86d0ff7927122f3a Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Sun, 12 Feb 2023 22:54:19 -0800 Subject: [PATCH 019/207] Fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marco Zühlke --- main/src/main/scala/sbt/Defaults.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index f6a6037fd..e8925e217 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -3347,7 +3347,7 @@ object Classpaths { } val p3 = releaseNotesURL.value match { case Some(u) => - p1.extra("info.releaseNotesUrl" -> u.toExternalForm) + p2.extra("info.releaseNotesUrl" -> u.toExternalForm) case _ => p2 } p3 From f9637e047f6cad54f4f3ec06c68d135d52e4fe62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Feb 2023 04:56:46 +0000 Subject: [PATCH 020/207] Bump olafurpg/setup-scala from 13 to 14 Bumps [olafurpg/setup-scala](https://github.com/olafurpg/setup-scala) from 13 to 14. - [Release notes](https://github.com/olafurpg/setup-scala/releases) - [Commits](https://github.com/olafurpg/setup-scala/compare/v13...v14) --- updated-dependencies: - dependency-name: olafurpg/setup-scala dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b7664a12f..41a6982d1 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -40,7 +40,7 @@ jobs: ref: develop path: zinc - name: Setup - uses: olafurpg/setup-scala@v13 + uses: olafurpg/setup-scala@v14 with: java-version: "adopt@1.${{ matrix.java }}" - name: Coursier cache From 8e4e2067fc4415f9df0d0c672d29241a20fd5f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Zu=CC=88hlke?= Date: Mon, 20 Feb 2023 21:14:51 +0100 Subject: [PATCH 021/207] Replace olafurpg/setup-scala with actions/setup-java https://github.com/olafurpg/setup-scala/releases/tag/v14 is deprecated and migration to actions/setup-java is encouraged. That action is already used in `ci.yml` --- .github/workflows/nightly.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 41a6982d1..500f02eaa 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -15,6 +15,7 @@ jobs: include: - os: ubuntu-latest java: 8 + distribution: adopt runs-on: ${{ matrix.os }} env: JAVA_OPTS: -Xms800M -Xmx800M -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 @@ -39,10 +40,11 @@ jobs: repository: sbt/zinc ref: develop path: zinc - - name: Setup - uses: olafurpg/setup-scala@v14 + - name: Setup JDK + uses: actions/setup-java@v3 with: - java-version: "adopt@1.${{ matrix.java }}" + distribution: "${{ matrix.distribution }}" + java-version: "${{ matrix.java }}" - name: Coursier cache uses: coursier/cache-action@v6 - name: Build and deploy From 8e64caae8f01283cbfaa1df8761265c7d8f3c49b Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 15 Dec 2022 13:44:11 +0100 Subject: [PATCH 022/207] Add scripted to test the sbt plugin resolution As of sbt 1.9, we publish deprecated and valid poms. In this test we check that sbt resolve the valid pom of an sbt plugin and fallback to the deprecated pom if the valid pom cannot be found. --- .../sbt-plugin-diamond/build.sbt | 105 ++++++++++++++++++ .../sbt-plugin-diamond/test | 12 ++ 2 files changed, 117 insertions(+) create mode 100644 sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt create mode 100644 sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt new file mode 100644 index 000000000..1a33daa26 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt @@ -0,0 +1,105 @@ +// sbt-plugin-example-diamond is a diamond graph of dependencies of sbt plugins. +// sbt-plugin-example-diamond +// / \ +// sbt-plugin-example-left sbt-plugin-example-right +// \ / +// sbt-plugin-example-bottom +// Depending on the version of sbt-plugin-example-diamond, we test different patterns +// of dependencies: +// * Some dependencies were published using the deprecated Maven paths, some with the new +// * Wheter the dependency on sbt-plugin-example-bottom needs conflict resolution or not + +inThisBuild( + Seq( + csrCacheDirectory := baseDirectory.value / "coursier-cache" + ) +) + +// only deprecated Maven paths +lazy val v1 = project + .in(file("v1")) + .settings( + localCache, + addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.1.0"), + checkUpdate := checkUpdateDef( + "sbt-plugin-example-diamond-0.1.0.jar", + "sbt-plugin-example-left-0.1.0.jar", + "sbt-plugin-example-right-0.1.0.jar", + "sbt-plugin-example-bottom-0.1.0.jar", + ).value + ) + +// diamond and left use the new Maven paths +lazy val v2 = project + .in(file("v2")) + .settings( + localCache, + addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.2.0"), + checkUpdate := checkUpdateDef( + "sbt-plugin-example-diamond_2.12_1.0-0.2.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.2.0.jar", + "sbt-plugin-example-right-0.1.0.jar", + "sbt-plugin-example-bottom-0.1.0.jar", + ).value + ) + +// conflict resolution on bottom between new and deprecated Maven paths +lazy val v3 = project + .in(file("v3")) + .settings( + localCache, + addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.3.0"), + checkUpdate := checkUpdateDef( + "sbt-plugin-example-diamond_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-right-0.1.0.jar", + "sbt-plugin-example-bottom_2.12_1.0-0.2.0.jar", + ).value + ) + +// right still uses the deprecated Maven path and it depends on bottom +// which uses the new Maven path +lazy val v4 = project + .in(file("v4")) + .settings( + localCache, + addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.4.0"), + checkUpdate := checkUpdateDef( + "sbt-plugin-example-diamond_2.12_1.0-0.4.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-right-0.2.0.jar", + "sbt-plugin-example-bottom_2.12_1.0-0.2.0.jar", + ).value + ) + +// only new Maven paths with conflict resolution on bottom +lazy val v5 = project + .in(file("v5")) + .settings( + localCache, + addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.5.0"), + checkUpdate := checkUpdateDef( + "sbt-plugin-example-diamond_2.12_1.0-0.5.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-right_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-bottom_2.12_1.0-0.3.0.jar", + ).value + ) + +def localCache = + ivyPaths := IvyPaths(baseDirectory.value, Some((ThisBuild / baseDirectory).value / "ivy-cache")) + +lazy val checkUpdate = taskKey[Unit]("check the resolved artifacts") + +def checkUpdateDef(expected: String*): Def.Initialize[Task[Unit]] = Def.task { + val report = update.value + val obtainedFiles = report.configurations + .find(_.configuration.name == Compile.name) + .toSeq + .flatMap(_.modules) + .flatMap(_.artifacts) + .map(_._2) + val obtainedSet = obtainedFiles.map(_.getName).toSet + val expectedSet = expected.toSet + "scala-library.jar" + assert(obtainedSet == expectedSet, obtainedFiles) +} diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test new file mode 100644 index 000000000..2ba8a5cca --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test @@ -0,0 +1,12 @@ +> v1/checkUpdate +> v2/checkUpdate +> v3/checkUpdate +> v4/checkUpdate +> v5/checkUpdate + +> set ThisBuild/useCoursier:=true +> v1/checkUpdate +> v2/checkUpdate +> v3/checkUpdate +> v4/checkUpdate +> v5/checkUpdate From 8020ec4d7cc1efc5275375e9a9585ecc18a213b4 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 19 Dec 2022 17:17:22 +0100 Subject: [PATCH 023/207] Smooth transition to valid Maven pattern of sbt plugin For an sbt plugin, we publish two POM files, the legacy one, and the new Maven compatible one. The name of the new POM file contains the sbt cross-version _2.12_1.0. The format of the new POM file is also slightly different, because we append the sbt cross-version to all artifactIds of sbt plugins. Hence Maven can resolve the new sbt plugin POM and its dependencies. When resolving an sbt plugin, we first try to resolve the new Maven POM and if it fails we fallback on the legacy one. When parsing the new POM format, we remove the sbt cross-version from all artifact IDs so that there is no mismatch between old and new format of dependencies. --- main/src/main/scala/sbt/Defaults.scala | 45 ++++++- .../sbt-plugin-diamond/test | 22 ++-- .../sbt-plugin-publish/build.sbt | 122 ++++++++++++++++++ .../sbt-plugin-publish/test | 11 ++ 4 files changed, 188 insertions(+), 12 deletions(-) create mode 100644 sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt create mode 100644 sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 81aa5e509..5c02b1a52 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2827,9 +2827,52 @@ object Classpaths { val jvmPublishSettings: Seq[Setting[_]] = Seq( artifacts := artifactDefs(defaultArtifactTasks).value, - packagedArtifacts := packaged(defaultArtifactTasks).value + packagedArtifacts := packaged(defaultArtifactTasks).value ++ + Def + .ifS(sbtPlugin.toTask)(mavenArtifactsOfSbtPlugin)(Def.task(Map.empty[Artifact, File])) + .value ) ++ RemoteCache.projectSettings + /** + * Produces the Maven-compatible artifacts of an sbt plugin. + * It adds the sbt-cross version suffix into the artifact names, and it generates a + * valid POM file, that is a POM file that Maven can resolve. + */ + private def mavenArtifactsOfSbtPlugin: Def.Initialize[Task[Map[Artifact, File]]] = + Def.ifS(publishMavenStyle.toTask)(Def.task { + val crossVersion = sbtCrossVersion.value + val legacyArtifact = (makePom / artifact).value + val pom = makeMavenPomOfSbtPlugin.value + val legacyPackages = packaged(defaultPackages).value + + def addSuffix(a: Artifact): Artifact = a.withName(crossVersion(a.name)) + val packages = legacyPackages.map { case (artifact, file) => addSuffix(artifact) -> file } + packages + (addSuffix(legacyArtifact) -> pom) + })(Def.task(Map.empty)) + + private def sbtCrossVersion: Def.Initialize[String => String] = Def.setting { + val sbtV = sbtBinaryVersion.value + val scalaV = scalaBinaryVersion.value + name => name + s"_${scalaV}_$sbtV" + } + + /** + * Generates a POM file that Maven can resolve. + * It appends the sbt cross version into all artifactIds of sbt plugins + * (the main one and the dependencies). + */ + private def makeMavenPomOfSbtPlugin: Def.Initialize[Task[File]] = Def.task { + val config = makePomConfiguration.value + val nameWithCross = sbtCrossVersion.value(artifact.value.name) + val version = Keys.version.value + val pomFile = config.file.get.getParentFile / s"$nameWithCross-$version.pom" + val publisher = Keys.publisher.value + val ivySbt = Keys.ivySbt.value + val module = new ivySbt.Module(moduleSettings.value, appendSbtCrossVersion = true) + publisher.makePomFile(module, config.withFile(pomFile), streams.value.log) + pomFile + } + val ivyPublishSettings: Seq[Setting[_]] = publishGlobalDefaults ++ Seq( artifacts :== Nil, packagedArtifacts :== Map.empty, diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test index 2ba8a5cca..32fc99ced 100644 --- a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test @@ -1,12 +1,12 @@ -> v1/checkUpdate -> v2/checkUpdate -> v3/checkUpdate -> v4/checkUpdate -> v5/checkUpdate +> v1 / checkUpdate +> v2 / checkUpdate +> v3 / checkUpdate +> v4 / checkUpdate +> v5 / checkUpdate -> set ThisBuild/useCoursier:=true -> v1/checkUpdate -> v2/checkUpdate -> v3/checkUpdate -> v4/checkUpdate -> v5/checkUpdate +> set ThisBuild / useCoursier:=false +> v1 / checkUpdate +> v2 / checkUpdate +> v3 / checkUpdate +> v4 / checkUpdate +> v5 / checkUpdate diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt new file mode 100644 index 000000000..bc05305f8 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt @@ -0,0 +1,122 @@ +import scala.util.matching.Regex + +lazy val repo = file("test-repo") +lazy val resolver = Resolver.file("test-repo", repo) + +lazy val example = project.in(file("example")) + .enablePlugins(SbtPlugin) + .settings( + organization := "org.example", + addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.5.0"), + publishTo := Some(resolver), + checkPackagedArtifacts := checkPackagedArtifactsDef.value, + checkPublish := checkPublishDef.value + ) + +lazy val testMaven = project.in(file("test-maven")) + .settings( + addSbtPlugin("org.example" % "example" % "0.1.0-SNAPSHOT"), + externalResolvers -= Resolver.defaultLocal, + resolvers += { + val base = (ThisBuild / baseDirectory).value + MavenRepository("test-repo", s"file://$base/test-repo") + }, + checkUpdate := checkUpdateDef( + "example_2.12_1.0-0.1.0-SNAPSHOT.jar", + "sbt-plugin-example-diamond_2.12_1.0-0.5.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-right_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-bottom_2.12_1.0-0.3.0.jar", + ).value + ) + +lazy val testLocal = project.in(file("test-local")) + .settings( + addSbtPlugin("org.example" % "example" % "0.1.0-SNAPSHOT"), + checkUpdate := checkUpdateDef( + "example.jar", // resolved from local repository + "sbt-plugin-example-diamond_2.12_1.0-0.5.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-right_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-bottom_2.12_1.0-0.3.0.jar", + ).value + ) + +lazy val checkPackagedArtifacts = taskKey[Unit]("check the packaged artifacts") +lazy val checkPublish = taskKey[Unit]("check publish") +lazy val checkUpdate = taskKey[Unit]("check update") + +def checkPackagedArtifactsDef: Def.Initialize[Task[Unit]] = Def.task { + val packagedArtifacts = Keys.packagedArtifacts.value + val deprecatedArtifacts = packagedArtifacts.keys.filter(a => a.name == "example") + assert(deprecatedArtifacts.size == 4) + + val artifactsWithCrossVersion = packagedArtifacts.keys.filter(a => a.name == "example_2.12_1.0") + assert(artifactsWithCrossVersion.size == 4) + + val deprecatedPom = deprecatedArtifacts.find(_.`type` == "pom") + assert(deprecatedPom.isDefined) + val deprecatedPomContent = IO.read(packagedArtifacts(deprecatedPom.get)) + assert(deprecatedPomContent.contains(s"example")) + assert(deprecatedPomContent.contains(s"sbt-plugin-example-diamond")) + + val pomWithCrossVersion = artifactsWithCrossVersion.find(_.`type` == "pom") + assert(pomWithCrossVersion.isDefined) + val pomContent = IO.read(packagedArtifacts(pomWithCrossVersion.get)) + assert(pomContent.contains(s"example_2.12_1.0")) + assert(pomContent.contains(s"sbt-plugin-example-diamond_2.12_1.0")) +} + +def checkPublishDef: Def.Initialize[Task[Unit]] = Def.task { + val _ = publish.value + val org = organization.value + val files = IO.listFiles(repo / org.replace('.', '/') / "example_2.12_1.0" / "0.1.0-SNAPSHOT") + + assert(files.nonEmpty) + + val Deprecated = s"example-${Regex.quote("0.1.0-SNAPSHOT")}(-javadoc|-sources)?(\\.jar|\\.pom)".r + val WithCrossVersion = s"example${Regex.quote("_2.12_1.0")}-${Regex.quote("0.1.0-SNAPSHOT")}(-javadoc|-sources)?(\\.jar|\\.pom)".r + + val deprecatedJars = files.map(_.name).collect { case jar @ Deprecated(_, ".jar") => jar } + assert(deprecatedJars.size == 3, deprecatedJars.mkString(", ")) // bin, sources and javadoc + + val jarsWithCrossVersion = files.map(_.name).collect { case jar @ WithCrossVersion(_, ".jar") => jar } + assert(jarsWithCrossVersion.size == 3, jarsWithCrossVersion.mkString(", ")) // bin, sources and javadoc + + val deprecatedPom = files + .find { file => + file.name match { + case pom @ Deprecated(_, ".pom") => true + case _ => false + } + } + assert(deprecatedPom.isDefined, "missing deprecated pom") + val deprecatedPomContent = IO.read(deprecatedPom.get) + assert(deprecatedPomContent.contains(s"example")) + assert(deprecatedPomContent.contains(s"sbt-plugin-example-diamond")) + + val pomWithCrossVersion = files + .find { file => + file.name match { + case pom @ WithCrossVersion(_, ".pom") => true + case _ => false + } + } + assert(pomWithCrossVersion.isDefined, "missing pom with sbt cross-version _2.12_1.0") + val pomContent = IO.read(pomWithCrossVersion.get) + assert(pomContent.contains(s"example_2.12_1.0")) + assert(pomContent.contains(s"sbt-plugin-example-diamond_2.12_1.0")) +} + +def checkUpdateDef(expected: String*): Def.Initialize[Task[Unit]] = Def.task { + val report = update.value + val obtainedFiles = report.configurations + .find(_.configuration.name == Compile.name) + .toSeq + .flatMap(_.modules) + .flatMap(_.artifacts) + .map(_._2) + val obtainedSet = obtainedFiles.map(_.getName).toSet + val expectedSet = expected.toSet + "scala-library.jar" + assert(obtainedSet == expectedSet, obtainedFiles) +} diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test new file mode 100644 index 000000000..ec720452b --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test @@ -0,0 +1,11 @@ +> example / checkPackagedArtifacts + +> example / checkPublish +> testMaven / checkUpdate +> set testMaven / useCoursier := false +> testMaven / checkUpdate + +> example / publishLocal +> testLocal / checkUpdate +> set testLocal / useCoursier := false +> testLocal / checkUpdate From d05913f3b94658bcb019b8c800f8214a59295735 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 22 Feb 2023 09:37:51 +0100 Subject: [PATCH 024/207] Bump lm-coursier-shaded to 2.0.16 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c25f2dcbd..ac2368e46 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.15" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.16" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From ada716fc1f942996c3c0c7f7d86d6af08150034f Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 27 Feb 2023 09:42:36 +0100 Subject: [PATCH 025/207] Bump librarymanagement to 1.9.0-M1 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index ac2368e46..afacaf68c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,7 +14,7 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.8.0") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.8.0") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M1") val zincVersion = nightlyVersion.getOrElse("1.8.0") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From c13e05a493659a3b87d2599febe8bee4700d1bcc Mon Sep 17 00:00:00 2001 From: Vedant <83997633+vedantmgoyal2009@users.noreply.github.com> Date: Mon, 27 Feb 2023 14:57:36 +0530 Subject: [PATCH 026/207] Create winget.yml --- .github/workflows/winget.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/workflows/winget.yml diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml new file mode 100644 index 000000000..95640dd33 --- /dev/null +++ b/.github/workflows/winget.yml @@ -0,0 +1,12 @@ +name: Publish to WinGet +on: + release: + types: [released] +jobs: + publish: + runs-on: windows-latest # action can only be run on windows + steps: + - uses: vedantmgoyal2009/winget-releaser@v2 + with: + identifier: sbt.sbt + token: ${{ secrets.WINGET_TOKEN }} From ed29e35f410879432027f9688a35e9e6d00e6db5 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Tue, 28 Feb 2023 06:08:13 +0000 Subject: [PATCH 027/207] Bump lm, use release notes key --- main/src/main/scala/sbt/Defaults.scala | 2 +- .../scala/sbt/coursierint/CoursierInputsTasks.scala | 13 +++++++++++-- project/Dependencies.scala | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index e8925e217..966df3818 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -3347,7 +3347,7 @@ object Classpaths { } val p3 = releaseNotesURL.value match { case Some(u) => - p2.extra("info.releaseNotesUrl" -> u.toExternalForm) + p2.extra(SbtPomExtraProperties.POM_RELEASE_NOTES_KEY -> u.toExternalForm) case _ => p2 } p3 diff --git a/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala index 9059f36ef..70b7f2ffc 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala @@ -45,6 +45,7 @@ object CoursierInputsTasks { sv: String, sbv: String, auOpt: Option[URL], + rnOpt: Option[URL], description: String, homepage: Option[URL], vsOpt: Option[String], @@ -70,8 +71,15 @@ object CoursierInputsTasks { proj1.withProperties(proj1.properties :+ (SbtPomExtraProperties.VERSION_SCHEME_KEY -> vs)) case _ => proj1 } - proj2.withInfo( - proj2.info.withDescription(description).withHomePage(homepage.fold("")(_.toString)) + val proj3 = rnOpt match { + case Some(rn) => + proj2.withProperties( + proj2.properties :+ (SbtPomExtraProperties.POM_RELEASE_NOTES_KEY -> rn.toString) + ) + case _ => proj2 + } + proj3.withInfo( + proj3.info.withDescription(description).withHomePage(homepage.fold("")(_.toString)) ) } @@ -84,6 +92,7 @@ object CoursierInputsTasks { scalaVersion.value, scalaBinaryVersion.value, apiURL.value, + releaseNotesURL.value, description.value, homepage.value, versionScheme.value, diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c25f2dcbd..7d7690d0d 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,7 +14,7 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.8.0") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.8.0") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M1") val zincVersion = nightlyVersion.getOrElse("1.8.0") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 1a2b2467b4a0ae9100b9adbdb254fbe084dbcadd Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Tue, 28 Feb 2023 18:05:27 +0000 Subject: [PATCH 028/207] Add test for `releaseNotesURL` --- .../src/sbt-test/dependency-management/make-pom/build.sbt | 7 +++++++ sbt-app/src/sbt-test/dependency-management/make-pom/test | 1 + 2 files changed, 8 insertions(+) diff --git a/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt b/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt index f0bfc1f18..458204b33 100644 --- a/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt @@ -5,7 +5,9 @@ lazy val root = (project in file(".")) settings ( TaskKey[Unit]("checkPom") := checkPom.value, TaskKey[Unit]("checkExtra") := checkExtra.value, TaskKey[Unit]("checkVersionPlusMapping") := checkVersionPlusMapping.value, + TaskKey[Unit]("checkReleaseNotesURL") := checkReleaseNotesURL.value, resolvers += Resolver.sonatypeRepo("snapshots"), + releaseNotesURL := Some(url("https://github.com/sbt/sbt/releases")), makePomConfiguration := { val p = makePomConfiguration.value p.withExtra() @@ -46,6 +48,11 @@ lazy val checkVersionPlusMapping = (readPom) map { (pomXml) => () } +lazy val checkReleaseNotesURL = (readPom) map { (pomXml) => + val notes = pomXml \ "properties" \ "info.releaseNotesUrl" + if (notes.isEmpty) sys.error("'releaseNotesUrl' not found in generated pom.xml.") else () +} + lazy val checkPom = Def task { val pomXML = readPom.value checkProject(pomXML) diff --git a/sbt-app/src/sbt-test/dependency-management/make-pom/test b/sbt-app/src/sbt-test/dependency-management/make-pom/test index 1e92792f9..409db17a2 100644 --- a/sbt-app/src/sbt-test/dependency-management/make-pom/test +++ b/sbt-app/src/sbt-test/dependency-management/make-pom/test @@ -1,3 +1,4 @@ > checkPom > checkExtra > checkVersionPlusMapping +> checkReleaseNotesURL From 414c3a4358d2da7fe67b4846ab6ba06552a1f6ff Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Tue, 28 Feb 2023 18:08:29 +0000 Subject: [PATCH 029/207] Add test for `apiURL` --- .../src/sbt-test/dependency-management/make-pom/build.sbt | 7 +++++++ sbt-app/src/sbt-test/dependency-management/make-pom/test | 1 + 2 files changed, 8 insertions(+) diff --git a/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt b/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt index 458204b33..03d7f883b 100644 --- a/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt @@ -5,8 +5,10 @@ lazy val root = (project in file(".")) settings ( TaskKey[Unit]("checkPom") := checkPom.value, TaskKey[Unit]("checkExtra") := checkExtra.value, TaskKey[Unit]("checkVersionPlusMapping") := checkVersionPlusMapping.value, + TaskKey[Unit]("checkAPIURL") := checkAPIURL.value, TaskKey[Unit]("checkReleaseNotesURL") := checkReleaseNotesURL.value, resolvers += Resolver.sonatypeRepo("snapshots"), + apiURL := Some(url("https://www.scala-sbt.org/1.x/api/")), releaseNotesURL := Some(url("https://github.com/sbt/sbt/releases")), makePomConfiguration := { val p = makePomConfiguration.value @@ -48,6 +50,11 @@ lazy val checkVersionPlusMapping = (readPom) map { (pomXml) => () } +lazy val checkAPIURL = (readPom) map { (pomXml) => + val notes = pomXml \ "properties" \ "info.apiURL" + if (notes.isEmpty) sys.error("'apiURL' not found in generated pom.xml.") else () +} + lazy val checkReleaseNotesURL = (readPom) map { (pomXml) => val notes = pomXml \ "properties" \ "info.releaseNotesUrl" if (notes.isEmpty) sys.error("'releaseNotesUrl' not found in generated pom.xml.") else () diff --git a/sbt-app/src/sbt-test/dependency-management/make-pom/test b/sbt-app/src/sbt-test/dependency-management/make-pom/test index 409db17a2..b6f7bda7d 100644 --- a/sbt-app/src/sbt-test/dependency-management/make-pom/test +++ b/sbt-app/src/sbt-test/dependency-management/make-pom/test @@ -1,4 +1,5 @@ > checkPom > checkExtra > checkVersionPlusMapping +> checkAPIURL > checkReleaseNotesURL From 2a332a56a967a17e69aa3455d9343f2ece8036fe Mon Sep 17 00:00:00 2001 From: Matthew de Detrich Date: Thu, 2 Mar 2023 11:41:20 +0100 Subject: [PATCH 030/207] Make skip work on publishLocal --- main/src/main/scala/sbt/Defaults.scala | 51 +++++++++++++++++++-- main/src/main/scala/sbt/Keys.scala | 2 +- sbt-app/src/sbt-test/project/skip/build.sbt | 20 ++++++++ sbt-app/src/sbt-test/project/skip/test | 1 + 4 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 sbt-app/src/sbt-test/project/skip/build.sbt create mode 100644 sbt-app/src/sbt-test/project/skip/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 5c02b1a52..4c48a9ee4 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2614,6 +2614,7 @@ object Defaults extends BuildCommon { if (turbo.value) ClassLoaderLayeringStrategy.AllLibraryJars else ClassLoaderLayeringStrategy.ScalaLibrary }, + publishLocal / skip := (publish / skip).value, // So we don't break previous behaviour ) // build.sbt is treated a Scala source of metabuild, so to enable deprecation flag on build.sbt we set the option here. lazy val deprecationSettings: Seq[Setting[_]] = @@ -3585,15 +3586,57 @@ object Classpaths { ): Initialize[Task[Unit]] = publishTask(config) + private def logSkipPublish(log: Logger, ref: ProjectRef): Unit = + log.debug(s"Skipping publish* for ${ref.project}") + + private def checkAndPublishLocal( + currentCon: PublishConfiguration, + publishLocalConf: PublishConfiguration, + publishSkipLocal: Boolean, + module: IvySbt#Module, + log: Logger, + ref: ProjectRef + )(notPublishLocal: () => Unit): Unit = { + if (currentCon == publishLocalConf) { + if (publishSkipLocal) { + logSkipPublish(log, ref) + } else { + IvyActions.publish(module, currentCon, log) + } + } else { + notPublishLocal() + } + } + def publishTask(config: TaskKey[PublishConfiguration]): Initialize[Task[Unit]] = Def.taskIf { if ((publish / skip).value) { - val s = streams.value + val log = streams.value.log val ref = thisProjectRef.value - s.log.debug(s"Skipping publish* for ${ref.project}") + checkAndPublishLocal( + config.value, + publishLocalConfiguration.value, + (publishLocal / skip).value, + ivyModule.value, + log, + ref + ) { () => + logSkipPublish(log, ref) + } } else { - val s = streams.value - IvyActions.publish(ivyModule.value, config.value, s.log) + val conf = config.value + val log = streams.value.log + val module = ivyModule.value + checkAndPublishLocal( + conf, + publishLocalConfiguration.value, + (publishLocal / skip).value, + module, + log, + thisProjectRef.value + ) { () => + IvyActions.publish(module, conf, log) + } } } tag (Tags.Publish, Tags.Network) diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 10ae7f1b1..c4b27364f 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -566,7 +566,7 @@ object Keys { val sbtDependency = settingKey[ModuleID]("Provides a definition for declaring the current version of sbt.").withRank(BMinusSetting) val sbtVersion = settingKey[String]("Provides the version of sbt. This setting should not be modified.").withRank(AMinusSetting) val sbtBinaryVersion = settingKey[String]("Defines the binary compatibility version substring.").withRank(BPlusSetting) - val skip = taskKey[Boolean]("For tasks that support it (currently only 'compile', 'update', and 'publish'), setting skip to true will force the task to not to do its work. This exact semantics may vary by task.").withRank(BSetting) + val skip = taskKey[Boolean]("For tasks that support it (currently only 'compile', 'update', 'publish' and 'publishLocal'), setting skip to true will force the task to not to do its work. This exact semantics may vary by task.").withRank(BSetting) val templateResolverInfos = settingKey[Seq[TemplateResolverInfo]]("Template resolvers used for 'new'.").withRank(BSetting) val interactionService = taskKey[InteractionService]("Service used to ask for user input through the current user interface(s).").withRank(CTask) val insideCI = SettingKey[Boolean]("insideCI", "Determines if the sbt is running in a Continuous Integration environment", AMinusSetting) diff --git a/sbt-app/src/sbt-test/project/skip/build.sbt b/sbt-app/src/sbt-test/project/skip/build.sbt new file mode 100644 index 000000000..72fed351d --- /dev/null +++ b/sbt-app/src/sbt-test/project/skip/build.sbt @@ -0,0 +1,20 @@ +publish / skip := true + +lazy val check = taskKey[Unit]("check") + +lazy val a = project + .in(file("a")) + .settings( + publishLocal / skip := true + ) + +lazy val b = project + .in(file("b")) + +check := { + assert((publishLocal / skip).value, "Expected true, got false") + assert((a / publishLocal / skip).value, "Expected true, got false") + assert(!(a / publish / skip).value, "Expected false, got true") + assert(!(b / publish / skip).value, "Expected false, got true") + assert(!(b / publishLocal / skip).value, "Expected false, got true") +} diff --git a/sbt-app/src/sbt-test/project/skip/test b/sbt-app/src/sbt-test/project/skip/test new file mode 100644 index 000000000..15675b169 --- /dev/null +++ b/sbt-app/src/sbt-test/project/skip/test @@ -0,0 +1 @@ +> check From 714e4175b3e856ca2605d9425cf83dab365b97c6 Mon Sep 17 00:00:00 2001 From: Matthew de Detrich Date: Sat, 4 Mar 2023 09:17:58 +0100 Subject: [PATCH 031/207] Improve grammar on skip key description --- main/src/main/scala/sbt/Keys.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index c4b27364f..6bacd690d 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -566,7 +566,7 @@ object Keys { val sbtDependency = settingKey[ModuleID]("Provides a definition for declaring the current version of sbt.").withRank(BMinusSetting) val sbtVersion = settingKey[String]("Provides the version of sbt. This setting should not be modified.").withRank(AMinusSetting) val sbtBinaryVersion = settingKey[String]("Defines the binary compatibility version substring.").withRank(BPlusSetting) - val skip = taskKey[Boolean]("For tasks that support it (currently only 'compile', 'update', 'publish' and 'publishLocal'), setting skip to true will force the task to not to do its work. This exact semantics may vary by task.").withRank(BSetting) + val skip = taskKey[Boolean]("For tasks that support it (currently only 'compile', 'update', 'publish' and 'publishLocal'), setting skip to true will force the task to not to do its work. The exact semantics may vary depending on the task.").withRank(BSetting) val templateResolverInfos = settingKey[Seq[TemplateResolverInfo]]("Template resolvers used for 'new'.").withRank(BSetting) val interactionService = taskKey[InteractionService]("Service used to ask for user input through the current user interface(s).").withRank(CTask) val insideCI = SettingKey[Boolean]("insideCI", "Determines if the sbt is running in a Continuous Integration environment", AMinusSetting) From da4ce68142d6ff2cd7123e82075dca7d536826d3 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 28 Mar 2023 14:08:15 +0200 Subject: [PATCH 032/207] Fix dead lock between LoggerContext and Terminal --- .../src/main/scala/sbt/util/LoggerContext.scala | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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 0435793dd..194bb2de7 100644 --- a/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala +++ b/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala @@ -9,6 +9,7 @@ package sbt.util import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicBoolean +import java.util.concurrent.atomic.AtomicReference import org.apache.logging.log4j.{ Level => XLevel } import org.apache.logging.log4j.core.{ Appender => XAppender, LoggerContext => XLoggerContext } import org.apache.logging.log4j.core.config.{ AppenderRef, LoggerConfig } @@ -114,28 +115,28 @@ object LoggerContext { } private[util] class LoggerContextImpl extends LoggerContext { private class Log extends MiniLogger { - private val consoleAppenders: java.util.Vector[(Appender, Level.Value)] = - new java.util.Vector + private val consoleAppenders: AtomicReference[Vector[(Appender, Level.Value)]] = + new AtomicReference(Vector.empty) def log(level: Level.Value, message: => String): Unit = { - val toAppend = consoleAppenders.asScala.filter { case (a, l) => level.compare(l) >= 0 } + val toAppend = consoleAppenders.get.filter { case (a, l) => level.compare(l) >= 0 } if (toAppend.nonEmpty) { val m = message toAppend.foreach { case (a, l) => a.appendLog(level, m) } } } def log[T](level: Level.Value, message: ObjectEvent[T]): Unit = { - consoleAppenders.forEach { + consoleAppenders.get.foreach { case (a, l) => if (level.compare(l) >= 0) a.appendObjectEvent(level, message) } } def addAppender(newAppender: (Appender, Level.Value)): Unit = - Util.ignoreResult(consoleAppenders.add(newAppender)) + Util.ignoreResult(consoleAppenders.updateAndGet(_ :+ newAppender)) def clearAppenders(): Unit = { - consoleAppenders.forEach { case (a, _) => a.close() } - consoleAppenders.clear() + consoleAppenders.get.foreach { case (a, _) => a.close() } + consoleAppenders.set(Vector.empty) } - def appenders: Seq[Appender] = consoleAppenders.asScala.map(_._1).toVector + def appenders: Seq[Appender] = consoleAppenders.get.map(_._1) } private[this] val loggers = new ConcurrentHashMap[String, Log] private[this] val closed = new AtomicBoolean(false) From 5436ed5ef8880621bc50d269497eefa05b0faa3a Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 11 Apr 2023 11:43:44 +0200 Subject: [PATCH 033/207] Fix cross-publish sbt plugin to Maven --- main/src/main/scala/sbt/Defaults.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 92add3fb5..53bc0ddbb 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2853,7 +2853,7 @@ object Classpaths { })(Def.task(Map.empty)) private def sbtCrossVersion: Def.Initialize[String => String] = Def.setting { - val sbtV = sbtBinaryVersion.value + val sbtV = (pluginCrossBuild / sbtBinaryVersion).value val scalaV = scalaBinaryVersion.value name => name + s"_${scalaV}_$sbtV" } From 9e0a728c58ee127daccea2f6800f300d0afe2730 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 5 Apr 2023 13:18:28 +0200 Subject: [PATCH 034/207] Add sbtPluginPublishLegacyMavenStyle to publish to Artifactory Artifactory rejects the legacy artifacts of sbt plugin. It is now possible to publish to Artifactory by turning `sbtPluginPublishLegacyMavenStyle` off. --- main/src/main/scala/sbt/Defaults.scala | 22 ++- main/src/main/scala/sbt/Keys.scala | 1 + .../sbt-plugin-publish/build.sbt | 133 +++++++++++------- .../sbt-plugin-publish/test | 26 ++-- 4 files changed, 114 insertions(+), 68 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 92add3fb5..ef66ce012 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2822,17 +2822,20 @@ object Classpaths { Defaults.globalDefaults( Seq( publishMavenStyle :== true, + sbtPluginPublishLegacyMavenStyle := true, publishArtifact :== true, (Test / publishArtifact) :== false ) ) + private val publishSbtPluginMavenStyle = Def.task { + sbtPlugin.value && publishMavenStyle.value + } val jvmPublishSettings: Seq[Setting[_]] = Seq( artifacts := artifactDefs(defaultArtifactTasks).value, - packagedArtifacts := packaged(defaultArtifactTasks).value ++ - Def - .ifS(sbtPlugin.toTask)(mavenArtifactsOfSbtPlugin)(Def.task(Map.empty[Artifact, File])) - .value + packagedArtifacts := Def + .ifS(publishSbtPluginMavenStyle)(mavenArtifactsOfSbtPlugin)(packaged(defaultArtifactTasks)) + .value, ) ++ RemoteCache.projectSettings /** @@ -2841,7 +2844,7 @@ object Classpaths { * valid POM file, that is a POM file that Maven can resolve. */ private def mavenArtifactsOfSbtPlugin: Def.Initialize[Task[Map[Artifact, File]]] = - Def.ifS(publishMavenStyle.toTask)(Def.task { + Def.task { val crossVersion = sbtCrossVersion.value val legacyArtifact = (makePom / artifact).value val pom = makeMavenPomOfSbtPlugin.value @@ -2849,8 +2852,13 @@ object Classpaths { def addSuffix(a: Artifact): Artifact = a.withName(crossVersion(a.name)) val packages = legacyPackages.map { case (artifact, file) => addSuffix(artifact) -> file } - packages + (addSuffix(legacyArtifact) -> pom) - })(Def.task(Map.empty)) + val legacyPackagedArtifacts = Def + .ifS(sbtPluginPublishLegacyMavenStyle.toTask)(packaged(defaultArtifactTasks))( + Def.task(Map.empty[Artifact, File]) + ) + .value + packages + (addSuffix(legacyArtifact) -> pom) ++ legacyPackagedArtifacts + } private def sbtCrossVersion: Def.Initialize[String => String] = Def.setting { val sbtV = sbtBinaryVersion.value diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index cd5b520c0..82d778c2f 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -491,6 +491,7 @@ object Keys { val makeIvyXmlLocalConfiguration = taskKey[PublishConfiguration]("Configuration for generating ivy.xml.").withRank(DSetting) val packagedArtifacts = taskKey[Map[Artifact, File]]("Packages all artifacts for publishing and maps the Artifact definition to the generated file.").withRank(CTask) val publishMavenStyle = settingKey[Boolean]("Configures whether to generate and publish a pom (true) or Ivy file (false).").withRank(BSetting) + val sbtPluginPublishLegacyMavenStyle = settingKey[Boolean]("Configuration for generating the legacy pom of sbt plugins, to publish to Maven").withRank(CSetting) val credentials = taskKey[Seq[Credentials]]("The credentials to use for updating and publishing.").withRank(BMinusTask) val allCredentials = taskKey[Seq[Credentials]]("Aggregated credentials across current and root subprojects. Do not rewire this task.").withRank(DTask) diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt index bc05305f8..27cb09743 100644 --- a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt @@ -3,26 +3,27 @@ import scala.util.matching.Regex lazy val repo = file("test-repo") lazy val resolver = Resolver.file("test-repo", repo) -lazy val example = project.in(file("example")) +lazy val sbtPlugin1 = project.in(file("sbt-plugin-1")) .enablePlugins(SbtPlugin) .settings( organization := "org.example", + name := "sbt-plugin-1", addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.5.0"), publishTo := Some(resolver), - checkPackagedArtifacts := checkPackagedArtifactsDef.value, - checkPublish := checkPublishDef.value + checkPackagedArtifacts := checkPackagedArtifactsDef("sbt-plugin-1", true).value, + checkPublish := checkPublishDef("sbt-plugin-1", true).value ) -lazy val testMaven = project.in(file("test-maven")) +lazy val testMaven1 = project.in(file("test-maven-1")) .settings( - addSbtPlugin("org.example" % "example" % "0.1.0-SNAPSHOT"), + addSbtPlugin("org.example" % "sbt-plugin-1" % "0.1.0-SNAPSHOT"), externalResolvers -= Resolver.defaultLocal, resolvers += { val base = (ThisBuild / baseDirectory).value MavenRepository("test-repo", s"file://$base/test-repo") }, checkUpdate := checkUpdateDef( - "example_2.12_1.0-0.1.0-SNAPSHOT.jar", + "sbt-plugin-1_2.12_1.0-0.1.0-SNAPSHOT.jar", "sbt-plugin-example-diamond_2.12_1.0-0.5.0.jar", "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", "sbt-plugin-example-right_2.12_1.0-0.3.0.jar", @@ -30,11 +31,41 @@ lazy val testMaven = project.in(file("test-maven")) ).value ) -lazy val testLocal = project.in(file("test-local")) +lazy val testLocal1 = project.in(file("test-local-1")) .settings( - addSbtPlugin("org.example" % "example" % "0.1.0-SNAPSHOT"), + addSbtPlugin("org.example" % "sbt-plugin-1" % "0.1.0-SNAPSHOT"), checkUpdate := checkUpdateDef( - "example.jar", // resolved from local repository + "sbt-plugin-1.jar", // resolved from local repository + "sbt-plugin-example-diamond_2.12_1.0-0.5.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-right_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-bottom_2.12_1.0-0.3.0.jar", + ).value + ) + +// test publish without legacy Maven artifacts +lazy val sbtPlugin2 = project.in(file("sbt-plugin-2")) + .enablePlugins(SbtPlugin) + .settings( + organization := "org.example", + name := "sbt-plugin-2", + addSbtPlugin("ch.epfl.scala" % "sbt-plugin-example-diamond" % "0.5.0"), + sbtPluginPublishLegacyMavenStyle := false, + publishTo := Some(resolver), + checkPackagedArtifacts := checkPackagedArtifactsDef("sbt-plugin-2", false).value, + checkPublish := checkPublishDef("sbt-plugin-2", false).value, + ) + +lazy val testMaven2 = project.in(file("test-maven-2")) + .settings( + addSbtPlugin("org.example" % "sbt-plugin-2" % "0.1.0-SNAPSHOT"), + externalResolvers -= Resolver.defaultLocal, + resolvers += { + val base = (ThisBuild / baseDirectory).value + MavenRepository("test-repo", s"file://$base/test-repo") + }, + checkUpdate := checkUpdateDef( + "sbt-plugin-2_2.12_1.0-0.1.0-SNAPSHOT.jar", "sbt-plugin-example-diamond_2.12_1.0-0.5.0.jar", "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", "sbt-plugin-example-right_2.12_1.0-0.3.0.jar", @@ -46,65 +77,63 @@ lazy val checkPackagedArtifacts = taskKey[Unit]("check the packaged artifacts") lazy val checkPublish = taskKey[Unit]("check publish") lazy val checkUpdate = taskKey[Unit]("check update") -def checkPackagedArtifactsDef: Def.Initialize[Task[Unit]] = Def.task { +def checkPackagedArtifactsDef(artifactName: String, withLegacy: Boolean): Def.Initialize[Task[Unit]] = Def.task { val packagedArtifacts = Keys.packagedArtifacts.value - val deprecatedArtifacts = packagedArtifacts.keys.filter(a => a.name == "example") - assert(deprecatedArtifacts.size == 4) - val artifactsWithCrossVersion = packagedArtifacts.keys.filter(a => a.name == "example_2.12_1.0") + val legacyArtifacts = packagedArtifacts.keys.filter(a => a.name == artifactName) + if (withLegacy) { + assert(legacyArtifacts.size == 4) + val legacyPom = legacyArtifacts.find(_.`type` == "pom") + assert(legacyPom.isDefined) + val legacyPomContent = IO.read(packagedArtifacts(legacyPom.get)) + assert(legacyPomContent.contains(s"$artifactName")) + assert(legacyPomContent.contains(s"sbt-plugin-example-diamond")) + } else { + assert(legacyArtifacts.size == 0) + } + + val artifactsWithCrossVersion = + packagedArtifacts.keys.filter(a => a.name == s"${artifactName}_2.12_1.0") assert(artifactsWithCrossVersion.size == 4) - - val deprecatedPom = deprecatedArtifacts.find(_.`type` == "pom") - assert(deprecatedPom.isDefined) - val deprecatedPomContent = IO.read(packagedArtifacts(deprecatedPom.get)) - assert(deprecatedPomContent.contains(s"example")) - assert(deprecatedPomContent.contains(s"sbt-plugin-example-diamond")) - val pomWithCrossVersion = artifactsWithCrossVersion.find(_.`type` == "pom") assert(pomWithCrossVersion.isDefined) val pomContent = IO.read(packagedArtifacts(pomWithCrossVersion.get)) - assert(pomContent.contains(s"example_2.12_1.0")) + assert(pomContent.contains(s"${artifactName}_2.12_1.0")) assert(pomContent.contains(s"sbt-plugin-example-diamond_2.12_1.0")) } -def checkPublishDef: Def.Initialize[Task[Unit]] = Def.task { +def checkPublishDef(artifactName: String, withLegacy: Boolean): Def.Initialize[Task[Unit]] = Def.task { val _ = publish.value val org = organization.value - val files = IO.listFiles(repo / org.replace('.', '/') / "example_2.12_1.0" / "0.1.0-SNAPSHOT") - + val files = IO.listFiles(repo / org.replace('.', '/') / s"${artifactName}_2.12_1.0" / "0.1.0-SNAPSHOT") + val logger = streams.value.log + assert(files.nonEmpty) - val Deprecated = s"example-${Regex.quote("0.1.0-SNAPSHOT")}(-javadoc|-sources)?(\\.jar|\\.pom)".r - val WithCrossVersion = s"example${Regex.quote("_2.12_1.0")}-${Regex.quote("0.1.0-SNAPSHOT")}(-javadoc|-sources)?(\\.jar|\\.pom)".r + val legacyRegex = + s"$artifactName-${Regex.quote("0.1.0-SNAPSHOT")}(-javadoc|-sources)?(\\.jar|\\.pom)".r + val legacyArtifacts = files.filter(f => legacyRegex.unapplySeq(f.name).isDefined) + if (withLegacy) { + val legacyJars = legacyArtifacts.map(_.name).filter(_.endsWith(".jar")) + assert(legacyJars.size == 3, legacyJars.mkString(", ")) // bin, sources and javadoc + val legacyPom = legacyArtifacts.find(_.name.endsWith(".pom")) + assert(legacyPom.isDefined, "missing legacy pom") + val legacyPomContent = IO.read(legacyPom.get) + assert(legacyPomContent.contains(s"$artifactName")) + assert(legacyPomContent.contains(s"sbt-plugin-example-diamond")) + } else { + assert(legacyArtifacts.size == 0) + } - val deprecatedJars = files.map(_.name).collect { case jar @ Deprecated(_, ".jar") => jar } - assert(deprecatedJars.size == 3, deprecatedJars.mkString(", ")) // bin, sources and javadoc - - val jarsWithCrossVersion = files.map(_.name).collect { case jar @ WithCrossVersion(_, ".jar") => jar } + val withCrossVersionRegex = + s"$artifactName${Regex.quote("_2.12_1.0")}-${Regex.quote("0.1.0-SNAPSHOT")}(-javadoc|-sources)?(\\.jar|\\.pom)".r + val artifactWithCrossVersion = files.filter(f => withCrossVersionRegex.unapplySeq(f.name).isDefined) + val jarsWithCrossVersion = artifactWithCrossVersion.map(_.name).filter(_.endsWith(".jar")) assert(jarsWithCrossVersion.size == 3, jarsWithCrossVersion.mkString(", ")) // bin, sources and javadoc - - val deprecatedPom = files - .find { file => - file.name match { - case pom @ Deprecated(_, ".pom") => true - case _ => false - } - } - assert(deprecatedPom.isDefined, "missing deprecated pom") - val deprecatedPomContent = IO.read(deprecatedPom.get) - assert(deprecatedPomContent.contains(s"example")) - assert(deprecatedPomContent.contains(s"sbt-plugin-example-diamond")) - - val pomWithCrossVersion = files - .find { file => - file.name match { - case pom @ WithCrossVersion(_, ".pom") => true - case _ => false - } - } + val pomWithCrossVersion = artifactWithCrossVersion.find(_.name.endsWith(".pom")) assert(pomWithCrossVersion.isDefined, "missing pom with sbt cross-version _2.12_1.0") val pomContent = IO.read(pomWithCrossVersion.get) - assert(pomContent.contains(s"example_2.12_1.0")) + assert(pomContent.contains(s"${artifactName}_2.12_1.0")) assert(pomContent.contains(s"sbt-plugin-example-diamond_2.12_1.0")) } @@ -118,5 +147,5 @@ def checkUpdateDef(expected: String*): Def.Initialize[Task[Unit]] = Def.task { .map(_._2) val obtainedSet = obtainedFiles.map(_.getName).toSet val expectedSet = expected.toSet + "scala-library.jar" - assert(obtainedSet == expectedSet, obtainedFiles) + assert(obtainedSet == expectedSet, obtainedSet) } diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test index ec720452b..e5e7096dd 100644 --- a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test @@ -1,11 +1,19 @@ -> example / checkPackagedArtifacts +> sbtPlugin1 / checkPackagedArtifacts -> example / checkPublish -> testMaven / checkUpdate -> set testMaven / useCoursier := false -> testMaven / checkUpdate +> sbtPlugin1 / checkPublish +> testMaven1 / checkUpdate +> set testMaven1 / useCoursier := false +> testMaven1 / checkUpdate -> example / publishLocal -> testLocal / checkUpdate -> set testLocal / useCoursier := false -> testLocal / checkUpdate +> sbtPlugin1 / publishLocal +> testLocal1 / checkUpdate +> set testLocal1 / useCoursier := false +> testLocal1 / checkUpdate + +> sbtPlugin2 / checkPackagedArtifacts + +# test publish without legacy artifacts and resolve +> sbtPlugin2 / checkPublish +> testMaven2 / checkUpdate +> set testMaven2 / useCoursier := false +> testMaven2 / checkUpdate From 9301bc25891d929fa944c40bbc4189f834f6fd90 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Tue, 18 Apr 2023 15:13:09 +0300 Subject: [PATCH 035/207] Make externalHooks public This key has been added in 4061dabf4d3a999099dc9e93238a9d81e6bc7cfe but it is only available to Sbt itself. Since ExternalHooks is a Java interface, defined in Zinc for a while and fairly stable, I think this should be safe to do. My main motivation is to allow installing an InvalidationProfiler from an Sbt plugin, thus gaining access to zinc recompilation decisions. See related PR https://github.com/sbt/zinc/pull/1181 --- main/src/main/scala/sbt/Keys.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index cd5b520c0..42fbafceb 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -248,7 +248,7 @@ object Keys { val copyResources = taskKey[Seq[(File, File)]]("Copies resources to the output directory.").withRank(AMinusTask) val aggregate = settingKey[Boolean]("Configures task aggregation.").withRank(BMinusSetting) val sourcePositionMappers = taskKey[Seq[xsbti.Position => Option[xsbti.Position]]]("Maps positions in generated source files to the original source it was generated from").withRank(DTask) - private[sbt] val externalHooks = taskKey[ExternalHooks]("The external hooks used by zinc.") + val externalHooks = taskKey[ExternalHooks]("The external hooks used by zinc.") val auxiliaryClassFiles = taskKey[Seq[AuxiliaryClassFiles]]("The auxiliary class files that must be managed by Zinc (for instance the TASTy files)") val fileConverter = settingKey[FileConverter]("The file converter used to convert between Path and VirtualFile") val allowMachinePath = settingKey[Boolean]("Allow machine-specific paths during conversion.") @@ -426,7 +426,7 @@ object Keys { val bspBuildTargetJVMRunEnvironment = inputKey[Unit]("Corresponds to the buildTarget/jvmRunEnvironment request").withRank(DTask) val bspBuildTargetJVMTestEnvironment = inputKey[Unit]("Corresponds to the buildTarget/jvmTestEnvironment request").withRank(DTask) val bspBuildTargetJvmEnvironmentItem = taskKey[JvmEnvironmentItem]("Computes JVM environment item").withRank(DTask) - + val bspScalaTestClasses = inputKey[Unit]("Corresponds to buildTarget/scalaTestClasses request").withRank(DTask) val bspScalaTestClassesItem = taskKey[Seq[ScalaTestClassesItem]]("").withRank(DTask) val bspScalaMainClasses = inputKey[Unit]("Corresponds to buildTarget/scalaMainClasses request").withRank(DTask) From 6dfebc689b074b0da81c51543914048ffda06e71 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Mon, 24 Apr 2023 12:33:09 +0200 Subject: [PATCH 036/207] Add a key for Zinc listeners. Expose what the incremental compiler is doing behind the scenes. The RunProfiler interface has been part of Zinc for a while, but this allows the build itself, or an Sbt plugin, to hook their own implementation. We expose a list of such listeners to avoid plugins stepping on each other and replacing an existing listener. --- main/src/main/scala/sbt/Defaults.scala | 7 ++- main/src/main/scala/sbt/Keys.scala | 3 +- .../sbt/internal/DefaultRunProfiler.scala | 53 +++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 main/src/main/scala/sbt/internal/DefaultRunProfiler.scala diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 92add3fb5..613bdf39e 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -946,11 +946,16 @@ object Defaults extends BuildCommon { compileAnalysisTargetRoot.value / compileAnalysisFilename.value }, externalHooks := IncOptions.defaultExternal, + zincCompilationListeners := Seq.empty, incOptions := { val old = incOptions.value + val extHooks = externalHooks.value + val newExtHooks = extHooks.withInvalidationProfiler( + () => new DefaultRunProfiler(zincCompilationListeners.value) + ) old .withAuxiliaryClassFiles(auxiliaryClassFiles.value.toArray) - .withExternalHooks(externalHooks.value) + .withExternalHooks(newExtHooks) .withClassfileManagerType( Option( TransactionalManagerType diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 42fbafceb..92e0c2b02 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -248,7 +248,8 @@ object Keys { val copyResources = taskKey[Seq[(File, File)]]("Copies resources to the output directory.").withRank(AMinusTask) val aggregate = settingKey[Boolean]("Configures task aggregation.").withRank(BMinusSetting) val sourcePositionMappers = taskKey[Seq[xsbti.Position => Option[xsbti.Position]]]("Maps positions in generated source files to the original source it was generated from").withRank(DTask) - val externalHooks = taskKey[ExternalHooks]("The external hooks used by zinc.") + private[sbt] val externalHooks = taskKey[ExternalHooks]("The external hooks used by zinc.") + val zincCompilationListeners = settingKey[Seq[RunProfiler]]("Listeners that receive information about incremental compiler decisions.").withRank(DSetting) val auxiliaryClassFiles = taskKey[Seq[AuxiliaryClassFiles]]("The auxiliary class files that must be managed by Zinc (for instance the TASTy files)") val fileConverter = settingKey[FileConverter]("The file converter used to convert between Path and VirtualFile") val allowMachinePath = settingKey[Boolean]("Allow machine-specific paths during conversion.") diff --git a/main/src/main/scala/sbt/internal/DefaultRunProfiler.scala b/main/src/main/scala/sbt/internal/DefaultRunProfiler.scala new file mode 100644 index 000000000..8878729af --- /dev/null +++ b/main/src/main/scala/sbt/internal/DefaultRunProfiler.scala @@ -0,0 +1,53 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt.internal + +import xsbti.VirtualFileRef +import xsbti.compile.{ APIChange, InitialChanges, RunProfiler } + +class DefaultRunProfiler(profilers: Seq[RunProfiler]) extends RunProfiler { + override def timeCompilation(startNanos: Long, durationNanos: Long): Unit = + profilers.foreach(_.timeCompilation(startNanos, durationNanos)) + + override def registerInitial(changes: InitialChanges): Unit = + profilers.foreach(_.registerInitial(changes)) + + override def registerEvent( + kind: String, + inputs: Array[String], + outputs: Array[String], + reason: String + ): Unit = + profilers.foreach(_.registerEvent(kind, inputs, outputs, reason)) + + override def registerCycle( + invalidatedClasses: Array[String], + invalidatedPackageObjects: Array[String], + initialSources: Array[VirtualFileRef], + invalidatedSources: Array[VirtualFileRef], + recompiledClasses: Array[String], + changesAfterRecompilation: Array[APIChange], + nextInvalidations: Array[String], + shouldCompileIncrementally: Boolean + ): Unit = + profilers.foreach( + _.registerCycle( + invalidatedClasses, + invalidatedPackageObjects, + initialSources, + invalidatedSources, + recompiledClasses, + changesAfterRecompilation, + nextInvalidations, + shouldCompileIncrementally + ) + ) + + override def registerRun(): Unit = + profilers.foreach(_.registerRun()) +} From 80fe18427372281bc931f7b13942d5084dbc4e61 Mon Sep 17 00:00:00 2001 From: Liang Yan Date: Thu, 9 Mar 2023 14:48:58 +0800 Subject: [PATCH 037/207] Update usage info in sbt for java-home Signed-off-by: Liang Yan --- sbt | 1 - 1 file changed, 1 deletion(-) diff --git a/sbt b/sbt index 209d35e4d..23c412b86 100755 --- a/sbt +++ b/sbt @@ -573,7 +573,6 @@ Usage: `basename "$0"` [options] --sbt-version use the specified version of sbt --sbt-jar use the specified jar as the sbt launcher - # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) --java-home alternate JAVA_HOME # jvm options and output control From 5c8826a394b1d8cbd63a0e27ad4dd4a7a151dfbf Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 29 Apr 2023 22:07:08 -0400 Subject: [PATCH 038/207] Update to launcher 1.4.2 --- project/Dependencies.scala | 2 +- project/build.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index afacaf68c..53716d5ae 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -22,7 +22,7 @@ object Dependencies { private val libraryManagementCore = "org.scala-sbt" %% "librarymanagement-core" % lmVersion private val libraryManagementIvy = "org.scala-sbt" %% "librarymanagement-ivy" % lmVersion - val launcherVersion = "1.4.1" + val launcherVersion = "1.4.2" val launcherInterface = "org.scala-sbt" % "launcher-interface" % launcherVersion val rawLauncher = "org.scala-sbt" % "launcher" % launcherVersion val testInterface = "org.scala-sbt" % "test-interface" % "1.0" diff --git a/project/build.properties b/project/build.properties index 563a014da..46e43a97e 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.7.2 +sbt.version=1.8.2 From 7dd69e702b0c453649618d8ac1fcecef8a96086a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 29 Apr 2023 23:10:35 -0400 Subject: [PATCH 039/207] Update to lm-coursier-shaded 2.1.0 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 53716d5ae..59694686b 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.16" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.0" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From f98c4fff3bb555f65855a13c009a09cda7686a31 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 30 Apr 2023 00:56:11 -0400 Subject: [PATCH 040/207] Update modules --- .../src/main/scala/sbt/plugins/DependencyTreePlugin.scala | 3 +++ .../src/test/scala/sbt/BuildSettingsInstances.scala | 1 + main/src/main/scala/sbt/Defaults.scala | 1 + main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala | 2 ++ project/Dependencies.scala | 6 +++--- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala b/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala index 1fbaabd70..a6debd947 100644 --- a/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala +++ b/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala @@ -8,11 +8,14 @@ package sbt package plugins +import scala.annotation.nowarn + object DependencyTreePlugin extends AutoPlugin { object autoImport extends DependencyTreeKeys override def trigger = AllRequirements override def requires = MiniDependencyTreePlugin + @nowarn val configurations = Vector(Compile, Test, IntegrationTest, Runtime, Provided, Optional) // MiniDependencyTreePlugin provides baseBasicReportingSettings for Compile and Test diff --git a/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala b/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala index 313459dbb..9ce456b64 100644 --- a/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala +++ b/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala @@ -53,6 +53,7 @@ object BuildSettingsInstances { ) } + @nowarn implicit def arbConfigKey: Arbitrary[ConfigKey] = Arbitrary { Gen.frequency( 2 -> const[ConfigKey](Compile), diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 123208342..7af7c122d 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2602,6 +2602,7 @@ object Defaults extends BuildCommon { lazy val testSettings: Seq[Setting[_]] = configSettings ++ testTasks + @nowarn lazy val itSettings: Seq[Setting[_]] = inConfig(IntegrationTest) { testSettings } diff --git a/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala b/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala index 2e194cc3f..95da705df 100644 --- a/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala +++ b/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala @@ -18,6 +18,7 @@ import sbt.Project.inConfig import sbt.internal._ import sbt.io.syntax._ import sbt.librarymanagement.Configurations.{ IntegrationTest, Test } +import scala.annotation.nowarn /** * An experimental plugin that adds the ability for junit-xml to be generated. @@ -50,6 +51,7 @@ object JUnitXmlReportPlugin extends AutoPlugin { import autoImport._ + @nowarn override lazy val projectSettings: Seq[Setting[_]] = inConfig(Test)(testReportSettings) ++ inConfig(IntegrationTest)(testReportSettings) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 59694686b..e2d766f83 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,10 +12,10 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.8.0") + private val ioVersion = nightlyVersion.getOrElse("1.9.0-M1") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M1") - val zincVersion = nightlyVersion.getOrElse("1.8.0") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M2") + val zincVersion = nightlyVersion.getOrElse("1.9.0-M2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From e59074046738aebf72a169ffdc315f7db97eb3f3 Mon Sep 17 00:00:00 2001 From: yoshinorin Date: Mon, 1 May 2023 00:01:08 +0900 Subject: [PATCH 041/207] Use `sonatypeOssRepos` instead of `sonatypeRepo` --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 6bd6e6fb8..f832de2a1 100644 --- a/build.sbt +++ b/build.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, From a033c37d6e2c3712760c9a373f9e81f5c2c09981 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 30 Apr 2023 23:36:06 -0400 Subject: [PATCH 042/207] sbt new, a text-based adventure **Problem** You want to get started with sbt, and you don't know which template to get started with. **Solution** This implements an interactive menu on `sbt new` command when invoked without an argument to list template candidates. The first option is `scala/toolkit.local`, which locally creates an sbt build without calling out to Giter8 (GitHub). --- main/src/main/resources/MUnitSuite.scala.txt | 8 + main/src/main/resources/ScalaMain.scala.txt | 4 + .../resources/TypelevelExampleSuite.scala.txt | 15 ++ .../main/resources/TypelevelMain.scala.txt | 6 + .../main/scala/sbt/TemplateCommandUtil.scala | 148 +++++++++++++++++- 5 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 main/src/main/resources/MUnitSuite.scala.txt create mode 100644 main/src/main/resources/ScalaMain.scala.txt create mode 100644 main/src/main/resources/TypelevelExampleSuite.scala.txt create mode 100644 main/src/main/resources/TypelevelMain.scala.txt diff --git a/main/src/main/resources/MUnitSuite.scala.txt b/main/src/main/resources/MUnitSuite.scala.txt new file mode 100644 index 000000000..0ea401f77 --- /dev/null +++ b/main/src/main/resources/MUnitSuite.scala.txt @@ -0,0 +1,8 @@ +pacakge example + +class ExampleSuite extends munit.FunSuite: + + test("addition") { + assert(1 + 1 == 2) + } +end ExampleSuite diff --git a/main/src/main/resources/ScalaMain.scala.txt b/main/src/main/resources/ScalaMain.scala.txt new file mode 100644 index 000000000..d9b67a2f6 --- /dev/null +++ b/main/src/main/resources/ScalaMain.scala.txt @@ -0,0 +1,4 @@ +package example + +@main def main(args: String*): Unit = + println(s"Hello ${args.toSeq}") diff --git a/main/src/main/resources/TypelevelExampleSuite.scala.txt b/main/src/main/resources/TypelevelExampleSuite.scala.txt new file mode 100644 index 000000000..0575b6be7 --- /dev/null +++ b/main/src/main/resources/TypelevelExampleSuite.scala.txt @@ -0,0 +1,15 @@ +package example + +import cats.effect.* +import munit.CatsEffectSuite + +class ExampleSuite extends CatsEffectSuite: + + test("tests can return IO[Unit] with assertions expressed via a map") { + IO(42).map(it => assertEquals(it, 42)) + } + + test("alternatively, assertions can be written via assertIO") { + assertIO(IO(42), 42) + } +end ExampleSuite diff --git a/main/src/main/resources/TypelevelMain.scala.txt b/main/src/main/resources/TypelevelMain.scala.txt new file mode 100644 index 000000000..8f9624bd9 --- /dev/null +++ b/main/src/main/resources/TypelevelMain.scala.txt @@ -0,0 +1,6 @@ +package example + +import cats.effect.* + +object Hello extends IOApp.Simple: + def run = IO.println("Hello toolkit!") diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 6c8831bbe..31b02ffe0 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -39,13 +39,27 @@ private[sbt] object TemplateCommandUtil { val extracted = (Project extract s0) val (s1, ivyConf) = extracted.runTask(Keys.ivyConfiguration, s0) val scalaModuleInfo = extracted.get(Keys.updateSbtClassifiers / Keys.scalaModuleInfo) - val arguments = inputArg.toList ++ + val args0 = inputArg.toList ++ (s0.remainingCommands match { case exec :: Nil if exec.commandLine == "shell" => Nil case xs => xs map (_.commandLine) }) - run(infos, arguments, s0.configuration, ivyConf, globalBase, scalaModuleInfo, log) - TerminateAction :: s1.copy(remainingCommands = Nil) + def terminate = TerminateAction :: s1.copy(remainingCommands = Nil) + def reload = "reboot" :: s1.copy(remainingCommands = Nil) + if (args0.nonEmpty) { + run(infos, args0, s0.configuration, ivyConf, globalBase, scalaModuleInfo, log) + terminate + } else { + fortifyArgs() match { + case Nil => terminate + case arg :: Nil if arg.endsWith(".local") => + localRun(arg :: Nil, log) + reload + case args => + run(infos, args, s0.configuration, ivyConf, globalBase, scalaModuleInfo, log) + terminate + } + } } private def run( @@ -143,4 +157,132 @@ private[sbt] object TemplateCommandUtil { xs.map(_.toPath) } } + + private final val ScalaToolkitSlug = "scala/toolkit.local" + private final val TypelevelToolkitSlug = "typelevel/toolkit.local" + private final val SbtCrossPlatformSlug = "sbt/cross-platform.local" + private def fortifyArgs(): List[String] = { + val templates = List( + ScalaToolkitSlug -> "Scala Toolkit (beta) by Scala Center and VirtusLab", + TypelevelToolkitSlug -> "Toolkit to start building Typelevel apps", + SbtCrossPlatformSlug -> "A cross-JVM/JS/Native project", + "scala/scala-seed.g8" -> "Scala 2 seed template", + "playframework/play-scala-seed.g8" -> "A Play project in Scala", + "playframework/play-java-seed.g8" -> "A Play project in Java", + "scala-js/vite.g8" -> "A Scala.JS + Vite project", + "holdenk/sparkProjectTemplate.g8" -> "A Scala Spark project", + "spotify/scio.g8" -> "A Scio project", + "disneystreaming/smithy4s.g8" -> "A Smithy4s project", + ) + val mappingList = templates.zipWithIndex.map { + case (v, idx) => (idx + 1) -> v + } + System.out.println("") + System.out.println("Welcome to sbt new!") + System.out.println("Here are some templates to get started:") + mappingList.foreach { + case (k, (slug, desc)) => + val key = if (k < 10) s" $k" else k.toString + System.out.println(s" $key) ${slug.padTo(33, ' ')} - $desc") + } + System.out.println(" q) quit") + val ans = ask("Select a template", "1") + val mappings = Map((mappingList.map { case (k, v) => k.toString -> v }): _*) + mappings.get(ans).map(_._1).toList + } + + private def ask(question: String, default: String): String = { + System.out.print(s"$question (default: $default): ") + val ans0 = System.console().readLine() + if (ans0 == "") default + else ans0 + } + + private def localRun( + arguments: List[String], + log: Logger + ): Unit = + arguments match { + case ScalaToolkitSlug :: Nil => scalaToolkitTemplate() + case TypelevelToolkitSlug :: Nil => typelevelToolkitTemplate() + case SbtCrossPlatformSlug :: Nil => sbtCrossPlatformTemplate() + case _ => + System.err.println("Local template not found for: " + arguments.mkString(" ")) + } + + private final val defaultScalaV = "3.2.2" + private def scalaToolkitTemplate(): Unit = { + val defaultScalaToolkitV = "0.1.6" + val scalaV = ask("Scala version", defaultScalaV) + val toolkitV = ask("Scala Toolkit version", defaultScalaToolkitV) + val content = s""" +val toolkit = "org.scala-lang" %% "toolkit" % "$toolkitV" +// val toolkitTest = "org.scala-lang" %% "toolkit-test" % "$toolkitV" + +ThisBuild / scalaVersion := "$scalaV" +libraryDependencies += toolkit +// libraryDependencies += (toolkitTest % Test) +""" + IO.write(new File("build.sbt"), content) + copyResource("ScalaMain.scala.txt", new File("src/main/scala/example/Main.scala")) + copyResource("MUnitSuite.scala.txt", new File("src/test/scala/example/ExampleSuite.scala")) + } + + private def typelevelToolkitTemplate(): Unit = { + val defaultTypelevelToolkitV = "0.0.7" + val scalaV = ask("Scala version", defaultScalaV) + val toolkitV = ask("Typelevel Toolkit version", defaultTypelevelToolkitV) + val content = s""" +val toolkit = "org.typelevel" %% "toolkit" % "$toolkitV" + +ThisBuild / scalaVersion := "$scalaV" +libraryDependencies += toolkit +""" + IO.write(new File("build.sbt"), content) + copyResource("TypelevelMain.scala.txt", new File("src/main/scala/example/Main.scala")) + copyResource( + "TypelevelExampleSuite.scala.txt", + new File("src/test/scala/example/ExampleSuite.scala") + ) + } + + private def sbtCrossPlatformTemplate(): Unit = { + val scalaV = ask("Scala version", defaultScalaV) + val content = s""" +ThisBuild / scalaVersion := "$scalaV" + +lazy val core = (projectMatrix in file("core")) + .settings( + name := "core", + ) + .jvmPlatform(scalaVersions = Seq("$scalaV")) + .jsPlatform(scalaVersions = Seq("$scalaV")) + .nativePlatform(scalaVersions = Seq("$scalaV")) +""" + IO.write(new File("build.sbt"), content) + + val pluginsContent = """ +addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.9.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1") +addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.4.10") +""" + IO.write(new File("project/plugins.sbt"), pluginsContent) + copyResource("ScalaMain.scala.txt", new File("core/src/main/scala/example/Main.scala")) + } + + private def copyResource(resourcePath: String, out: File): Unit = { + if (out.exists()) { + sys.error(s"the file $out already exists!") + } + if (!out.getParentFile().exists()) { + IO.createDirectory(out.getParentFile()) + } + val is = getClass.getClassLoader().getResourceAsStream(resourcePath) + require(is ne null, s"Couldn't load '$resourcePath' from classpath.") + try { + IO.transfer(is, out) + } finally { + is.close() + } + } } From 26917d7de40e6c518d943d349f01b31ac4079437 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 1 May 2023 01:39:32 -0400 Subject: [PATCH 043/207] 1.9.0-RC1 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index f832de2a1..24d9241c1 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.8.1-SNAPSHOT" + val v = "1.9.0-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index 23c412b86..d07086529 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.8.0" +declare builtin_sbt_version="1.9.0-RC1" declare -a residual_args declare -a java_args declare -a scalac_args From 4c96c087c03a8fed8de074255f3e9167e485a562 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 3 May 2023 21:20:16 -0400 Subject: [PATCH 044/207] Fix typo --- main/src/main/resources/MUnitSuite.scala.txt | 2 +- main/src/main/resources/ScalaMain.scala.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/main/src/main/resources/MUnitSuite.scala.txt b/main/src/main/resources/MUnitSuite.scala.txt index 0ea401f77..26c55ab0e 100644 --- a/main/src/main/resources/MUnitSuite.scala.txt +++ b/main/src/main/resources/MUnitSuite.scala.txt @@ -1,4 +1,4 @@ -pacakge example +package example class ExampleSuite extends munit.FunSuite: diff --git a/main/src/main/resources/ScalaMain.scala.txt b/main/src/main/resources/ScalaMain.scala.txt index d9b67a2f6..248e0407b 100644 --- a/main/src/main/resources/ScalaMain.scala.txt +++ b/main/src/main/resources/ScalaMain.scala.txt @@ -1,4 +1,4 @@ package example @main def main(args: String*): Unit = - println(s"Hello ${args.toSeq}") + println(s"Hello ${args.mkString}") From bb0bb5ce58556d3498f57133c5c45744b585dbe2 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 4 May 2023 10:46:21 +0200 Subject: [PATCH 045/207] Fix #7233 The sbt-reproducible-build fails if two artifacts point to the same file. When packaging the artifacts of an sbt plugin, we copy each files to avoid this issue. --- main/src/main/scala/sbt/Defaults.scala | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 7af7c122d..2fdbd0892 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2857,7 +2857,14 @@ object Classpaths { val legacyPackages = packaged(defaultPackages).value def addSuffix(a: Artifact): Artifact = a.withName(crossVersion(a.name)) - val packages = legacyPackages.map { case (artifact, file) => addSuffix(artifact) -> file } + def copyArtifact(artifact: Artifact, file: File): (Artifact, File) = { + val nameWithSuffix = crossVersion(artifact.name) + val targetFile = + new File(file.getParentFile, file.name.replace(artifact.name, nameWithSuffix)) + IO.copyFile(file, targetFile) + artifact.withName(nameWithSuffix) -> targetFile + } + val packages = legacyPackages.map { case (artifact, file) => copyArtifact(artifact, file) } val legacyPackagedArtifacts = Def .ifS(sbtPluginPublishLegacyMavenStyle.toTask)(packaged(defaultArtifactTasks))( Def.task(Map.empty[Artifact, File]) From 51591bde5b343f6bd7e33c8ea67425a96a2415df Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 6 May 2023 20:07:47 -0400 Subject: [PATCH 046/207] Make new more interactive If the terminal supports ANSI control sequence, this displays the template list in an interactive way. The focused template is rendered reversed, and arrow key can be used to move the focus up/down. --- .../scala/sbt/internal/util/Terminal.scala | 31 +++++ main/src/main/scala/sbt/Main.scala | 1 + .../main/scala/sbt/TemplateCommandUtil.scala | 121 +++++++++++++----- 3 files changed, 122 insertions(+), 31 deletions(-) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala index 27b1e29c4..41b687ca5 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala @@ -176,9 +176,40 @@ trait Terminal extends AutoCloseable { else 0 } private[sbt] def flush(): Unit = printStream.flush() + + private[sbt] def readArrow: Int = withRawInput { + val in = System.in + val ESC = '\u001B' + val EOT = '\u0004' + var result: Int = -1 + def readBracket: Int = + in.read() match { + case '[' => readAnsiControl + case _ => 0 + } + def readAnsiControl: Int = + in.read() match { + case 'A' => Terminal.VK_UP + case 'B' => Terminal.VK_DOWN + case 'C' => Terminal.VK_RIGHT + case 'D' => Terminal.VK_LEFT + case _ => 0 + } + in.read() match { + case ESC => readBracket + // Ctrl+D to quit + case EOT => -1 + case c => c + } + } } object Terminal { + private[sbt] final val VK_UP = 256 + private[sbt] final val VK_DOWN = 257 + private[sbt] final val VK_RIGHT = 258 + private[sbt] final val VK_LEFT = 259 + val NO_BOOT_CLIENTS_CONNECTED: Int = -2 // Disable noisy jline log spam if (System.getProperty("sbt.jline.verbose", "false") != "true") diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 88babfe0b..2fcca3a43 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -110,6 +110,7 @@ private[sbt] object xMain { Seq(defaults, early), runEarly(DefaultsCommand) :: runEarly(InitCommand) :: BootCommand :: Nil ) + .put(BasicKeys.detachStdio, detachStdio) StandardMain.runManaged(state) } case _ if clientModByEnv || userCommands.exists(isClient) => diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 31b02ffe0..9cc326c7b 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -15,6 +15,7 @@ import sbt.BasicCommandStrings.TerminateAction import sbt.SlashSyntax0._ import sbt.io._, syntax._ import sbt.util._ +import sbt.internal.util.{ ConsoleAppender, Terminal => ITerminal } import sbt.internal.util.complete.{ DefaultParsers, Parser }, DefaultParsers._ import xsbti.AppConfiguration import sbt.librarymanagement._ @@ -161,39 +162,96 @@ private[sbt] object TemplateCommandUtil { private final val ScalaToolkitSlug = "scala/toolkit.local" private final val TypelevelToolkitSlug = "typelevel/toolkit.local" private final val SbtCrossPlatformSlug = "sbt/cross-platform.local" - private def fortifyArgs(): List[String] = { - val templates = List( - ScalaToolkitSlug -> "Scala Toolkit (beta) by Scala Center and VirtusLab", - TypelevelToolkitSlug -> "Toolkit to start building Typelevel apps", - SbtCrossPlatformSlug -> "A cross-JVM/JS/Native project", - "scala/scala-seed.g8" -> "Scala 2 seed template", - "playframework/play-scala-seed.g8" -> "A Play project in Scala", - "playframework/play-java-seed.g8" -> "A Play project in Java", - "scala-js/vite.g8" -> "A Scala.JS + Vite project", - "holdenk/sparkProjectTemplate.g8" -> "A Scala Spark project", - "spotify/scio.g8" -> "A Scio project", - "disneystreaming/smithy4s.g8" -> "A Smithy4s project", - ) - val mappingList = templates.zipWithIndex.map { - case (v, idx) => (idx + 1) -> v + private lazy val term: ITerminal = ITerminal.get + private lazy val isAnsiSupported = term.isAnsiSupported + private lazy val nonMoveLetters = ('a' to 'z').toList diff List('h', 'j', 'k', 'l', 'q') + private lazy val templates = List( + ScalaToolkitSlug -> "Scala Toolkit (beta) by Scala Center and VirtusLab", + TypelevelToolkitSlug -> "Toolkit to start building Typelevel apps", + SbtCrossPlatformSlug -> "A cross-JVM/JS/Native project", + "scala/scala-seed.g8" -> "Scala 2 seed template", + "playframework/play-scala-seed.g8" -> "A Play project in Scala", + "playframework/play-java-seed.g8" -> "A Play project in Java", + "scala-js/vite.g8" -> "A Scala.JS + Vite project", + "holdenk/sparkProjectTemplate.g8" -> "A Scala Spark project", + "spotify/scio.g8" -> "A Scio project", + "disneystreaming/smithy4s.g8" -> "A Smithy4s project", + ) + private def fortifyArgs(): List[String] = + if (System.console eq null) Nil + else + ITerminal.withStreams(true, false) { + val mappingList = templates.zipWithIndex.map { + case (v, idx) => nonMoveLetters(idx).toString -> v + } + val out = term.printStream + out.println("") + out.println("Welcome to sbt new!") + out.println("Here are some templates to get started:") + val ans = askTemplate(mappingList, 0) + val mappings = Map(mappingList: _*) + mappings.get(ans).map(_._1).toList + } + + private def askTemplate(mappingList: List[(String, (String, String))], focus: Int): String = { + val msg = "Select a template" + displayMappings(mappingList, focus) + val focusValue = ('a' + focus).toChar.toString + if (!isAnsiSupported) ask(msg, focusValue) + else { + val out = term.printStream + out.print(s"$msg: ") + val ans0 = term.readArrow + def printThenReturn(ans: String): String = { + out.println(ans) // this is necessary to move the cursor + out.flush() + ans + } + ans0 match { + case '\r' | '\n' => printThenReturn(focusValue) + case 'q' | 'Q' | -1 => printThenReturn("") + case 'j' | 'J' | ITerminal.VK_DOWN => + clearMenu(mappingList) + askTemplate(mappingList, math.min(focus + 1, mappingList.size - 1)) + case 'k' | 'K' | ITerminal.VK_UP => + clearMenu(mappingList) + askTemplate(mappingList, math.max(focus - 1, 0)) + case c if nonMoveLetters.contains(c.toChar) => + printThenReturn(c.toChar.toString) + case _ => + clearMenu(mappingList) + askTemplate(mappingList, focus) + } } - System.out.println("") - System.out.println("Welcome to sbt new!") - System.out.println("Here are some templates to get started:") - mappingList.foreach { - case (k, (slug, desc)) => - val key = if (k < 10) s" $k" else k.toString - System.out.println(s" $key) ${slug.padTo(33, ' ')} - $desc") + } + + private def clearMenu(mappingList: List[(String, (String, String))]): Unit = { + val out = term.printStream + out.print(ConsoleAppender.CursorLeft1000) + out.print(ConsoleAppender.cursorUp(mappingList.size + 1)) + } + + private def displayMappings(mappingList: List[(String, (String, String))], focus: Int): Unit = { + import scala.Console.{ RESET, REVERSED } + val out = term.printStream + mappingList.zipWithIndex.foreach { + case ((k, (slug, desc)), idx) => + if (idx == focus && isAnsiSupported) { + out.print(REVERSED) + } + out.print(s" $k) ${slug.padTo(33, ' ')} - $desc") + if (idx == focus && isAnsiSupported) { + out.print(RESET) + } + out.println() } - System.out.println(" q) quit") - val ans = ask("Select a template", "1") - val mappings = Map((mappingList.map { case (k, v) => k.toString -> v }): _*) - mappings.get(ans).map(_._1).toList + out.println(" q) quit") + out.flush() } private def ask(question: String, default: String): String = { System.out.print(s"$question (default: $default): ") - val ans0 = System.console().readLine() + val ans0 = System.console.readLine() if (ans0 == "") default else ans0 } @@ -212,16 +270,17 @@ private[sbt] object TemplateCommandUtil { private final val defaultScalaV = "3.2.2" private def scalaToolkitTemplate(): Unit = { - val defaultScalaToolkitV = "0.1.6" + val defaultScalaToolkitV = "0.1.7" val scalaV = ask("Scala version", defaultScalaV) val toolkitV = ask("Scala Toolkit version", defaultScalaToolkitV) val content = s""" -val toolkit = "org.scala-lang" %% "toolkit" % "$toolkitV" -// val toolkitTest = "org.scala-lang" %% "toolkit-test" % "$toolkitV" +val toolkitV = "$toolkitV" +val toolkit = "org.scala-lang" %% "toolkit" % toolkitV +val toolkitTest = "org.scala-lang" %% "toolkit-test" % toolkitV ThisBuild / scalaVersion := "$scalaV" libraryDependencies += toolkit -// libraryDependencies += (toolkitTest % Test) +libraryDependencies += (toolkitTest % Test) """ IO.write(new File("build.sbt"), content) copyResource("ScalaMain.scala.txt", new File("src/main/scala/example/Main.scala")) From 86ecec8ac3ab3de59192528f48e6898d95084b77 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 7 May 2023 01:28:46 -0400 Subject: [PATCH 047/207] sbt-giter8-resolver 0.16.2 --- main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala b/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala index 26d901d2e..b8b108b99 100644 --- a/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala +++ b/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala @@ -26,7 +26,7 @@ object Giter8TemplatePlugin extends AutoPlugin { ModuleID( "org.scala-sbt.sbt-giter8-resolver", "sbt-giter8-resolver", - "0.15.0" + "0.16.2" ) cross CrossVersion.binary, "sbtgiter8resolver.Giter8TemplateResolver" ) From 1f333010a94d75cd183962b8e8739f18cf2a649a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 7 May 2023 12:40:28 -0400 Subject: [PATCH 048/207] lm 1.9.0-M3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index e2d766f83..3bfa141ee 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,7 +14,7 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.9.0-M1") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M2") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M3") val zincVersion = nightlyVersion.getOrElse("1.9.0-M2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 2664884f376303ed1ce78252722a833a18691d9c Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 7 May 2023 14:05:05 -0400 Subject: [PATCH 049/207] sbt 1.9.0 bannar --- main/src/main/scala/sbt/internal/Banner.scala | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/main/src/main/scala/sbt/internal/Banner.scala b/main/src/main/scala/sbt/internal/Banner.scala index 24e3a9f6b..7ce38b461 100644 --- a/main/src/main/scala/sbt/internal/Banner.scala +++ b/main/src/main/scala/sbt/internal/Banner.scala @@ -10,6 +10,15 @@ package sbt.internal private[sbt] object Banner { def apply(version: String): Option[String] = version match { + case v if v.startsWith("1.9.0") => + Some(s""" + |Here are some highlights of sbt 1.9.0: + | - POM consistency of sbt plugin publishing + | - sbt new, a text-based adventure + | - Deprecation of IntegrationTest configuration + |See https://eed3si9n.com/sbt-1.9.0 for full release notes. + |Hide the banner for this release by running `skipBanner`. + |""".stripMargin.linesIterator.mkString("\n")) case v if v.startsWith("1.7.0") => Some(s""" |Here are some highlights of this release: From 731af0173ce3b10d3b95716d04d5e3120bdb9978 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 7 May 2023 13:46:43 -0400 Subject: [PATCH 050/207] Add init as an alias to new --- main-command/src/main/scala/sbt/BasicCommandStrings.scala | 1 + main/src/main/scala/sbt/Main.scala | 7 ++++--- main/src/main/scala/sbt/TemplateCommandUtil.scala | 7 ++++--- sbt-app/src/sbt-test/java/argfile/build.sbt | 2 +- sbt-app/src/sbt-test/java/argfile/test | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/main-command/src/main/scala/sbt/BasicCommandStrings.scala b/main-command/src/main/scala/sbt/BasicCommandStrings.scala index f70e350d6..774c19115 100644 --- a/main-command/src/main/scala/sbt/BasicCommandStrings.scala +++ b/main-command/src/main/scala/sbt/BasicCommandStrings.scala @@ -17,6 +17,7 @@ object BasicCommandStrings { val Shutdown: String = "shutdown" val Quit: String = "quit" val TemplateCommand: String = "new" + val TemplateCommandAlias: String = "init" val Cancel: String = "cancel" /** The command name to terminate the program.*/ diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 2fcca3a43..da69f098c 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -71,7 +71,7 @@ private[sbt] object xMain { .filterNot(_ == DashDashServer) val isClient: String => Boolean = cmd => (cmd == JavaClient) || (cmd == DashDashClient) val isBsp: String => Boolean = cmd => (cmd == "-bsp") || (cmd == "--bsp") - val isNew: String => Boolean = cmd => (cmd == "new") + val isNew: String => Boolean = cmd => (cmd == "new") || (cmd == "init") 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 { @@ -108,7 +108,7 @@ private[sbt] object xMain { .initialState( rebasedConfig, Seq(defaults, early), - runEarly(DefaultsCommand) :: runEarly(InitCommand) :: BootCommand :: Nil + runEarly(DefaultsCommand) :: runEarly("error") :: runEarly(InitCommand) :: BootCommand :: Nil ) .put(BasicKeys.detachStdio, detachStdio) StandardMain.runManaged(state) @@ -289,7 +289,7 @@ object StandardMain { import sbt.BasicCommandStrings._ import sbt.BasicCommands._ import sbt.CommandUtil._ -import sbt.TemplateCommandUtil.templateCommand +import sbt.TemplateCommandUtil.{ templateCommandAlias, templateCommand } import sbt.internal.CommandStrings._ import sbt.internal.util.complete.DefaultParsers._ @@ -311,6 +311,7 @@ object BuiltinCommands { settingsCommand, loadProject, templateCommand, + templateCommandAlias, projects, project, set, diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 9cc326c7b..3102e4ee9 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -11,7 +11,6 @@ import java.lang.reflect.InvocationTargetException import java.nio.file.Path import java.io.File -import sbt.BasicCommandStrings.TerminateAction import sbt.SlashSyntax0._ import sbt.io._, syntax._ import sbt.util._ @@ -24,8 +23,10 @@ import sbt.internal.inc.classpath.ClasspathUtil import BasicCommandStrings._, BasicKeys._ private[sbt] object TemplateCommandUtil { - def templateCommand: Command = - Command(TemplateCommand, templateBrief, templateDetailed)(_ => templateCommandParser)( + def templateCommand: Command = templateCommand0(TemplateCommand) + def templateCommandAlias: Command = templateCommand0("init") + private def templateCommand0(command: String): Command = + Command(command, templateBrief, templateDetailed)(_ => templateCommandParser)( runTemplate ) diff --git a/sbt-app/src/sbt-test/java/argfile/build.sbt b/sbt-app/src/sbt-test/java/argfile/build.sbt index 399821afc..1ee00159b 100644 --- a/sbt-app/src/sbt-test/java/argfile/build.sbt +++ b/sbt-app/src/sbt-test/java/argfile/build.sbt @@ -1,7 +1,7 @@ scalaSource in Configurations.Compile := (sourceDirectory.value / " scala test ") javaSource in Configurations.Compile := (sourceDirectory.value / " java test ") -TaskKey[Unit]("init") := { +TaskKey[Unit]("init0") := { val ss = (scalaSource in Configurations.Compile).value val js = ( javaSource in Configurations.Compile).value import IO._ diff --git a/sbt-app/src/sbt-test/java/argfile/test b/sbt-app/src/sbt-test/java/argfile/test index 75991e02e..5563b8c77 100644 --- a/sbt-app/src/sbt-test/java/argfile/test +++ b/sbt-app/src/sbt-test/java/argfile/test @@ -1,2 +1,2 @@ -> init +> init0 > run \ No newline at end of file From b122e292e52713ea98b2633d669e7ee7748dd862 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 7 May 2023 14:18:18 -0400 Subject: [PATCH 051/207] Bump Typelevel toolkit --- main/src/main/scala/sbt/TemplateCommandUtil.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 3102e4ee9..95866ff98 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -289,7 +289,7 @@ libraryDependencies += (toolkitTest % Test) } private def typelevelToolkitTemplate(): Unit = { - val defaultTypelevelToolkitV = "0.0.7" + val defaultTypelevelToolkitV = "0.0.8" val scalaV = ask("Scala version", defaultScalaV) val toolkitV = ask("Typelevel Toolkit version", defaultTypelevelToolkitV) val content = s""" From 300b770ea4fe41ee585a08b2ecba31c9a9c94930 Mon Sep 17 00:00:00 2001 From: Chris Kipp Date: Mon, 8 May 2023 13:38:15 +0200 Subject: [PATCH 052/207] fix: deprecate misspelled diagnosticRelatedInforamation and add in a new one Relates to https://github.com/sbt/sbt/discussions/7063 --- internal/util-interface/src/main/java/xsbti/Problem.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/util-interface/src/main/java/xsbti/Problem.java b/internal/util-interface/src/main/java/xsbti/Problem.java index e63a95b64..8582afd23 100644 --- a/internal/util-interface/src/main/java/xsbti/Problem.java +++ b/internal/util-interface/src/main/java/xsbti/Problem.java @@ -39,13 +39,19 @@ public interface Problem { return Optional.empty(); } + /** @deprecated use {@link #diagnosticRelatedInformation()} instead. */ + @Deprecated + default List diagnosticRelatedInforamation() { + return diagnosticRelatedInformation(); + } + /** * The possible releated information for the diagnostic being reported. * *

NOTE: To avoid breaking compatibility we provide a default to account for older Scala * versions that do not have the concept of "related information". */ - default List diagnosticRelatedInforamation() { + default List diagnosticRelatedInformation() { return Collections.emptyList(); } } From aeb168aa9387f6a6b634520682653a29ddc09db0 Mon Sep 17 00:00:00 2001 From: Chris Kipp Date: Mon, 8 May 2023 15:07:15 +0200 Subject: [PATCH 053/207] feat: add in `actions()` to `Problem` This adds a new field into `xsbti.Problem` allowing for the compiler to forward "actions" that can address diagnostics. The idea largely mimics a very minimal `CodeAction` that can be found in the [LSP Spec](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeAction) in order to ensure it will work with a variety of difference clients that use LSP, and those that don't. In the future the `WorkspaceEdit` that was created here could also be expanded to handle more advanced changes, aka resource operations, like creating/moving/deleting files. For now we only focus on a small subset of these features. --- .../src/main/java/xsbti/Action.java | 32 +++++++++++++++++++ .../src/main/java/xsbti/FileChanges.java | 21 ++++++++++++ .../src/main/java/xsbti/Problem.java | 25 +++++++++++++++ .../src/main/java/xsbti/TextEdit.java | 25 +++++++++++++++ .../src/main/java/xsbti/WorkspaceEdit.java | 27 ++++++++++++++++ 5 files changed, 130 insertions(+) create mode 100644 internal/util-interface/src/main/java/xsbti/Action.java create mode 100644 internal/util-interface/src/main/java/xsbti/FileChanges.java create mode 100644 internal/util-interface/src/main/java/xsbti/TextEdit.java create mode 100644 internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java diff --git a/internal/util-interface/src/main/java/xsbti/Action.java b/internal/util-interface/src/main/java/xsbti/Action.java new file mode 100644 index 000000000..6bfc12826 --- /dev/null +++ b/internal/util-interface/src/main/java/xsbti/Action.java @@ -0,0 +1,32 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package xsbti; + +import java.util.Optional; + +/** + * An Action is very miminal representation of a `CodeAction` in the LSP protocol. + * + *

However it only focuses on the actual title, description, and edit, leaving it up to the + * language server to communicate with the client and put together a proper codeAction in accordance + * to client capabilities. + * + * @see `CodeAction` + */ +public interface Action { + + /** Title of the action that will be shown to the user client side. */ + String title(); + + /** Optional description that may be shown to the user client side to explain the action. */ + Optional description(); + + /** The actual edit contained in the action. */ + WorkspaceEdit edit(); +} diff --git a/internal/util-interface/src/main/java/xsbti/FileChanges.java b/internal/util-interface/src/main/java/xsbti/FileChanges.java new file mode 100644 index 000000000..52ea6e573 --- /dev/null +++ b/internal/util-interface/src/main/java/xsbti/FileChanges.java @@ -0,0 +1,21 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package xsbti; + +import java.net.URI; +import java.util.List; + +/** A collection of TextEdits that belong to a given URI. */ +public interface FileChanges { + + /** The URI that the edits belong to. */ + URI uri(); + + /** The edits belonging to the URI. */ + List edits(); +} diff --git a/internal/util-interface/src/main/java/xsbti/Problem.java b/internal/util-interface/src/main/java/xsbti/Problem.java index e63a95b64..ffe1292cd 100644 --- a/internal/util-interface/src/main/java/xsbti/Problem.java +++ b/internal/util-interface/src/main/java/xsbti/Problem.java @@ -48,4 +48,29 @@ public interface Problem { default List diagnosticRelatedInforamation() { return Collections.emptyList(); } + + /** + * Actions (aka quick fixes) that are able to either fix or address the issue that is causing this + * Problem. + * + *

For example given the following code: + * + *

+   *  trait Example:
+   *    def foo(): Unit
+   *    def bar(): Unit
+   *
+   *  class MyExample extends Example
+   * 
+ * + * You could expect this to have multiple actions attatched: + * + *
    + *
  • An option to implement a stub method for `foo()` and `bar()` + *
  • An option to make `MyExample` abstract + *
+ */ + default List actions() { + return Collections.emptyList(); + } } diff --git a/internal/util-interface/src/main/java/xsbti/TextEdit.java b/internal/util-interface/src/main/java/xsbti/TextEdit.java new file mode 100644 index 000000000..caffb642d --- /dev/null +++ b/internal/util-interface/src/main/java/xsbti/TextEdit.java @@ -0,0 +1,25 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package xsbti; + +/** + * A representation of the `TextEdit` found in the LSP protocol. + * + *

NOTE: That instead of a `Range` we use the internal [[xsbti.Position]]. + * + * @see `TextEdit` + */ +public interface TextEdit { + + /** The position this edit will be applied to. */ + Position position(); + + /** The next text that will be inserted into the given [[TextEdit.position]]. */ + String newText(); +} diff --git a/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java b/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java new file mode 100644 index 000000000..438e38aad --- /dev/null +++ b/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java @@ -0,0 +1,27 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package xsbti; + +import java.net.URI; +import java.util.List; + +/** + * A minimal representatin of the `WorkspaceEdit` found in the LSP protocol. + * + *

However it only supports the minimal `changes` to ensure the fixes will work with all clients. + * + *

NOTE: In the future this may be expanded to handle resource operations via `documentChanges`. + * + * @see `WorkspaceEdit` + */ +public interface WorkspaceEdit { + + /** List of [[xsbti.FileChanges]] that belong to this WorkspaceEdit. */ + List changes(); +} From ecc322335c3e629c59d089c5d4f1972b4285433a Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Fri, 12 May 2023 15:22:18 +0200 Subject: [PATCH 054/207] Update native-image to 22.2.0 See sbt/sbt#7149 --- build.sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/build.sbt b/build.sbt index 24d9241c1..83f953518 100644 --- a/build.sbt +++ b/build.sbt @@ -1173,6 +1173,7 @@ lazy val sbtClientProj = (project in file("client")) nativeImageReady := { () => () }, + nativeImageVersion := "22.2.0", nativeImageOutput := target.value / "bin" / "sbtn", nativeImageOptions ++= Seq( "--no-fallback", From fa8dfd225de80c0272162a223e734b485b1849b8 Mon Sep 17 00:00:00 2001 From: Chris Kipp Date: Sun, 14 May 2023 09:52:16 +0200 Subject: [PATCH 055/207] fix: get rid of the `FileChanges` abstraction I don't believe this is actually needed. We can simplify the `WorkspaceEdit` further and put together the mapping for `changes` according to the LSP spec later on down the line. This will allow us to remove the need for the `URI`, which is problematic. closes #7252 --- .../src/main/java/xsbti/FileChanges.java | 21 ------------------- .../src/main/java/xsbti/WorkspaceEdit.java | 5 ++--- 2 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 internal/util-interface/src/main/java/xsbti/FileChanges.java diff --git a/internal/util-interface/src/main/java/xsbti/FileChanges.java b/internal/util-interface/src/main/java/xsbti/FileChanges.java deleted file mode 100644 index 52ea6e573..000000000 --- a/internal/util-interface/src/main/java/xsbti/FileChanges.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * sbt - * Copyright 2011 - 2018, Lightbend, Inc. - * Copyright 2008 - 2010, Mark Harrah - * Licensed under Apache License 2.0 (see LICENSE) - */ - -package xsbti; - -import java.net.URI; -import java.util.List; - -/** A collection of TextEdits that belong to a given URI. */ -public interface FileChanges { - - /** The URI that the edits belong to. */ - URI uri(); - - /** The edits belonging to the URI. */ - List edits(); -} diff --git a/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java b/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java index 438e38aad..8508e5826 100644 --- a/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java +++ b/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java @@ -7,7 +7,6 @@ package xsbti; -import java.net.URI; import java.util.List; /** @@ -22,6 +21,6 @@ import java.util.List; */ public interface WorkspaceEdit { - /** List of [[xsbti.FileChanges]] that belong to this WorkspaceEdit. */ - List changes(); + /** List of [[xsbti.TextEdit]] that belong to this WorkspaceEdit. */ + List changes(); } From 9d87f3f5963811a0b432a3128757a67177c52cc7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 14 May 2023 00:38:34 -0400 Subject: [PATCH 056/207] Add concrete impl for Action --- build.sbt | 4 +- .../src/main/java/xsbti/Problem.java | 2 + .../main/scala/sbt/util/InterfaceUtil.scala | 216 +++++++++++++++++- .../src/test/scala/ProblemTest.scala | 204 +++++++++++++++++ 4 files changed, 420 insertions(+), 6 deletions(-) create mode 100644 internal/util-logging/src/test/scala/ProblemTest.scala diff --git a/build.sbt b/build.sbt index 83f953518..bc2ae0216 100644 --- a/build.sbt +++ b/build.sbt @@ -369,7 +369,7 @@ lazy val utilLogging = (project in file("internal") / "util-logging") .enablePlugins(ContrabandPlugin, JsonCodecPlugin) .dependsOn(utilInterface, collectionProj, coreMacrosProj) .settings( - utilCommonSettings, + testedBaseSettings, name := "Util Logging", libraryDependencies ++= Seq( @@ -383,7 +383,6 @@ lazy val utilLogging = (project in file("internal") / "util-logging") sjsonNewScalaJson.value, scalaReflect.value ), - libraryDependencies ++= Seq(scalacheck % "test", scalatest % "test"), Compile / scalacOptions ++= (scalaVersion.value match { case v if v.startsWith("2.12.") => List("-Ywarn-unused:-locals,-explicits,-privates") case _ => List() @@ -397,6 +396,7 @@ lazy val utilLogging = (project in file("internal") / "util-logging") if (name == "Throwable") Nil else old(tpe) }, + Test / fork := true, utilMimaSettings, mimaBinaryIssueFilters ++= Seq( exclude[DirectMissingMethodProblem]("sbt.internal.util.SuccessEvent.copy*"), diff --git a/internal/util-interface/src/main/java/xsbti/Problem.java b/internal/util-interface/src/main/java/xsbti/Problem.java index 7cf0a404e..2d5c091f6 100644 --- a/internal/util-interface/src/main/java/xsbti/Problem.java +++ b/internal/util-interface/src/main/java/xsbti/Problem.java @@ -11,6 +11,8 @@ import java.util.Collections; import java.util.List; import java.util.Optional; +// Note: Update InterfaceUtil.scala as well. + public interface Problem { String category(); 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 e7f2d33cc..9da7d0efa 100644 --- a/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala +++ b/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala @@ -12,7 +12,17 @@ import java.util.Optional import java.util.function.Supplier import java.{ util => ju } -import xsbti.{ DiagnosticCode, DiagnosticRelatedInformation, Position, Problem, Severity, T2 } +import xsbti.{ + Action, + DiagnosticCode, + DiagnosticRelatedInformation, + Position, + Problem, + Severity, + TextEdit, + WorkspaceEdit, + T2, +} import scala.collection.mutable.ListBuffer @@ -130,6 +140,7 @@ object InterfaceUtil { ): Problem = problem(cat, pos, msg, sev, rendered, None, List.empty[DiagnosticRelatedInformation]) + @deprecated("Use the overload of this method with more arguments", "1.9.0") def problem( cat: String, pos: Position, @@ -139,7 +150,59 @@ object InterfaceUtil { diagnosticCode: Option[DiagnosticCode], diagnosticRelatedInforamation: List[DiagnosticRelatedInformation] ): Problem = - new ConcreteProblem(cat, pos, msg, sev, rendered, diagnosticCode, diagnosticRelatedInforamation) + problem( + cat, + pos, + msg, + sev, + rendered, + diagnosticCode, + diagnosticRelatedInforamation, + List.empty[Action], + ) + + def problem( + cat: String, + pos: Position, + msg: String, + sev: Severity, + rendered: Option[String], + diagnosticCode: Option[DiagnosticCode], + diagnosticRelatedInformation: List[DiagnosticRelatedInformation], + actions: List[Action], + ): Problem = + new ConcreteProblem( + cat, + pos, + msg, + sev, + rendered, + diagnosticCode, + diagnosticRelatedInformation, + actions, + ) + + def action( + title: String, + description: Option[String], + edit: WorkspaceEdit, + ): Action = + new ConcreteAction(title, description, edit) + + def workspaceEdit(changes: List[TextEdit]): WorkspaceEdit = + new ConcreteWorkspaceEdit(changes) + + def textEdit(position: Position, newText: String): TextEdit = + new ConcreteTextEdit(position, newText) + + def diagnosticCode(code: String, explanation: Option[String]): DiagnosticCode = + new ConcreteDiagnosticCode(code, explanation) + + def diagnosticRelatedInformation( + position: Position, + message: String + ): DiagnosticRelatedInformation = + new ConcreteDiagnosticRelatedInformation(position, message) private final class ConcreteT2[A1, A2](a1: A1, a2: A2) extends T2[A1, A2] { val get1: A1 = a1 @@ -187,6 +250,42 @@ object InterfaceUtil { override val startColumn = o2jo(startColumn0) override val endLine = o2jo(endLine0) override val endColumn = o2jo(endColumn0) + override def toString: String = { + val src = sourcePath0 match { + case Some(x) => s"$x" + case None => "none" + } + val line = line0 match { + case Some(x) => s":$x" + case None => "" + } + val offset = offset0 match { + case Some(x) => s":$x" + case None => "" + } + s"""$src$line$offset""" + } + private def toTuple(p: Position) = + ( + p.line, + p.lineContent, + p.offset, + p.pointer, + p.pointerSpace, + p.sourcePath, + p.sourceFile, + p.startOffset, + p.endOffset, + p.startLine, + p.startColumn, + p.endLine, + p.endColumn, + ) + override def hashCode: Int = toTuple(this).## + override def equals(o: Any): Boolean = o match { + case o: Position => toTuple(this) == toTuple(o) + case _ => false + } } private final class ConcreteProblem( @@ -196,7 +295,8 @@ object InterfaceUtil { sev: Severity, rendered0: Option[String], diagnosticCode0: Option[DiagnosticCode], - diagnosticRelatedInformation0: List[DiagnosticRelatedInformation] + diagnosticRelatedInformation0: List[DiagnosticRelatedInformation], + actions0: List[Action], ) extends Problem { val category = cat val position = pos @@ -204,8 +304,116 @@ object InterfaceUtil { val severity = sev override val rendered = o2jo(rendered0) override def diagnosticCode: Optional[DiagnosticCode] = o2jo(diagnosticCode0) - override def diagnosticRelatedInforamation(): ju.List[DiagnosticRelatedInformation] = + override def diagnosticRelatedInformation(): ju.List[DiagnosticRelatedInformation] = l2jl(diagnosticRelatedInformation0) + @deprecated("use diagnosticRelatedInformation", "1.9.0") + override def diagnosticRelatedInforamation(): ju.List[DiagnosticRelatedInformation] = + diagnosticRelatedInformation() + override def actions(): ju.List[Action] = + l2jl(actions0) override def toString = s"[$severity] $pos: $message" + private def toTuple(p: Problem) = + ( + p.category, + p.position, + p.message, + p.severity, + p.rendered, + p.diagnosticCode, + p.diagnosticRelatedInformation, + p.actions, + ) + override def hashCode: Int = toTuple(this).## + override def equals(o: Any): Boolean = o match { + case o: Problem => toTuple(this) == toTuple(o) + case _ => false + } + } + + private final class ConcreteAction( + title0: String, + description0: Option[String], + edit0: WorkspaceEdit, + ) extends Action { + val title: String = title0 + val edit: WorkspaceEdit = edit0 + override def description(): Optional[String] = + o2jo(description0) + override def toString(): String = + s"Action($title0, $description0, $edit0)" + private def toTuple(a: Action) = + ( + a.title, + a.description, + a.edit, + ) + override def hashCode: Int = toTuple(this).## + override def equals(o: Any): Boolean = o match { + case o: Action => toTuple(this) == toTuple(o) + case _ => false + } + } + + private final class ConcreteWorkspaceEdit(changes0: List[TextEdit]) extends WorkspaceEdit { + override def changes(): ju.List[TextEdit] = l2jl(changes0) + override def toString(): String = + s"WorkspaceEdit($changes0)" + private def toTuple(w: WorkspaceEdit) = jl2l(w.changes) + override def hashCode: Int = toTuple(this).## + override def equals(o: Any): Boolean = o match { + case o: WorkspaceEdit => toTuple(this) == toTuple(o) + case _ => false + } + } + + private final class ConcreteTextEdit(position0: Position, newText0: String) extends TextEdit { + val position: Position = position0 + val newText: String = newText0 + override def toString(): String = + s"TextEdit($position, $newText)" + private def toTuple(edit: TextEdit) = + ( + edit.position, + edit.newText, + ) + override def hashCode: Int = toTuple(this).## + override def equals(o: Any): Boolean = o match { + case o: TextEdit => toTuple(this) == toTuple(o) + case _ => false + } + } + + private final class ConcreteDiagnosticCode(code0: String, explanation0: Option[String]) + extends DiagnosticCode { + val code: String = code0 + val explanation: Optional[String] = o2jo(explanation0) + override def toString(): String = s"DiagnosticCode($code)" + private def toTuple(c: DiagnosticCode) = + ( + c.code, + c.explanation, + ) + override def hashCode: Int = toTuple(this).## + override def equals(o: Any): Boolean = o match { + case o: DiagnosticCode => toTuple(this) == toTuple(o) + case _ => false + } + } + + private final class ConcreteDiagnosticRelatedInformation(position0: Position, message0: String) + extends DiagnosticRelatedInformation { + val position: Position = position0 + val message: String = message0 + override def toString(): String = s"DiagnosticRelatedInformation($position, $message)" + private def toTuple(info: DiagnosticRelatedInformation) = + ( + info.position, + info.message, + ) + override def hashCode: Int = toTuple(this).## + override def equals(o: Any): Boolean = o match { + case o: DiagnosticRelatedInformation => toTuple(this) == toTuple(o) + case _ => false + } } } diff --git a/internal/util-logging/src/test/scala/ProblemTest.scala b/internal/util-logging/src/test/scala/ProblemTest.scala new file mode 100644 index 000000000..d81e80fd2 --- /dev/null +++ b/internal/util-logging/src/test/scala/ProblemTest.scala @@ -0,0 +1,204 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt + +import java.net.URI +import hedgehog._ +import hedgehog.runner._ +import _root_.sbt.util.InterfaceUtil +import InterfaceUtil.{ jl2l, jo2o, l2jl } +import xsbti._ + +object ProblemTest extends Properties { + override def tests: List[Test] = List( + property( + "All problems can toString", + genProblem.forAll.map(toStringCheck), + ), + property( + "All problems can be compared structurally", + genProblem.forAll.map(equalityCheck), + ), + property( + "All diagnostic codes can be compared structurally", + genDiagnosticCode.forAll.map(equalityCheck), + ), + property( + "All diagnostic related information can be compared structurally", + genDiagnosticRelatedInformation.forAll.map(equalityCheck), + ), + property( + "All actions can be compared structurally", + genAction.forAll.map(equalityCheck), + ), + ) + + def toStringCheck(p: Problem): Result = + Result.assert(p.toString() != "") + + def equalityCheck(p: Problem): Result = { + val other = InterfaceUtil.problem( + p.category, + p.position, + p.message, + p.severity, + jo2o(p.rendered), + jo2o(p.diagnosticCode).map(copy), + jl2l(p.diagnosticRelatedInformation).map(copy), + jl2l(p.actions).map(copy), + ) + Result + .assert(p == other) + .log(s"$p == $other") + } + + def equalityCheck(c: DiagnosticCode): Result = { + val other = copy(c) + Result.assert(c == other) + } + + def equalityCheck(info: DiagnosticRelatedInformation): Result = { + val other = copy(info) + Result.assert(info == other) + } + + def equalityCheck(a: Action): Result = { + val other = copy(a) + Result.assert(a == other) + } + + lazy val genProblem: Gen[Problem] = + for { + cat <- genString + pos <- genPosition + msg <- genString + sev <- genSeverity + rendered <- optString + code <- optDiagnosticCode + info <- listDiagnosticRelatedInformation + actions <- listAction + } yield InterfaceUtil.problem( + cat, + pos, + msg, + sev, + rendered, + code, + info, + actions, + ) + + lazy val optDiagnosticCode: Gen[Option[DiagnosticCode]] = + Gen.choice1(genDiagnosticCode.map(Some(_)), Gen.constant(None)) + + lazy val genDiagnosticCode: Gen[DiagnosticCode] = + for { + code <- Gen.int(Range.linear(0, 1024)) + } yield InterfaceUtil.diagnosticCode("E" + code.toString, None) + + lazy val genSeverity: Gen[Severity] = + Gen.element(Severity.Info, List(Severity.Warn, Severity.Error)) + + lazy val genPosition: Gen[Position] = + for { + line <- optIntGen + content <- genString + offset <- optIntGen + } yield InterfaceUtil.position( + line, + content, + offset, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ) + + lazy val listDiagnosticRelatedInformation: Gen[List[DiagnosticRelatedInformation]] = + Gen.list(genDiagnosticRelatedInformation, Range.linear(0, 2)) + + lazy val genDiagnosticRelatedInformation: Gen[DiagnosticRelatedInformation] = + for { + pos <- genPosition + message <- genString + } yield InterfaceUtil.diagnosticRelatedInformation(pos, message) + + lazy val listAction: Gen[List[Action]] = + Gen.list(genAction, Range.linear(0, 2)) + + lazy val genAction: Gen[Action] = + for { + title <- genString + description <- optString + edit <- genWorkspaceEdit + } yield InterfaceUtil.action(title, description, edit) + + lazy val genWorkspaceEdit: Gen[WorkspaceEdit] = + for { + changes <- listTextEdit + } yield InterfaceUtil.workspaceEdit(changes) + + lazy val listTextEdit: Gen[List[TextEdit]] = + Gen.list(genTextEdit, Range.linear(0, 2)) + + lazy val genTextEdit: Gen[TextEdit] = + for { + pos <- genPosition + newText <- genString + } yield InterfaceUtil.textEdit(pos, newText) + + lazy val genUri: Gen[URI] = + for { + ssp <- genString + } yield new URI("file", "///" + ssp, null) + + lazy val optString: Gen[Option[String]] = + Gen.choice1(genString.map(Some(_)), Gen.constant(None)) + + lazy val genString = Gen.string(Gen.alphaNum, Range.linear(0, 256)) + + lazy val optIntGen: Gen[Option[Integer]] = + Gen.choice1(Gen.int(Range.linear(0, 1024)).map(Some(_)), Gen.constant(None)) + + private def copy(c: DiagnosticCode): DiagnosticCode = + new DiagnosticCode() { + val code = c.code + override def explanation = c.explanation + } + + private def copy(info: DiagnosticRelatedInformation): DiagnosticRelatedInformation = + new DiagnosticRelatedInformation() { + override def position = info.position + override def message = info.message + } + + private def copy(a: Action): Action = + new Action { + override def title = a.title + override def description = a.description + override def edit = copy(a.edit) + } + + private def copy(edit: WorkspaceEdit): WorkspaceEdit = + new WorkspaceEdit { + override def changes() = + l2jl(jl2l(edit.changes).map(copy)) + } + + private def copy(edit: TextEdit): TextEdit = + new TextEdit { + override val position = edit.position + override val newText = edit.newText + } +} From 30bab993e38fc79a9a9de99d3c22d04c5019bdae Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 15 May 2023 01:07:24 -0400 Subject: [PATCH 057/207] IO 1.9.0-RC3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 3bfa141ee..50bf794dd 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,7 +12,7 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.9.0-M1") + private val ioVersion = nightlyVersion.getOrElse("1.9.0-RC3") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M3") val zincVersion = nightlyVersion.getOrElse("1.9.0-M2") From 277f6362ac1dd2c96d2bdf42cd22808050b4d686 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 15 May 2023 04:09:54 -0400 Subject: [PATCH 058/207] Bump Zinc --- project/Dependencies.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 50bf794dd..f4dc3a7e1 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,8 +14,8 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.9.0-RC3") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-M3") - val zincVersion = nightlyVersion.getOrElse("1.9.0-M2") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-RC3") + val zincVersion = nightlyVersion.getOrElse("1.9.0-RC3") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From b5c3c4836fc996b7f0752d66a79da86ad40820f7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 15 May 2023 04:40:20 -0400 Subject: [PATCH 059/207] sbt 1.9.0-RC3 --- sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt b/sbt index d07086529..d548bc82b 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.0-RC1" +declare builtin_sbt_version="1.9.0-RC3" declare -a residual_args declare -a java_args declare -a scalac_args From e3c7bc7d8f5e024db196c57ebaa7a939b5cc1374 Mon Sep 17 00:00:00 2001 From: Matthew de Detrich Date: Sun, 21 May 2023 11:48:21 +0200 Subject: [PATCH 060/207] Deprecate itSettings --- main/src/main/scala/sbt/Defaults.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 2fdbd0892..d64d1be8a 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2603,6 +2603,10 @@ object Defaults extends BuildCommon { lazy val testSettings: Seq[Setting[_]] = configSettings ++ testTasks @nowarn + @deprecated( + "Create a separate subproject instead of using IntegrationTest and in addition avoid using itSettings", + "1.9.0" + ) lazy val itSettings: Seq[Setting[_]] = inConfig(IntegrationTest) { testSettings } From f8a29b748bcf00ef93b6346b957294afafa4e1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Mon, 22 May 2023 05:28:04 +0200 Subject: [PATCH 061/207] Add weaver-cats as a default test framework (#7263) Add weaver-cats as a default test framework --- main/src/main/scala/sbt/Defaults.scala | 5 +---- sbt-app/src/sbt-test/tests/weaver-cats/build.sbt | 3 +++ .../tests/weaver-cats/src/test/scala/spec/Spec.scala | 10 ++++++++++ sbt-app/src/sbt-test/tests/weaver-cats/test | 1 + testing/src/main/scala/sbt/TestFramework.scala | 4 ++++ 5 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 sbt-app/src/sbt-test/tests/weaver-cats/build.sbt create mode 100644 sbt-app/src/sbt-test/tests/weaver-cats/src/test/scala/spec/Spec.scala create mode 100644 sbt-app/src/sbt-test/tests/weaver-cats/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index d64d1be8a..3011f79ba 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1221,10 +1221,7 @@ object Defaults extends BuildCommon { private[this] def testDefaults = Defaults.globalDefaults( Seq( - testFrameworks :== { - import sbt.TestFrameworks._ - Seq(ScalaCheck, Specs2, Specs, ScalaTest, JUnit, MUnit, ZIOTest) - }, + testFrameworks :== sbt.TestFrameworks.All, testListeners :== Nil, testOptions :== Nil, testResultLogger :== TestResultLogger.Default, diff --git a/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt b/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt new file mode 100644 index 000000000..27ab29d39 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt @@ -0,0 +1,3 @@ +ThisBuild / scalaVersion := "2.13.10" + +libraryDependencies += "com.disneystreaming" %% "weaver-cats" % "0.8.3" % Test diff --git a/sbt-app/src/sbt-test/tests/weaver-cats/src/test/scala/spec/Spec.scala b/sbt-app/src/sbt-test/tests/weaver-cats/src/test/scala/spec/Spec.scala new file mode 100644 index 000000000..13153d720 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/weaver-cats/src/test/scala/spec/Spec.scala @@ -0,0 +1,10 @@ +package spec + +import weaver._ + +object Spec extends FunSuite { + test("test") { + // expected to fail + assert(1 == 2) + } +} diff --git a/sbt-app/src/sbt-test/tests/weaver-cats/test b/sbt-app/src/sbt-test/tests/weaver-cats/test new file mode 100644 index 000000000..5a9f22365 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/weaver-cats/test @@ -0,0 +1 @@ +-> test diff --git a/testing/src/main/scala/sbt/TestFramework.scala b/testing/src/main/scala/sbt/TestFramework.scala index bd20829ed..ab229487f 100644 --- a/testing/src/main/scala/sbt/TestFramework.scala +++ b/testing/src/main/scala/sbt/TestFramework.scala @@ -28,6 +28,10 @@ object TestFrameworks { val JUnit = TestFramework("com.novocode.junit.JUnitFramework") val MUnit = TestFramework("munit.Framework") val ZIOTest = TestFramework("zio.test.sbt.ZTestFramework") + val WeaverTestCats = TestFramework("weaver.framework.CatsEffect") + + val All: Seq[TestFramework] = + Seq(ScalaCheck, Specs2, Specs, ScalaTest, JUnit, MUnit, ZIOTest, WeaverTestCats) } final class TestFramework(val implClassNames: String*) extends Serializable { From 93bd66b673e3a3a49b69fcbf4c63ab9197f502ba Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 22 May 2023 00:33:46 -0400 Subject: [PATCH 062/207] Forward ScalaDiagnostic **Problem** Zinc added actions in Problem, but it's not yet forwarded to BSP clients. **Solution** As discussed in https://contributors.scala-lang.org/t/roadmap-for-actionable-diagnostics/6172, the plan seems to be to use the `data` field with `actions` inside it, so this implements that. --- .../internal/server/BuildServerReporter.scala | 46 ++++++++++--- .../sbt/internal/bsp/Diagnostic.scala | 42 ++++++++++-- .../bsp/DiagnosticRelatedInformation.scala | 43 ++++++++++++ .../sbt/internal/bsp/Location.scala | 37 ++++++++++ .../sbt/internal/bsp/ScalaAction.scala | 54 +++++++++++++++ .../sbt/internal/bsp/ScalaDiagnostic.scala | 40 +++++++++++ .../sbt/internal/bsp/ScalaTextEdit.scala | 43 ++++++++++++ .../sbt/internal/bsp/ScalaWorkspaceEdit.scala | 33 +++++++++ .../bsp/codec/DiagnosticFormats.scala | 10 ++- .../DiagnosticRelatedInformationFormats.scala | 29 ++++++++ .../sbt/internal/bsp/codec/JsonProtocol.scala | 6 ++ .../internal/bsp/codec/LocationFormats.scala | 29 ++++++++ .../bsp/codec/ScalaActionFormats.scala | 31 +++++++++ .../bsp/codec/ScalaDiagnosticFormats.scala | 27 ++++++++ .../bsp/codec/ScalaTextEditFormats.scala | 29 ++++++++ .../bsp/codec/ScalaWorkspaceEditFormats.scala | 27 ++++++++ protocol/src/main/contraband/bsp.contra | 67 +++++++++++++++++++ 17 files changed, 576 insertions(+), 17 deletions(-) create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/DiagnosticRelatedInformation.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/Location.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaAction.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaDiagnostic.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTextEdit.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaWorkspaceEdit.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticRelatedInformationFormats.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/LocationFormats.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaActionFormats.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaDiagnosticFormats.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaTextEditFormats.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaWorkspaceEditFormats.scala diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index a62f2356d..5ed82ff1d 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -180,8 +180,7 @@ final class BuildServerReporterImpl( } } - private def toDiagnostic(problem: Problem): Diagnostic = { - val pos = problem.position + private def toRange(pos: XPosition): Range = { val startLineOpt = pos.startLine.toOption.map(_.toLong - 1) val startColumnOpt = pos.startColumn.toOption.map(_.toLong) val endLineOpt = pos.endLine.toOption.map(_.toLong - 1) @@ -192,14 +191,45 @@ final class BuildServerReporterImpl( val startPos = toPosition(startLineOpt, startColumnOpt).getOrElse(Position(0L, 0L)) val endPosOpt = toPosition(endLineOpt, endColumnOpt) - val range = Range(startPos, endPosOpt.getOrElse(startPos)) + Range(startPos, endPosOpt.getOrElse(startPos)) + } + private def toDiagnostic(problem: Problem): Diagnostic = { + val actions0 = problem.actions().asScala.toVector + val data = + if (actions0.isEmpty) None + else + Some( + ScalaDiagnostic( + actions = actions0.map { a => + ScalaAction( + title = a.title, + description = a.description.toOption, + edit = Some( + ScalaWorkspaceEdit( + changes = a.edit.changes().asScala.toVector.map { edit => + ScalaTextEdit( + range = toRange(edit.position), + newText = edit.newText, + ) + } + ) + ), + ) + } + ) + ) Diagnostic( - range, - Option(toDiagnosticSeverity(problem.severity)), - problem.diagnosticCode().toOption.map(_.code), - Option("sbt"), - problem.message + range = toRange(problem.position), + severity = Option(toDiagnosticSeverity(problem.severity)), + code = problem.diagnosticCode().toOption.map(_.code), + source = Option("sbt"), + message = problem.message, + relatedInformation = Vector.empty, + dataKind = data.map { _ => + "scala" + }, + data = data, ) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/Diagnostic.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/Diagnostic.scala index a9e2dd10f..da46048cb 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/Diagnostic.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/Diagnostic.scala @@ -14,28 +14,37 @@ package sbt.internal.bsp * @param source A human-readable string describing the source of this diagnostic, e.g. 'typescript' or 'super lint'. * @param message The diagnostic's message. + * @param relatedInformation A list of related diagnostic information, e.g. when symbol-names within + a scope collide all definitions can be marked via this property. + * @param dataKind Kind of data to expect in the `data` field. If this field is not set, + the kind of data is not specified. + * @param data A data entry field. */ final class Diagnostic private ( val range: sbt.internal.bsp.Range, val severity: Option[Long], val code: Option[String], val source: Option[String], - val message: String) extends Serializable { - + val message: String, + val relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation], + val dataKind: Option[String], + val data: Option[sbt.internal.bsp.ScalaDiagnostic]) extends Serializable { + private def this(range: sbt.internal.bsp.Range, severity: Option[Long], code: Option[String], source: Option[String], message: String) = this(range, severity, code, source, message, Vector(), None, None) + private def this(range: sbt.internal.bsp.Range, severity: Option[Long], code: Option[String], source: Option[String], message: String, relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation]) = this(range, severity, code, source, message, relatedInformation, None, None) override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { - case x: Diagnostic => (this.range == x.range) && (this.severity == x.severity) && (this.code == x.code) && (this.source == x.source) && (this.message == x.message) + case x: Diagnostic => (this.range == x.range) && (this.severity == x.severity) && (this.code == x.code) && (this.source == x.source) && (this.message == x.message) && (this.relatedInformation == x.relatedInformation) && (this.dataKind == x.dataKind) && (this.data == x.data) case _ => false }) override def hashCode: Int = { - 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.Diagnostic".##) + range.##) + severity.##) + code.##) + source.##) + message.##) + 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.Diagnostic".##) + range.##) + severity.##) + code.##) + source.##) + message.##) + relatedInformation.##) + dataKind.##) + data.##) } override def toString: String = { - "Diagnostic(" + range + ", " + severity + ", " + code + ", " + source + ", " + message + ")" + "Diagnostic(" + range + ", " + severity + ", " + code + ", " + source + ", " + message + ", " + relatedInformation + ", " + dataKind + ", " + data + ")" } - private[this] def copy(range: sbt.internal.bsp.Range = range, severity: Option[Long] = severity, code: Option[String] = code, source: Option[String] = source, message: String = message): Diagnostic = { - new Diagnostic(range, severity, code, source, message) + private[this] def copy(range: sbt.internal.bsp.Range = range, severity: Option[Long] = severity, code: Option[String] = code, source: Option[String] = source, message: String = message, relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation] = relatedInformation, dataKind: Option[String] = dataKind, data: Option[sbt.internal.bsp.ScalaDiagnostic] = data): Diagnostic = { + new Diagnostic(range, severity, code, source, message, relatedInformation, dataKind, data) } def withRange(range: sbt.internal.bsp.Range): Diagnostic = { copy(range = range) @@ -61,9 +70,28 @@ final class Diagnostic private ( def withMessage(message: String): Diagnostic = { copy(message = message) } + def withRelatedInformation(relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation]): Diagnostic = { + copy(relatedInformation = relatedInformation) + } + def withDataKind(dataKind: Option[String]): Diagnostic = { + copy(dataKind = dataKind) + } + def withDataKind(dataKind: String): Diagnostic = { + copy(dataKind = Option(dataKind)) + } + def withData(data: Option[sbt.internal.bsp.ScalaDiagnostic]): Diagnostic = { + copy(data = data) + } + def withData(data: sbt.internal.bsp.ScalaDiagnostic): Diagnostic = { + copy(data = Option(data)) + } } object Diagnostic { def apply(range: sbt.internal.bsp.Range, severity: Option[Long], code: Option[String], source: Option[String], message: String): Diagnostic = new Diagnostic(range, severity, code, source, message) def apply(range: sbt.internal.bsp.Range, severity: Long, code: String, source: String, message: String): Diagnostic = new Diagnostic(range, Option(severity), Option(code), Option(source), message) + def apply(range: sbt.internal.bsp.Range, severity: Option[Long], code: Option[String], source: Option[String], message: String, relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation]): Diagnostic = new Diagnostic(range, severity, code, source, message, relatedInformation) + def apply(range: sbt.internal.bsp.Range, severity: Long, code: String, source: String, message: String, relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation]): Diagnostic = new Diagnostic(range, Option(severity), Option(code), Option(source), message, relatedInformation) + def apply(range: sbt.internal.bsp.Range, severity: Option[Long], code: Option[String], source: Option[String], message: String, relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation], dataKind: Option[String], data: Option[sbt.internal.bsp.ScalaDiagnostic]): Diagnostic = new Diagnostic(range, severity, code, source, message, relatedInformation, dataKind, data) + def apply(range: sbt.internal.bsp.Range, severity: Long, code: String, source: String, message: String, relatedInformation: Vector[sbt.internal.bsp.DiagnosticRelatedInformation], dataKind: String, data: sbt.internal.bsp.ScalaDiagnostic): Diagnostic = new Diagnostic(range, Option(severity), Option(code), Option(source), message, relatedInformation, Option(dataKind), Option(data)) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/DiagnosticRelatedInformation.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/DiagnosticRelatedInformation.scala new file mode 100644 index 000000000..c048fba0c --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/DiagnosticRelatedInformation.scala @@ -0,0 +1,43 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** + * Represents a related message and source code location for a diagnostic. + * This should be used to point to code locations that cause or are related to + * a diagnostics, e.g when duplicating a symbol in a scope. + * @param location The location of this related diagnostic information. + * @param message The message of this related diagnostic information. + */ +final class DiagnosticRelatedInformation private ( + val location: sbt.internal.bsp.Location, + val message: String) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: DiagnosticRelatedInformation => (this.location == x.location) && (this.message == x.message) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (37 * (17 + "sbt.internal.bsp.DiagnosticRelatedInformation".##) + location.##) + message.##) + } + override def toString: String = { + "DiagnosticRelatedInformation(" + location + ", " + message + ")" + } + private[this] def copy(location: sbt.internal.bsp.Location = location, message: String = message): DiagnosticRelatedInformation = { + new DiagnosticRelatedInformation(location, message) + } + def withLocation(location: sbt.internal.bsp.Location): DiagnosticRelatedInformation = { + copy(location = location) + } + def withMessage(message: String): DiagnosticRelatedInformation = { + copy(message = message) + } +} +object DiagnosticRelatedInformation { + + def apply(location: sbt.internal.bsp.Location, message: String): DiagnosticRelatedInformation = new DiagnosticRelatedInformation(location, message) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/Location.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/Location.scala new file mode 100644 index 000000000..1ee36e2be --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/Location.scala @@ -0,0 +1,37 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** Represents a location inside a resource, such as a line inside a text file. */ +final class Location private ( + val uri: String, + val range: sbt.internal.bsp.Range) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: Location => (this.uri == x.uri) && (this.range == x.range) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (37 * (17 + "sbt.internal.bsp.Location".##) + uri.##) + range.##) + } + override def toString: String = { + "Location(" + uri + ", " + range + ")" + } + private[this] def copy(uri: String = uri, range: sbt.internal.bsp.Range = range): Location = { + new Location(uri, range) + } + def withUri(uri: String): Location = { + copy(uri = uri) + } + def withRange(range: sbt.internal.bsp.Range): Location = { + copy(range = range) + } +} +object Location { + + def apply(uri: String, range: sbt.internal.bsp.Range): Location = new Location(uri, range) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaAction.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaAction.scala new file mode 100644 index 000000000..f608dbba9 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaAction.scala @@ -0,0 +1,54 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** + * A Scala action represents a change that can be performed in code. + * See also LSP: Code Action Request (https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_codeAction). + * @param title A short, human-readable, title for this code action. + * @param description A description that may be shown to the user client side to explain the action. + * @param edit The workspace edit this code action performs. + */ +final class ScalaAction private ( + val title: String, + val description: Option[String], + val edit: Option[sbt.internal.bsp.ScalaWorkspaceEdit]) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: ScalaAction => (this.title == x.title) && (this.description == x.description) && (this.edit == x.edit) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaAction".##) + title.##) + description.##) + edit.##) + } + override def toString: String = { + "ScalaAction(" + title + ", " + description + ", " + edit + ")" + } + private[this] def copy(title: String = title, description: Option[String] = description, edit: Option[sbt.internal.bsp.ScalaWorkspaceEdit] = edit): ScalaAction = { + new ScalaAction(title, description, edit) + } + def withTitle(title: String): ScalaAction = { + copy(title = title) + } + def withDescription(description: Option[String]): ScalaAction = { + copy(description = description) + } + def withDescription(description: String): ScalaAction = { + copy(description = Option(description)) + } + def withEdit(edit: Option[sbt.internal.bsp.ScalaWorkspaceEdit]): ScalaAction = { + copy(edit = edit) + } + def withEdit(edit: sbt.internal.bsp.ScalaWorkspaceEdit): ScalaAction = { + copy(edit = Option(edit)) + } +} +object ScalaAction { + + def apply(title: String, description: Option[String], edit: Option[sbt.internal.bsp.ScalaWorkspaceEdit]): ScalaAction = new ScalaAction(title, description, edit) + def apply(title: String, description: String, edit: sbt.internal.bsp.ScalaWorkspaceEdit): ScalaAction = new ScalaAction(title, Option(description), Option(edit)) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaDiagnostic.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaDiagnostic.scala new file mode 100644 index 000000000..8774922d7 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaDiagnostic.scala @@ -0,0 +1,40 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** + * ScalaDiagnostic is a data structure that contains Scala-specific + * metadata generated by Scala compilation. This metadata is + * embedded in the `data: Option[Json]` field of the Diagnostic definition, when + * the dataKind field contains "scala". + * @param actions Actions (also known as quick fixes) that are able to either fix or address + the issue that is causing this diagnostic. + */ +final class ScalaDiagnostic private ( + val actions: Vector[sbt.internal.bsp.ScalaAction]) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: ScalaDiagnostic => (this.actions == x.actions) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (17 + "sbt.internal.bsp.ScalaDiagnostic".##) + actions.##) + } + override def toString: String = { + "ScalaDiagnostic(" + actions + ")" + } + private[this] def copy(actions: Vector[sbt.internal.bsp.ScalaAction] = actions): ScalaDiagnostic = { + new ScalaDiagnostic(actions) + } + def withActions(actions: Vector[sbt.internal.bsp.ScalaAction]): ScalaDiagnostic = { + copy(actions = actions) + } +} +object ScalaDiagnostic { + + def apply(actions: Vector[sbt.internal.bsp.ScalaAction]): ScalaDiagnostic = new ScalaDiagnostic(actions) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTextEdit.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTextEdit.scala new file mode 100644 index 000000000..33f7be6a3 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTextEdit.scala @@ -0,0 +1,43 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** + * A textual edit applicable to a text document. + * @param range The range of the text document to be manipulated. To insert + text into a document create a range where start === end. + * @param newText The string to be inserted. For delete operations use an + empty string. + */ +final class ScalaTextEdit private ( + val range: sbt.internal.bsp.Range, + val newText: String) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: ScalaTextEdit => (this.range == x.range) && (this.newText == x.newText) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaTextEdit".##) + range.##) + newText.##) + } + override def toString: String = { + "ScalaTextEdit(" + range + ", " + newText + ")" + } + private[this] def copy(range: sbt.internal.bsp.Range = range, newText: String = newText): ScalaTextEdit = { + new ScalaTextEdit(range, newText) + } + def withRange(range: sbt.internal.bsp.Range): ScalaTextEdit = { + copy(range = range) + } + def withNewText(newText: String): ScalaTextEdit = { + copy(newText = newText) + } +} +object ScalaTextEdit { + + def apply(range: sbt.internal.bsp.Range, newText: String): ScalaTextEdit = new ScalaTextEdit(range, newText) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaWorkspaceEdit.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaWorkspaceEdit.scala new file mode 100644 index 000000000..6c6f59328 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaWorkspaceEdit.scala @@ -0,0 +1,33 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** A workspace edit represents changes to many resources managed in the workspace. */ +final class ScalaWorkspaceEdit private ( + val changes: Vector[sbt.internal.bsp.ScalaTextEdit]) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: ScalaWorkspaceEdit => (this.changes == x.changes) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (17 + "sbt.internal.bsp.ScalaWorkspaceEdit".##) + changes.##) + } + override def toString: String = { + "ScalaWorkspaceEdit(" + changes + ")" + } + private[this] def copy(changes: Vector[sbt.internal.bsp.ScalaTextEdit] = changes): ScalaWorkspaceEdit = { + new ScalaWorkspaceEdit(changes) + } + def withChanges(changes: Vector[sbt.internal.bsp.ScalaTextEdit]): ScalaWorkspaceEdit = { + copy(changes = changes) + } +} +object ScalaWorkspaceEdit { + + def apply(changes: Vector[sbt.internal.bsp.ScalaTextEdit]): ScalaWorkspaceEdit = new ScalaWorkspaceEdit(changes) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticFormats.scala index 64a3a224b..0e0291d9f 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticFormats.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticFormats.scala @@ -5,7 +5,7 @@ // DO NOT EDIT MANUALLY package sbt.internal.bsp.codec import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } -trait DiagnosticFormats { self: sbt.internal.bsp.codec.RangeFormats with sjsonnew.BasicJsonProtocol => +trait DiagnosticFormats { self: sbt.internal.bsp.codec.RangeFormats with sbt.internal.bsp.codec.DiagnosticRelatedInformationFormats with sbt.internal.bsp.codec.ScalaDiagnosticFormats with sjsonnew.BasicJsonProtocol => implicit lazy val DiagnosticFormat: JsonFormat[sbt.internal.bsp.Diagnostic] = new JsonFormat[sbt.internal.bsp.Diagnostic] { override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.Diagnostic = { __jsOpt match { @@ -16,8 +16,11 @@ implicit lazy val DiagnosticFormat: JsonFormat[sbt.internal.bsp.Diagnostic] = ne val code = unbuilder.readField[Option[String]]("code") val source = unbuilder.readField[Option[String]]("source") val message = unbuilder.readField[String]("message") + val relatedInformation = unbuilder.readField[Vector[sbt.internal.bsp.DiagnosticRelatedInformation]]("relatedInformation") + val dataKind = unbuilder.readField[Option[String]]("dataKind") + val data = unbuilder.readField[Option[sbt.internal.bsp.ScalaDiagnostic]]("data") unbuilder.endObject() - sbt.internal.bsp.Diagnostic(range, severity, code, source, message) + sbt.internal.bsp.Diagnostic(range, severity, code, source, message, relatedInformation, dataKind, data) case None => deserializationError("Expected JsObject but found None") } @@ -29,6 +32,9 @@ implicit lazy val DiagnosticFormat: JsonFormat[sbt.internal.bsp.Diagnostic] = ne builder.addField("code", obj.code) builder.addField("source", obj.source) builder.addField("message", obj.message) + builder.addField("relatedInformation", obj.relatedInformation) + builder.addField("dataKind", obj.dataKind) + builder.addField("data", obj.data) builder.endObject() } } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticRelatedInformationFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticRelatedInformationFormats.scala new file mode 100644 index 000000000..7886ec851 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DiagnosticRelatedInformationFormats.scala @@ -0,0 +1,29 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait DiagnosticRelatedInformationFormats { self: sbt.internal.bsp.codec.LocationFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val DiagnosticRelatedInformationFormat: JsonFormat[sbt.internal.bsp.DiagnosticRelatedInformation] = new JsonFormat[sbt.internal.bsp.DiagnosticRelatedInformation] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.DiagnosticRelatedInformation = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val location = unbuilder.readField[sbt.internal.bsp.Location]("location") + val message = unbuilder.readField[String]("message") + unbuilder.endObject() + sbt.internal.bsp.DiagnosticRelatedInformation(location, message) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.DiagnosticRelatedInformation, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("location", obj.location) + builder.addField("message", obj.message) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala index 5c087e4b4..3a3ff0906 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala @@ -15,6 +15,12 @@ trait JsonProtocol extends sjsonnew.BasicJsonProtocol with sbt.internal.bsp.codec.TextDocumentIdentifierFormats with sbt.internal.bsp.codec.PositionFormats with sbt.internal.bsp.codec.RangeFormats + with sbt.internal.bsp.codec.LocationFormats + with sbt.internal.bsp.codec.DiagnosticRelatedInformationFormats + with sbt.internal.bsp.codec.ScalaTextEditFormats + with sbt.internal.bsp.codec.ScalaWorkspaceEditFormats + with sbt.internal.bsp.codec.ScalaActionFormats + with sbt.internal.bsp.codec.ScalaDiagnosticFormats with sbt.internal.bsp.codec.DiagnosticFormats with sbt.internal.bsp.codec.BuildClientCapabilitiesFormats with sbt.internal.bsp.codec.InitializeBuildParamsFormats diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/LocationFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/LocationFormats.scala new file mode 100644 index 000000000..54da58361 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/LocationFormats.scala @@ -0,0 +1,29 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait LocationFormats { self: sbt.internal.bsp.codec.RangeFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val LocationFormat: JsonFormat[sbt.internal.bsp.Location] = new JsonFormat[sbt.internal.bsp.Location] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.Location = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val uri = unbuilder.readField[String]("uri") + val range = unbuilder.readField[sbt.internal.bsp.Range]("range") + unbuilder.endObject() + sbt.internal.bsp.Location(uri, range) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.Location, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("uri", obj.uri) + builder.addField("range", obj.range) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaActionFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaActionFormats.scala new file mode 100644 index 000000000..6df072a38 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaActionFormats.scala @@ -0,0 +1,31 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait ScalaActionFormats { self: sbt.internal.bsp.codec.ScalaWorkspaceEditFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val ScalaActionFormat: JsonFormat[sbt.internal.bsp.ScalaAction] = new JsonFormat[sbt.internal.bsp.ScalaAction] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.ScalaAction = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val title = unbuilder.readField[String]("title") + val description = unbuilder.readField[Option[String]]("description") + val edit = unbuilder.readField[Option[sbt.internal.bsp.ScalaWorkspaceEdit]]("edit") + unbuilder.endObject() + sbt.internal.bsp.ScalaAction(title, description, edit) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.ScalaAction, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("title", obj.title) + builder.addField("description", obj.description) + builder.addField("edit", obj.edit) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaDiagnosticFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaDiagnosticFormats.scala new file mode 100644 index 000000000..081333352 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaDiagnosticFormats.scala @@ -0,0 +1,27 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait ScalaDiagnosticFormats { self: sbt.internal.bsp.codec.ScalaActionFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val ScalaDiagnosticFormat: JsonFormat[sbt.internal.bsp.ScalaDiagnostic] = new JsonFormat[sbt.internal.bsp.ScalaDiagnostic] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.ScalaDiagnostic = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val actions = unbuilder.readField[Vector[sbt.internal.bsp.ScalaAction]]("actions") + unbuilder.endObject() + sbt.internal.bsp.ScalaDiagnostic(actions) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.ScalaDiagnostic, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("actions", obj.actions) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaTextEditFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaTextEditFormats.scala new file mode 100644 index 000000000..320ff8a55 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaTextEditFormats.scala @@ -0,0 +1,29 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait ScalaTextEditFormats { self: sbt.internal.bsp.codec.RangeFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val ScalaTextEditFormat: JsonFormat[sbt.internal.bsp.ScalaTextEdit] = new JsonFormat[sbt.internal.bsp.ScalaTextEdit] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.ScalaTextEdit = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val range = unbuilder.readField[sbt.internal.bsp.Range]("range") + val newText = unbuilder.readField[String]("newText") + unbuilder.endObject() + sbt.internal.bsp.ScalaTextEdit(range, newText) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.ScalaTextEdit, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("range", obj.range) + builder.addField("newText", obj.newText) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaWorkspaceEditFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaWorkspaceEditFormats.scala new file mode 100644 index 000000000..6e09a05af --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/ScalaWorkspaceEditFormats.scala @@ -0,0 +1,27 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait ScalaWorkspaceEditFormats { self: sbt.internal.bsp.codec.ScalaTextEditFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val ScalaWorkspaceEditFormat: JsonFormat[sbt.internal.bsp.ScalaWorkspaceEdit] = new JsonFormat[sbt.internal.bsp.ScalaWorkspaceEdit] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.ScalaWorkspaceEdit = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val changes = unbuilder.readField[Vector[sbt.internal.bsp.ScalaTextEdit]]("changes") + unbuilder.endObject() + sbt.internal.bsp.ScalaWorkspaceEdit(changes) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.ScalaWorkspaceEdit, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("changes", obj.changes) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband/bsp.contra b/protocol/src/main/contraband/bsp.contra index d5f0beec5..e0f2fd36f 100644 --- a/protocol/src/main/contraband/bsp.contra +++ b/protocol/src/main/contraband/bsp.contra @@ -113,6 +113,12 @@ type Range { end: sbt.internal.bsp.Position! } +## Represents a location inside a resource, such as a line inside a text file. +type Location { + uri: String! + range: sbt.internal.bsp.Range! +} + ## Represents a diagnostic, such as a compiler error or warning. ## Diagnostic objects are only valid in the scope of a resource. type Diagnostic { @@ -132,6 +138,67 @@ type Diagnostic { ## The diagnostic's message. message: String! + + ## A list of related diagnostic information, e.g. when symbol-names within + ## a scope collide all definitions can be marked via this property. + relatedInformation: [sbt.internal.bsp.DiagnosticRelatedInformation] @since("1.8.0") + + ## Kind of data to expect in the `data` field. If this field is not set, + ## the kind of data is not specified. + dataKind: String @since("1.9.0") + + ## A data entry field. + data: sbt.internal.bsp.ScalaDiagnostic @since("1.9.0") +} + +## Represents a related message and source code location for a diagnostic. +## This should be used to point to code locations that cause or are related to +## a diagnostics, e.g when duplicating a symbol in a scope. +type DiagnosticRelatedInformation { + ## The location of this related diagnostic information. + location: sbt.internal.bsp.Location! + + ## The message of this related diagnostic information. + message: String! +} + +## ScalaDiagnostic is a data structure that contains Scala-specific +## metadata generated by Scala compilation. This metadata is +## embedded in the `data: Option[Json]` field of the Diagnostic definition, when +## the dataKind field contains "scala". +type ScalaDiagnostic { + ## Actions (also known as quick fixes) that are able to either fix or address + ## the issue that is causing this diagnostic. + actions: [sbt.internal.bsp.ScalaAction] +} + +## A Scala action represents a change that can be performed in code. +## See also LSP: Code Action Request (https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_codeAction). +type ScalaAction { + ## A short, human-readable, title for this code action. + title: String! + + ## A description that may be shown to the user client side to explain the action. + description: String + + ## The workspace edit this code action performs. + edit: sbt.internal.bsp.ScalaWorkspaceEdit +} + +## A workspace edit represents changes to many resources managed in the workspace. +type ScalaWorkspaceEdit { + changes: [sbt.internal.bsp.ScalaTextEdit] +} + +## A textual edit applicable to a text document. +type ScalaTextEdit { + ## The range of the text document to be manipulated. To insert + ## text into a document create a range where start === end. + range: sbt.internal.bsp.Range! + + ## The string to be inserted. For delete operations use an + ## empty string. + newText: String! } ## Initialize Build Request From dc79c592cf484533635cb519833f1e06559c1816 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Mon, 22 May 2023 21:53:09 +0000 Subject: [PATCH 063/207] Update typelevel toolkit, config test artifact --- main/src/main/scala/sbt/TemplateCommandUtil.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 95866ff98..e750a65cb 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -289,14 +289,17 @@ libraryDependencies += (toolkitTest % Test) } private def typelevelToolkitTemplate(): Unit = { - val defaultTypelevelToolkitV = "0.0.8" + val defaultTypelevelToolkitV = "0.0.11" val scalaV = ask("Scala version", defaultScalaV) val toolkitV = ask("Typelevel Toolkit version", defaultTypelevelToolkitV) val content = s""" -val toolkit = "org.typelevel" %% "toolkit" % "$toolkitV" +val toolkitV = "$toolkitV" +val toolkit = "org.typelevel" %% "toolkit" % toolkitV +val toolkitTest = "org.typelevel" %% "toolkit-test" % toolkitV ThisBuild / scalaVersion := "$scalaV" libraryDependencies += toolkit +libraryDependencies += (toolkitTest % Test) """ IO.write(new File("build.sbt"), content) copyResource("TypelevelMain.scala.txt", new File("src/main/scala/example/Main.scala")) From 1f1ee778e38b1bf495b0420d8ac9a42fffd19144 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 1 Jun 2023 12:13:40 -0400 Subject: [PATCH 064/207] Update Scala to 2.12.18 Fixes https://github.com/sbt/sbt/issues/7235 --- .github/workflows/ci.yml | 2 +- main/src/main/scala/sbt/PluginCross.scala | 2 +- project/Dependencies.scala | 2 +- sbt-app/src/sbt-test/actions/cross-advanced/build.sbt | 2 +- sbt-app/src/sbt-test/actions/cross-advanced/test | 2 +- .../actions/cross-strict-aggregation-scala-3/build.sbt | 6 +++--- .../src/sbt-test/actions/cross-strict-aggregation/build.sbt | 2 +- sbt-app/src/sbt-test/compiler-project/run-test/build.sbt | 2 +- .../sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt | 2 +- .../src/sbt-test/dependency-graph/toFileSubTask/build.sbt | 2 +- sbt-app/src/sbt-test/project/sbt-plugin/build.sbt | 2 +- .../sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt | 2 +- sbt-app/src/sbt-test/project/unified/build.sbt | 2 +- sbt-app/src/sbt-test/source-dependencies/constants/test | 2 +- .../src/sbt-test/tests/scala-instance-classloader/build.sbt | 2 +- server-test/src/server-test/response/build.sbt | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f268cc16..35c2b86c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,7 +52,7 @@ jobs: env: JAVA_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 JVM_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 - SCALA_212: 2.12.17 + SCALA_212: 2.12.18 SCALA_213: 2.13.8 SCALA_3: 3.1.0 UTIL_TESTS: "utilCache/test utilControl/test utilInterface/test utilLogging/test utilPosition/test utilRelation/test utilScripted/test utilTracking/test" diff --git a/main/src/main/scala/sbt/PluginCross.scala b/main/src/main/scala/sbt/PluginCross.scala index dbadb542a..49b953541 100644 --- a/main/src/main/scala/sbt/PluginCross.scala +++ b/main/src/main/scala/sbt/PluginCross.scala @@ -99,7 +99,7 @@ private[sbt] object PluginCross { VersionNumber(sv) match { case VersionNumber(Seq(0, 12, _*), _, _) => "2.9.2" case VersionNumber(Seq(0, 13, _*), _, _) => "2.10.7" - case VersionNumber(Seq(1, 0, _*), _, _) => "2.12.17" + case VersionNumber(Seq(1, 0, _*), _, _) => "2.12.18" case _ => sys.error(s"Unsupported sbt binary version: $sv") } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index f4dc3a7e1..fa45615e2 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -4,7 +4,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { // WARNING: Please Scala update versions in PluginCross.scala too - val scala212 = "2.12.17" + val scala212 = "2.12.18" val scala213 = "2.13.8" val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up") val baseScalaVersion = scala212 diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt index 1a8fa296a..bc833fd93 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt @@ -1,6 +1,6 @@ lazy val check = taskKey[Unit]("") lazy val compile2 = taskKey[Unit]("") -lazy val scala212 = "2.12.17" +lazy val scala212 = "2.12.18" lazy val root = (project in file(".")) .aggregate(foo, bar, client) diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/test b/sbt-app/src/sbt-test/actions/cross-advanced/test index 3b074490d..4828b39b9 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/test +++ b/sbt-app/src/sbt-test/actions/cross-advanced/test @@ -17,7 +17,7 @@ ## test + with command or alias > clean ## for command cross building you do need crossScalaVerions on root -> set root/crossScalaVersions := Seq("2.12.17", "2.13.1") +> set root/crossScalaVersions := Seq("2.12.18", "2.13.1") > + build $ exists foo/target/scala-2.12 $ exists foo/target/scala-2.13 diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt index aca345c51..53d1c7234 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt @@ -1,14 +1,14 @@ -scalaVersion := "2.12.17" +scalaVersion := "2.12.18" lazy val core = project .settings( - crossScalaVersions := Seq("2.12.17", "3.0.2", "3.1.2") + crossScalaVersions := Seq("2.12.18", "3.0.2", "3.1.2") ) lazy val subproj = project .dependsOn(core) .settings( - crossScalaVersions := Seq("2.12.17", "3.1.2"), + crossScalaVersions := Seq("2.12.18", "3.1.2"), // a random library compiled against Scala 3.1 libraryDependencies += "org.http4s" %% "http4s-core" % "0.23.12" ) diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt index f65bc2364..edba44f2f 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt @@ -1,4 +1,4 @@ -lazy val scala212 = "2.12.17" +lazy val scala212 = "2.12.18" lazy val scala213 = "2.13.1" ThisBuild / scalaVersion := scala212 diff --git a/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt b/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt index 1019be51a..78c29bca5 100644 --- a/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.17" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies ++= Seq( "com.novocode" % "junit-interface" % "0.5" % Test, diff --git a/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt b/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt index 5ba1d09ce..3fce90791 100644 --- a/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.17" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies ++= Seq( "org.slf4j" % "slf4j-api" % "1.7.2", diff --git a/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt b/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt index 85fd38f7f..693894d50 100644 --- a/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt @@ -1,5 +1,5 @@ // ThisBuild / useCoursier := false -ThisBuild / scalaVersion := "2.12.17" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / organization := "org.example" ThisBuild / version := "0.1" diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt b/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt index d0943ff9d..fead2a619 100644 --- a/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt +++ b/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt @@ -1,6 +1,6 @@ lazy val root = project.in(file(".")) .enablePlugins(SbtPlugin) .settings( - scalaVersion := "2.12.17", + scalaVersion := "2.12.18", scalacOptions ++= Seq("-Xfatal-warnings", "-Xlint") ) diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt index 61199e931..242db6841 100644 --- a/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt +++ b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt @@ -1,6 +1,6 @@ lazy val root = project.in(file(".")) .settings( - scalaVersion := "2.12.17", + scalaVersion := "2.12.18", sbtPlugin := true, scalacOptions ++= Seq("-Xfatal-warnings", "-Xlint") ) diff --git a/sbt-app/src/sbt-test/project/unified/build.sbt b/sbt-app/src/sbt-test/project/unified/build.sbt index fe6b1a94a..c4a398274 100644 --- a/sbt-app/src/sbt-test/project/unified/build.sbt +++ b/sbt-app/src/sbt-test/project/unified/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.17" +ThisBuild / scalaVersion := "2.12.18" import sbt.internal.CommandStrings.{ inspectBrief, inspectDetailed } import sbt.internal.Inspect diff --git a/sbt-app/src/sbt-test/source-dependencies/constants/test b/sbt-app/src/sbt-test/source-dependencies/constants/test index eeebe3599..8672882ba 100644 --- a/sbt-app/src/sbt-test/source-dependencies/constants/test +++ b/sbt-app/src/sbt-test/source-dependencies/constants/test @@ -1,4 +1,4 @@ -> ++2.12.17! +> ++2.12.18! $ copy-file changes/B.scala B.scala diff --git a/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt b/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt index 7dcf87b1e..8080681ba 100644 --- a/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt +++ b/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt @@ -3,7 +3,7 @@ import sbt.internal.inc.ScalaInstance lazy val OtherScala = config("other-scala").hide lazy val junitinterface = "com.novocode" % "junit-interface" % "0.11" lazy val akkaActor = "com.typesafe.akka" %% "akka-actor" % "2.5.17" -ThisBuild / scalaVersion := "2.12.17" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .configs(OtherScala) diff --git a/server-test/src/server-test/response/build.sbt b/server-test/src/server-test/response/build.sbt index 9bf691e56..8db1f47e6 100644 --- a/server-test/src/server-test/response/build.sbt +++ b/server-test/src/server-test/response/build.sbt @@ -1,6 +1,6 @@ import sbt.internal.server.{ ServerHandler, ServerIntent } -ThisBuild / scalaVersion := "2.12.17" +ThisBuild / scalaVersion := "2.12.18" Global / serverLog / logLevel := Level.Debug // custom handler From 7c7576843a3517cfeb36786767b57dec7d4ebeed Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 1 Jun 2023 22:45:51 -0400 Subject: [PATCH 065/207] Fix sbt init menu Problem ------- sbt init menu doesn't pick the right template in the latter half. Solution -------- This fixes the mapping between the position and the letter. --- main/src/main/scala/sbt/TemplateCommandUtil.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index e750a65cb..c8a611aa2 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -183,7 +183,7 @@ private[sbt] object TemplateCommandUtil { else ITerminal.withStreams(true, false) { val mappingList = templates.zipWithIndex.map { - case (v, idx) => nonMoveLetters(idx).toString -> v + case (v, idx) => toLetter(idx) -> v } val out = term.printStream out.println("") @@ -194,10 +194,13 @@ private[sbt] object TemplateCommandUtil { mappings.get(ans).map(_._1).toList } + private def toLetter(idx: Int): String = + nonMoveLetters(idx).toString + private def askTemplate(mappingList: List[(String, (String, String))], focus: Int): String = { val msg = "Select a template" displayMappings(mappingList, focus) - val focusValue = ('a' + focus).toChar.toString + val focusValue = toLetter(focus) if (!isAnsiSupported) ask(msg, focusValue) else { val out = term.printStream From 10a79bc6b0fa9472b7a5e0478f0e1f343ccf5e24 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 1 Jun 2023 23:24:31 -0400 Subject: [PATCH 066/207] Update Scala to 2.13.10 --- .github/workflows/ci.yml | 2 +- project/Dependencies.scala | 2 +- sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt | 2 +- server-test/src/server-test/buildserver/build.sbt | 2 +- server-test/src/test/scala/testpkg/BuildServerTest.scala | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35c2b86c9..a384fa065 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,7 @@ jobs: JAVA_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 JVM_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 SCALA_212: 2.12.18 - SCALA_213: 2.13.8 + SCALA_213: 2.13.10 SCALA_3: 3.1.0 UTIL_TESTS: "utilCache/test utilControl/test utilInterface/test utilLogging/test utilPosition/test utilRelation/test utilScripted/test utilTracking/test" SBT_LOCAL: false diff --git a/project/Dependencies.scala b/project/Dependencies.scala index fa45615e2..acb95444c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -5,7 +5,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { // WARNING: Please Scala update versions in PluginCross.scala too val scala212 = "2.12.18" - val scala213 = "2.13.8" + val scala213 = "2.13.10" val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up") val baseScalaVersion = scala212 def nightlyVersion: Option[String] = diff --git a/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt b/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt index f28325922..04605f610 100644 --- a/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt +++ b/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.8" +ThisBuild / scalaVersion := "2.13.10" ThisBuild / scalacOptions += "-Ytasty-reader" lazy val scala3code = project diff --git a/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt b/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt index fe7f9dd1f..b004ffbd7 100644 --- a/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt +++ b/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt @@ -1,7 +1,7 @@ ThisBuild / scalaVersion := "3.1.3" ThisBuild / scalacOptions += "-Ytasty-reader" -lazy val scala213 = "2.13.8" +lazy val scala213 = "2.13.10" lazy val root = (project in file(".")) .aggregate(fooApp, fooCore, barApp, barCore) diff --git a/server-test/src/server-test/buildserver/build.sbt b/server-test/src/server-test/buildserver/build.sbt index 7cab7de2e..f73cc11df 100644 --- a/server-test/src/server-test/buildserver/build.sbt +++ b/server-test/src/server-test/buildserver/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.8" +ThisBuild / scalaVersion := "2.13.10" Global / serverLog / logLevel := Level.Debug diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index b4f25aa88..f0d5011b1 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -283,7 +283,7 @@ object BuildServerTest extends AbstractServerTest { assert(processing("buildTarget/scalacOptions")) assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && - (s contains "scala-library-2.13.8.jar") + (s contains "scala-library-2.13.10.jar") }) } From 5484ea7a9ac012f4732799cf5356828cd56eceb7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 2 Jun 2023 04:15:11 -0400 Subject: [PATCH 067/207] Zinc 1.9.0 --- project/Dependencies.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index acb95444c..9aa8cdcb7 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,10 +12,10 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.9.0-RC3") + private val ioVersion = nightlyVersion.getOrElse("1.9.0") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0-RC3") - val zincVersion = nightlyVersion.getOrElse("1.9.0-RC3") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0") + val zincVersion = nightlyVersion.getOrElse("1.9.0") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 2d7db22785726f30a95a0b2d7aea7ae5059ab51c Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 2 Jun 2023 05:40:19 -0400 Subject: [PATCH 068/207] sbt 1.9.0 --- sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt b/sbt index d548bc82b..e181343f3 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.0-RC3" +declare builtin_sbt_version="1.9.0" declare -a residual_args declare -a java_args declare -a scalac_args From ebbf0617a23c391f8ecffa9938d8697fa43d35bc Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Sat, 3 Jun 2023 22:27:45 +0200 Subject: [PATCH 069/207] Update Scala to 2.13.11 --- .github/workflows/ci.yml | 2 +- project/Dependencies.scala | 2 +- sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt | 2 +- sbt-app/src/sbt-test/tests/weaver-cats/build.sbt | 2 +- sbt-app/src/sbt-test/tests/zio-test/build.sbt | 2 +- server-test/src/server-test/buildserver/build.sbt | 2 +- server-test/src/test/scala/testpkg/BuildServerTest.scala | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a384fa065..746cadd5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,7 @@ jobs: JAVA_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 JVM_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 SCALA_212: 2.12.18 - SCALA_213: 2.13.10 + SCALA_213: 2.13.11 SCALA_3: 3.1.0 UTIL_TESTS: "utilCache/test utilControl/test utilInterface/test utilLogging/test utilPosition/test utilRelation/test utilScripted/test utilTracking/test" SBT_LOCAL: false diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 9aa8cdcb7..935d0a5a9 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -5,7 +5,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { // WARNING: Please Scala update versions in PluginCross.scala too val scala212 = "2.12.18" - val scala213 = "2.13.10" + val scala213 = "2.13.11" val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up") val baseScalaVersion = scala212 def nightlyVersion: Option[String] = diff --git a/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt b/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt index 04605f610..c7b8ec465 100644 --- a/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt +++ b/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.10" +ThisBuild / scalaVersion := "2.13.11" ThisBuild / scalacOptions += "-Ytasty-reader" lazy val scala3code = project diff --git a/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt b/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt index b004ffbd7..dc5cfcb3d 100644 --- a/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt +++ b/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt @@ -1,7 +1,7 @@ ThisBuild / scalaVersion := "3.1.3" ThisBuild / scalacOptions += "-Ytasty-reader" -lazy val scala213 = "2.13.10" +lazy val scala213 = "2.13.11" lazy val root = (project in file(".")) .aggregate(fooApp, fooCore, barApp, barCore) diff --git a/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt b/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt index 27ab29d39..12ded730a 100644 --- a/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt +++ b/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt @@ -1,3 +1,3 @@ -ThisBuild / scalaVersion := "2.13.10" +ThisBuild / scalaVersion := "2.13.11" libraryDependencies += "com.disneystreaming" %% "weaver-cats" % "0.8.3" % Test diff --git a/sbt-app/src/sbt-test/tests/zio-test/build.sbt b/sbt-app/src/sbt-test/tests/zio-test/build.sbt index a2ddfa655..31c84bf49 100644 --- a/sbt-app/src/sbt-test/tests/zio-test/build.sbt +++ b/sbt-app/src/sbt-test/tests/zio-test/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.10" +ThisBuild / scalaVersion := "2.13.11" libraryDependencies += "dev.zio" %% "zio-test" % "2.0.2" % Test libraryDependencies += "dev.zio" %% "zio-test-sbt" % "2.0.2" % Test diff --git a/server-test/src/server-test/buildserver/build.sbt b/server-test/src/server-test/buildserver/build.sbt index f73cc11df..b5bd5d749 100644 --- a/server-test/src/server-test/buildserver/build.sbt +++ b/server-test/src/server-test/buildserver/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.10" +ThisBuild / scalaVersion := "2.13.11" Global / serverLog / logLevel := Level.Debug diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index f0d5011b1..84edd316a 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -283,7 +283,7 @@ object BuildServerTest extends AbstractServerTest { assert(processing("buildTarget/scalacOptions")) assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && - (s contains "scala-library-2.13.10.jar") + (s contains "scala-library-2.13.11.jar") }) } From 4cf2b7269d2cfa81f99ee933111c1af54dff525d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=8BAndrzej=20Ressel?= Date: Sat, 3 Jun 2023 22:44:19 +0200 Subject: [PATCH 070/207] Cache echoEnabled --- .../main/scala/sbt/internal/util/Terminal.scala | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala index 41b687ca5..c935a0999 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala @@ -874,13 +874,19 @@ object Terminal { override lazy val isAnsiSupported: Boolean = !isDumbTerminal && Terminal.isAnsiSupported && !isCI override private[sbt] def progressState: ProgressState = consoleProgressState.get - override def isEchoEnabled: Boolean = - try system.echo() - catch { case _: InterruptedIOException => false } override def isSuccessEnabled: Boolean = true + private lazy val echoEnabled: AtomicBoolean = new AtomicBoolean({ + try system.echo() + catch { + case _: InterruptedIOException => false + } + }) + override def isEchoEnabled: Boolean = echoEnabled.get() override def setEchoEnabled(toggle: Boolean): Unit = - try Util.ignoreResult(system.echo(toggle)) - catch { case _: InterruptedIOException => } + try { + Util.ignoreResult(system.echo(toggle)) + echoEnabled.set(toggle) + } catch { case _: InterruptedIOException => } override def getBooleanCapability(capability: String): Boolean = capabilityMap.get(capability).fold(false)(system.getBooleanCapability) override def getNumericCapability(capability: String): Integer = From 4b769d06c38a29bb531ea9f49f31d99c60bfa092 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Sun, 4 Jun 2023 01:08:17 +0200 Subject: [PATCH 071/207] Upgrade to latest Scala 2.12.x in launcher-package --- launcher-package/build.sbt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index 91a75b44e..95a402416 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -26,7 +26,7 @@ lazy val sbtVersionToRelease = sys.props.getOrElse("sbt.build.version", sys.env. })) lazy val scala210 = "2.10.7" -lazy val scala212 = "2.12.15" +lazy val scala212 = "2.12.18" lazy val scala210Jline = "org.scala-lang" % "jline" % scala210 lazy val jansi = { if (sbtVersionToRelease startsWith "1.") "org.fusesource.jansi" % "jansi" % "1.12" @@ -34,8 +34,8 @@ lazy val jansi = { } lazy val scala212Compiler = "org.scala-lang" % "scala-compiler" % scala212 lazy val scala212Jline = "jline" % "jline" % "2.14.6" -// use the scala-xml version used by the compiler not the latest: https://github.com/scala/scala/blob/v2.12.14/versions.properties#L21 -lazy val scala212Xml = "org.scala-lang.modules" % "scala-xml_2.12" % "1.0.6" +// use the scala-xml version used by the compiler not the latest: https://github.com/scala/scala/blob/v2.12.18/versions.properties#L21 +lazy val scala212Xml = "org.scala-lang.modules" % "scala-xml_2.12" % "2.1.0" lazy val sbtActual = "org.scala-sbt" % "sbt" % sbtVersionToRelease lazy val sbt013ExtraDeps = { From 01fb8430ba29729db763bf4bc95de335e763d96a Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Sun, 4 Jun 2023 01:09:29 +0200 Subject: [PATCH 072/207] Use latest sbt 1.9.0 --- project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build.properties b/project/build.properties index 46e43a97e..40b3b8e7b 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.8.2 +sbt.version=1.9.0 From b01f58345142249d5bc0fc78968969cc3939c3d1 Mon Sep 17 00:00:00 2001 From: Kevin Lee Date: Mon, 5 Jun 2023 20:11:08 +1000 Subject: [PATCH 073/207] Add: hedgehog to supported default testFrameworks --- sbt-app/src/sbt-test/tests/hedgehog/build.sbt | 9 +++++++++ .../src/test/scala/spec/FailureSpec.scala | 16 ++++++++++++++++ .../src/test/scala/spec/SuccessSpec.scala | 17 +++++++++++++++++ sbt-app/src/sbt-test/tests/hedgehog/test | 2 ++ testing/src/main/scala/sbt/TestFramework.scala | 3 ++- 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 sbt-app/src/sbt-test/tests/hedgehog/build.sbt create mode 100644 sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/FailureSpec.scala create mode 100644 sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/SuccessSpec.scala create mode 100644 sbt-app/src/sbt-test/tests/hedgehog/test diff --git a/sbt-app/src/sbt-test/tests/hedgehog/build.sbt b/sbt-app/src/sbt-test/tests/hedgehog/build.sbt new file mode 100644 index 000000000..61ed9f03c --- /dev/null +++ b/sbt-app/src/sbt-test/tests/hedgehog/build.sbt @@ -0,0 +1,9 @@ +ThisBuild / scalaVersion := "2.13.11" + +val hedgehogVersion = "0.10.0" + +libraryDependencies ++= Seq( + "qa.hedgehog" %% "hedgehog-core" % hedgehogVersion, + "qa.hedgehog" %% "hedgehog-runner" % hedgehogVersion, + "qa.hedgehog" %% "hedgehog-sbt" % hedgehogVersion +).map(_ % Test) diff --git a/sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/FailureSpec.scala b/sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/FailureSpec.scala new file mode 100644 index 000000000..05da4684f --- /dev/null +++ b/sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/FailureSpec.scala @@ -0,0 +1,16 @@ +package spec + +import hedgehog._ +import hedgehog.runner._ + +object FailureSpec extends Properties { + def tests: List[Test] = + List( + example("test failure", testFailure), + ) + + def testFailure: Result = { + // expected to fail + 1 ==== 2 + } +} diff --git a/sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/SuccessSpec.scala b/sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/SuccessSpec.scala new file mode 100644 index 000000000..dd71589c1 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/hedgehog/src/test/scala/spec/SuccessSpec.scala @@ -0,0 +1,17 @@ +package spec + +import hedgehog._ +import hedgehog.runner._ + +object SuccessSpec extends Properties { + def tests: List[Test] = + List( + property("reverse", testReverse), + ) + + def testReverse: Property = + for { + xs <- Gen.alpha.list(Range.linear(0, 100)).log("xs") + } yield xs.reverse.reverse ==== xs + +} diff --git a/sbt-app/src/sbt-test/tests/hedgehog/test b/sbt-app/src/sbt-test/tests/hedgehog/test new file mode 100644 index 000000000..7e85d1433 --- /dev/null +++ b/sbt-app/src/sbt-test/tests/hedgehog/test @@ -0,0 +1,2 @@ +> testOnly spec.SuccessSpec +-> testOnly spec.FailureSpec diff --git a/testing/src/main/scala/sbt/TestFramework.scala b/testing/src/main/scala/sbt/TestFramework.scala index ab229487f..4cd8f0ca5 100644 --- a/testing/src/main/scala/sbt/TestFramework.scala +++ b/testing/src/main/scala/sbt/TestFramework.scala @@ -29,9 +29,10 @@ object TestFrameworks { val MUnit = TestFramework("munit.Framework") val ZIOTest = TestFramework("zio.test.sbt.ZTestFramework") val WeaverTestCats = TestFramework("weaver.framework.CatsEffect") + val Hedgehog = TestFramework("hedgehog.sbt.Framework") val All: Seq[TestFramework] = - Seq(ScalaCheck, Specs2, Specs, ScalaTest, JUnit, MUnit, ZIOTest, WeaverTestCats) + Seq(ScalaCheck, Specs2, Specs, ScalaTest, JUnit, MUnit, ZIOTest, WeaverTestCats, Hedgehog) } final class TestFramework(val implClassNames: String*) extends Serializable { From dd00e143f27ad3e74c0b5049138e4b9b4e6b48ca Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 5 Jun 2023 11:51:34 +0200 Subject: [PATCH 074/207] Fix #7285: use legacy Maven style on publishLocal --- main/src/main/scala/sbt/Defaults.scala | 19 ++++++++++++------- .../sbt-plugin-publish/build.sbt | 12 ++++++++++++ .../sbt-plugin-publish/test | 5 +++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 3011f79ba..0dd04547b 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2835,14 +2835,21 @@ object Classpaths { ) ) - private val publishSbtPluginMavenStyle = Def.task { - sbtPlugin.value && publishMavenStyle.value - } + private lazy val publishSbtPluginMavenStyle = Def.task(sbtPlugin.value && publishMavenStyle.value) + private lazy val packagedDefaultArtifacts = packaged(defaultArtifactTasks) + private lazy val emptyArtifacts = Def.task(Map.empty[Artifact, File]) + val jvmPublishSettings: Seq[Setting[_]] = Seq( artifacts := artifactDefs(defaultArtifactTasks).value, packagedArtifacts := Def - .ifS(publishSbtPluginMavenStyle)(mavenArtifactsOfSbtPlugin)(packaged(defaultArtifactTasks)) + .ifS(publishSbtPluginMavenStyle)(mavenArtifactsOfSbtPlugin)(packagedDefaultArtifacts) .value, + // publishLocal needs legacy artifacts (see https://github.com/sbt/sbt/issues/7285) + publishLocal / packagedArtifacts ++= { + if (sbtPlugin.value && !sbtPluginPublishLegacyMavenStyle.value) { + packagedDefaultArtifacts.value + } else Map.empty[Artifact, File] + } ) ++ RemoteCache.projectSettings /** @@ -2867,9 +2874,7 @@ object Classpaths { } val packages = legacyPackages.map { case (artifact, file) => copyArtifact(artifact, file) } val legacyPackagedArtifacts = Def - .ifS(sbtPluginPublishLegacyMavenStyle.toTask)(packaged(defaultArtifactTasks))( - Def.task(Map.empty[Artifact, File]) - ) + .ifS(sbtPluginPublishLegacyMavenStyle.toTask)(packagedDefaultArtifacts)(emptyArtifacts) .value packages + (addSuffix(legacyArtifact) -> pom) ++ legacyPackagedArtifacts } diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt index 27cb09743..b49b1a248 100644 --- a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/build.sbt @@ -73,6 +73,18 @@ lazy val testMaven2 = project.in(file("test-maven-2")) ).value ) +lazy val testLocal2 = project.in(file("test-local-2")) + .settings( + addSbtPlugin("org.example" % "sbt-plugin-2" % "0.1.0-SNAPSHOT"), + checkUpdate := checkUpdateDef( + "sbt-plugin-2.jar", // resolved from local repository + "sbt-plugin-example-diamond_2.12_1.0-0.5.0.jar", + "sbt-plugin-example-left_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-right_2.12_1.0-0.3.0.jar", + "sbt-plugin-example-bottom_2.12_1.0-0.3.0.jar", + ).value + ) + lazy val checkPackagedArtifacts = taskKey[Unit]("check the packaged artifacts") lazy val checkPublish = taskKey[Unit]("check publish") lazy val checkUpdate = taskKey[Unit]("check update") diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test index e5e7096dd..4816c7b88 100644 --- a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test @@ -17,3 +17,8 @@ > testMaven2 / checkUpdate > set testMaven2 / useCoursier := false > testMaven2 / checkUpdate + +> sbtPlugin2 / publishLocal +> testLocal2 / checkUpdate +> set testLocal2 / useCoursier := false +> testLocal2 / checkUpdate From 9707e1a3f8be8e39a0a7fce73a32004ffbdbffa9 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 5 Jun 2023 15:14:53 +0200 Subject: [PATCH 075/207] Clear warnings in scripted actions/external-doc --- .../src/sbt-test/actions/external-doc/build.sbt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sbt-app/src/sbt-test/actions/external-doc/build.sbt b/sbt-app/src/sbt-test/actions/external-doc/build.sbt index fe2d502d8..af66bbdf3 100644 --- a/sbt-app/src/sbt-test/actions/external-doc/build.sbt +++ b/sbt-app/src/sbt-test/actions/external-doc/build.sbt @@ -2,23 +2,23 @@ ThisBuild / useCoursier := false Seq( - autoAPIMappings in ThisBuild := true, - publishArtifact in (ThisBuild, packageDoc) := false, - publishArtifact in packageSrc := false, - organization in ThisBuild := "org.example", + ThisBuild / autoAPIMappings := true, + ThisBuild / packageDoc / publishArtifact := false, + packageSrc / publishArtifact := false, + ThisBuild / organization := "org.example", version := "1.0" ) val aPublishResolver = Def.setting { - Resolver.file("a-resolver", baseDirectory.in(ThisBuild).value / "a-repo") + Resolver.file("a-resolver", (ThisBuild / baseDirectory).value / "a-repo") } val aResolver = Def.setting { - val dir = baseDirectory.in(ThisBuild).value + val dir = (ThisBuild / baseDirectory).value "a-resolver" at s"file://${dir.getAbsolutePath}/a-repo" } val bResolver = Def.setting { - val dir = baseDirectory.in(ThisBuild).value / "b-repo" + val dir = (ThisBuild / baseDirectory).value / "b-repo" Resolver.file("b-resolver", dir)(Resolver.defaultIvyPatterns) } @@ -68,7 +68,7 @@ val d = project.dependsOn( c ).settings( addDep("a"), addDep("b"), checkApiMappings := { - val actual = apiMappings.in(Compile,doc).value + val actual = (Compile / doc / apiMappings).value println("Actual API Mappings: " + actual.mkString("\n\t", "\n\t", "")) val expected = expectedMappings.value println("Expected API Mappings: " + expected.mkString("\n\t", "\n\t", "")) From 7256fb2725682ec3da8690ccb0209c9ca0ab8437 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Tue, 6 Jun 2023 17:12:41 +0200 Subject: [PATCH 076/207] sbtn 1.9.0 --- launcher-package/build.sbt | 2 +- main/src/test/scala/sbt/internal/InstallSbtnSpec.scala | 4 ++-- sbt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index 95a402416..f8c8922e3 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -121,7 +121,7 @@ val root = (project in file(".")). file }, // update sbt.sh at root - sbtnVersion := "1.8.2", + sbtnVersion := "1.9.0", sbtnJarsBaseUrl := "https://github.com/sbt/sbtn-dist/releases/download", sbtnJarsMappings := { val baseUrl = sbtnJarsBaseUrl.value diff --git a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala index c94f1b7ea..fa4b2c8a1 100644 --- a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala +++ b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala @@ -37,7 +37,7 @@ class InstallSbtnSpec extends AnyFlatSpec { "InstallSbtn" should "extract native sbtn" ignore withTemp(".zip") { tmp => withTemp(".exe") { sbtn => - InstallSbtn.extractSbtn(term, "1.8.2", tmp, sbtn) + InstallSbtn.extractSbtn(term, "1.9.0", tmp, sbtn) val tmpDir = Files.createTempDirectory("sbtn-test").toRealPath() Files.createDirectories(tmpDir.resolve("project")) val foo = tmpDir.resolve("foo") @@ -46,7 +46,7 @@ class InstallSbtnSpec extends AnyFlatSpec { IO.write(tmpDir.resolve("build.sbt").toFile, build) IO.write( tmpDir.resolve("project").resolve("build.properties").toFile, - "sbt.version=1.8.0" + "sbt.version=1.9.0" ) try { val proc = diff --git a/sbt b/sbt index e181343f3..b6b6c0736 100755 --- a/sbt +++ b/sbt @@ -24,7 +24,7 @@ declare build_props_sbt_version= declare use_sbtn= declare no_server= declare sbtn_command="$SBTN_CMD" -declare sbtn_version="1.8.2" +declare sbtn_version="1.9.0" ### ------------------------------- ### ### Helper methods for BASH scripts ### From b9cc499ec32bfab02b55b505cf1cf34259c62daf Mon Sep 17 00:00:00 2001 From: Alex Klibisz Date: Wed, 7 Jun 2023 13:21:00 -0400 Subject: [PATCH 077/207] Fix typo in exportPipelining Key description --- main/src/main/scala/sbt/Keys.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 3aa77237e..c64bbbcac 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -396,7 +396,7 @@ object Keys { val remoteCachePom = taskKey[File]("Generates a pom for publishing when publishing Maven-style.") val localCacheDirectory = settingKey[File]("Operating system specific cache directory.") val usePipelining = settingKey[Boolean]("Use subproject pipelining for compilation.").withRank(BSetting) - val exportPipelining = settingKey[Boolean]("Product early output so downstream subprojects can do pipelining.").withRank(BSetting) + val exportPipelining = settingKey[Boolean]("Produce early output so downstream subprojects can do pipelining.").withRank(BSetting) // BSP keys val bspConfig = taskKey[Unit]("Create or update the BSP connection files").withRank(DSetting) From 05ac9c88d11d55738c9ae0d0e216916faae0f47f Mon Sep 17 00:00:00 2001 From: Chris Kipp Date: Mon, 12 Jun 2023 16:44:20 +0200 Subject: [PATCH 078/207] deps: bump the default semanticdb version used This updates semanticdb from 4.5.13 to 4.7.8. --- build.sbt | 2 +- main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index bc2ae0216..3c7f12022 100644 --- a/build.sbt +++ b/build.sbt @@ -48,7 +48,7 @@ ThisBuild / libraryDependencySchemes += "org.scala-lang.modules" %% "scala-xml" Global / semanticdbEnabled := !(Global / insideCI).value // Change main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala too, if you change this. -Global / semanticdbVersion := "4.5.13" +Global / semanticdbVersion := "4.7.8" val excludeLint = SettingKey[Set[Def.KeyedInitialize[_]]]("excludeLintKeys") Global / excludeLint := (Global / excludeLint).?.value.getOrElse(Set.empty) Global / excludeLint += componentID diff --git a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala index b7a558d6d..94964e1b0 100644 --- a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala +++ b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala @@ -26,7 +26,7 @@ object SemanticdbPlugin extends AutoPlugin { semanticdbEnabled := SysProp.semanticdb, semanticdbIncludeInJar := false, semanticdbOptions := List(), - semanticdbVersion := "4.5.13" + semanticdbVersion := "4.7.8" ) override lazy val projectSettings: Seq[Def.Setting[_]] = Seq( From 1b31a377d2ecd7f8d677593149475125a757a2b1 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 12 Jun 2023 17:16:14 +0200 Subject: [PATCH 079/207] Reproduce #7288 in scripted project/skip --- sbt-app/src/sbt-test/project/skip/build.sbt | 8 ++++++++ sbt-app/src/sbt-test/project/skip/test | 3 +++ 2 files changed, 11 insertions(+) diff --git a/sbt-app/src/sbt-test/project/skip/build.sbt b/sbt-app/src/sbt-test/project/skip/build.sbt index 72fed351d..9f575bd75 100644 --- a/sbt-app/src/sbt-test/project/skip/build.sbt +++ b/sbt-app/src/sbt-test/project/skip/build.sbt @@ -11,10 +11,18 @@ lazy val a = project lazy val b = project .in(file("b")) +lazy val c = project + .in(file("c")) + .settings( + publish / skip := true + ) + check := { assert((publishLocal / skip).value, "Expected true, got false") assert((a / publishLocal / skip).value, "Expected true, got false") assert(!(a / publish / skip).value, "Expected false, got true") assert(!(b / publish / skip).value, "Expected false, got true") assert(!(b / publishLocal / skip).value, "Expected false, got true") + assert((c / publishLocal / skip).value, "Expected true, got false") + assert((c / publish / skip ).value, "Expected true, got false") } diff --git a/sbt-app/src/sbt-test/project/skip/test b/sbt-app/src/sbt-test/project/skip/test index 15675b169..d2f0e9905 100644 --- a/sbt-app/src/sbt-test/project/skip/test +++ b/sbt-app/src/sbt-test/project/skip/test @@ -1 +1,4 @@ > check + +# should not fail if skipped, and publishTo is empty +> c / publish From 783a8e57dbe389411f478a0e88a083b1da3eb843 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Mon, 12 Jun 2023 18:06:06 +0200 Subject: [PATCH 080/207] Fix #7288 and implement publisM2 / skip --- main/src/main/scala/sbt/Defaults.scala | 73 +++++++++----------------- 1 file changed, 25 insertions(+), 48 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 3011f79ba..cd908de60 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2622,7 +2622,8 @@ object Defaults extends BuildCommon { if (turbo.value) ClassLoaderLayeringStrategy.AllLibraryJars else ClassLoaderLayeringStrategy.ScalaLibrary }, - publishLocal / skip := (publish / skip).value, // So we don't break previous behaviour + publishLocal / skip := (publish / skip).value, + publishM2 / skip := (publish / skip).value ) // build.sbt is treated a Scala source of metabuild, so to enable deprecation flag on build.sbt we set the option here. lazy val deprecationSettings: Seq[Setting[_]] = @@ -2911,9 +2912,9 @@ object Classpaths { deliver := deliverTask(makeIvyXmlConfiguration).value, deliverLocal := deliverTask(makeIvyXmlLocalConfiguration).value, makeIvyXml := deliverTask(makeIvyXmlConfiguration).value, - publish := publishTask(publishConfiguration).value, - publishLocal := publishTask(publishLocalConfiguration).value, - publishM2 := publishTask(publishM2Configuration).value + publish := publishOrSkip(publishConfiguration, publish / skip).value, + publishLocal := publishOrSkip(publishLocalConfiguration, publishLocal / skip).value, + publishM2 := publishOrSkip(publishM2Configuration, publishM2 / skip).value ) private[this] def baseGlobalDefaults = @@ -3617,56 +3618,32 @@ object Classpaths { private def logSkipPublish(log: Logger, ref: ProjectRef): Unit = log.debug(s"Skipping publish* for ${ref.project}") - private def checkAndPublishLocal( - currentCon: PublishConfiguration, - publishLocalConf: PublishConfiguration, - publishSkipLocal: Boolean, - module: IvySbt#Module, - log: Logger, - ref: ProjectRef - )(notPublishLocal: () => Unit): Unit = { - if (currentCon == publishLocalConf) { - if (publishSkipLocal) { - logSkipPublish(log, ref) - } else { - IvyActions.publish(module, currentCon, log) - } - } else { - notPublishLocal() - } + @deprecated("use publishOrSkip instead", "1.9.1") + def publishTask(config: TaskKey[PublishConfiguration]): Initialize[Task[Unit]] = { + val skipKey = + if (config.key == publishLocalConfiguration.key) publishLocal / skip + else publish / skip + publishOrSkip(config, skipKey) } - def publishTask(config: TaskKey[PublishConfiguration]): Initialize[Task[Unit]] = - Def.taskIf { - if ((publish / skip).value) { - val log = streams.value.log - val ref = thisProjectRef.value - checkAndPublishLocal( - config.value, - publishLocalConfiguration.value, - (publishLocal / skip).value, - ivyModule.value, - log, - ref - ) { () => + def publishOrSkip( + config: TaskKey[PublishConfiguration], + skip: TaskKey[Boolean] + ): Initialize[Task[Unit]] = + Def + .taskIf { + if (skip.value) { + val log = streams.value.log + val ref = thisProjectRef.value logSkipPublish(log, ref) - } - } else { - val conf = config.value - val log = streams.value.log - val module = ivyModule.value - checkAndPublishLocal( - conf, - publishLocalConfiguration.value, - (publishLocal / skip).value, - module, - log, - thisProjectRef.value - ) { () => + } else { + val conf = config.value + val log = streams.value.log + val module = ivyModule.value IvyActions.publish(module, conf, log) } } - } tag (Tags.Publish, Tags.Network) + .tag(Tags.Publish, Tags.Network) val moduleIdJsonKeyFormat: sjsonnew.JsonKeyFormat[ModuleID] = new sjsonnew.JsonKeyFormat[ModuleID] { From a209cf2700b048f414090c996322acba3276fc32 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 14 Jun 2023 10:35:54 +0200 Subject: [PATCH 081/207] Fix #7297: Convert OffsetPosition to BSP range --- .../scala/sbt/internal/server/BuildServerReporter.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index 5ed82ff1d..9d314a5eb 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -185,11 +185,15 @@ final class BuildServerReporterImpl( val startColumnOpt = pos.startColumn.toOption.map(_.toLong) val endLineOpt = pos.endLine.toOption.map(_.toLong - 1) val endColumnOpt = pos.endColumn.toOption.map(_.toLong) + val lineOpt = pos.line.toOption.map(_.toLong - 1) + val columnOpt = pos.pointer.toOption.map(_.toLong) def toPosition(lineOpt: Option[Long], columnOpt: Option[Long]): Option[Position] = lineOpt.map(line => Position(line, columnOpt.getOrElse(0L))) - val startPos = toPosition(startLineOpt, startColumnOpt).getOrElse(Position(0L, 0L)) + val startPos = toPosition(startLineOpt, startColumnOpt) + .orElse(toPosition(lineOpt, columnOpt)) + .getOrElse(Position(0L, 0L)) val endPosOpt = toPosition(endLineOpt, endColumnOpt) Range(startPos, endPosOpt.getOrElse(startPos)) } From 3762cfe7a792159b281f9b54ccabca68bd5a92a8 Mon Sep 17 00:00:00 2001 From: Dongxu Wang Date: Wed, 14 Jun 2023 19:51:31 +0800 Subject: [PATCH 082/207] Fix typo in DEVELOPING.md --- DEVELOPING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEVELOPING.md b/DEVELOPING.md index 909fb566a..227415d95 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -96,7 +96,7 @@ In order to see a change you've made to sbt's source code, this cache should be By default sbt uses a snapshot version (this is a scala convention for quick local changes- it tells users that this version could change). One drawback of `-SNAPSHOT` version is that it's slow to resolve as it tries to hit all the resolvers. -This is important when testing perfomance, so that the slowness of the resolution does not impact sbt. +This is important when testing performance, so that the slowness of the resolution does not impact sbt. You can workaround that by using a version name like `1.$MINOR.$PATCH-LOCAL1`. A non-SNAPSHOT artifacts will now be cached under `$HOME/.ivy/cache/` directory, so you need to clear that out using [sbt-dirty-money](https://github.com/sbt/sbt-dirty-money)'s `cleanCache` task. From 118138a0c80162a95e0a03cfb82c364c96517e28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20At=C5=82asik?= Date: Thu, 15 Jun 2023 11:14:40 +0200 Subject: [PATCH 083/207] Add new template to text-based menu (#7300) --- main/src/main/scala/sbt/TemplateCommandUtil.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index c8a611aa2..5a09fd190 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -173,6 +173,7 @@ private[sbt] object TemplateCommandUtil { "scala/scala-seed.g8" -> "Scala 2 seed template", "playframework/play-scala-seed.g8" -> "A Play project in Scala", "playframework/play-java-seed.g8" -> "A Play project in Java", + "softwaremill/tapir.g8" -> "A tapir project using Netty", "scala-js/vite.g8" -> "A Scala.JS + Vite project", "holdenk/sparkProjectTemplate.g8" -> "A Scala Spark project", "spotify/scio.g8" -> "A Scio project", From 9ec7c4f0278e46c852a700cec50f6e785b510a8b Mon Sep 17 00:00:00 2001 From: Ondra Pelech Date: Mon, 17 Oct 2022 19:25:02 +0200 Subject: [PATCH 084/207] Dependency graph with colors (based on the organization) (#7052) --- main/src/main/resources/graph.html | 85 +------- .../sbt/internal/graph/rendering/DOT.scala | 31 ++- .../sbt/plugins/DependencyTreeKeys.scala | 3 + .../sbt/plugins/DependencyTreeSettings.scala | 9 +- .../testDotFileGeneration/build.sbt | 50 ++--- .../testHtmlFileGeneration/build.sbt | 197 ++++++------------ 6 files changed, 127 insertions(+), 248 deletions(-) diff --git a/main/src/main/resources/graph.html b/main/src/main/resources/graph.html index b8c4a45b2..039b77d6a 100644 --- a/main/src/main/resources/graph.html +++ b/main/src/main/resources/graph.html @@ -30,86 +30,15 @@ THE SOFTWARE. Dependency Graph - - - - + + + - - - - - - - - - + +

+ - diff --git a/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala b/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala index d53fb1023..5c7dae6c9 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala @@ -11,23 +11,38 @@ package graph package rendering object DOT { - val EvictedStyle = "stroke-dasharray: 5,5" + val EvictedStyle = "dashed" def dotGraph( graph: ModuleGraph, dotHead: String, nodeFormation: (String, String, String) => String, - labelRendering: HTMLLabelRendering + labelRendering: HTMLLabelRendering, + colors: Boolean ): String = { val nodes = { for (n <- graph.nodes) yield { - val style = if (n.isEvicted) EvictedStyle else "" val label = nodeFormation(n.id.organization, n.id.name, n.id.version) - """ "%s"[%s style="%s"]""".format( - n.id.idString, - labelRendering.renderLabel(label), - style - ) + val style = if (n.isEvicted) EvictedStyle else "" + val penwidth = if (n.isEvicted) "3" else "5" + val color = if (colors) { + val orgHash = n.id.organization.hashCode + val r = (orgHash >> 16) & 0xFF + val g = (orgHash >> 8) & 0xFF + val b = (orgHash >> 0) & 0xFF + val r1 = (r * 0.90).toInt + val g1 = (g * 0.90).toInt + val b1 = (b * 0.90).toInt + (r1 << 16) | (g1 << 8) | (b1 << 0) + } else 0 + s""" "%s"[shape=box %s style="%s" penwidth="%s" color="%s"]""" + .format( + n.id.idString, + labelRendering.renderLabel(label), + style, + penwidth, + f"#$color%06X", + ) } }.sorted.mkString("\n") diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala b/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala index 24d1d08b2..5268941ef 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala @@ -41,6 +41,9 @@ abstract class DependencyTreeKeys { taskKey[File]("Creates a graphml file containing the dependency-graph for a project") val dependencyDotFile = settingKey[File]("The location the dot file should be generated at") + val dependencyDotNodeColors = settingKey[Boolean]( + "The boxes of nodes are painted with colors. Otherwise they're black." + ) val dependencyDotNodeLabel = settingKey[(String, String, String) => String]( "Returns a formated string of a dependency. Takes organization, name and version as parameters" ) diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala index 2ffe91128..88ed9d374 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala @@ -109,15 +109,17 @@ object DependencyTreeSettings { dependencyTreeModuleGraph0.value, dependencyDotHeader.value, dependencyDotNodeLabel.value, - rendering.DOT.AngleBrackets + rendering.DOT.AngleBrackets, + dependencyDotNodeColors.value ), dependencyDot := writeToFile(dependencyDot / asString, dependencyDotFile).value, dependencyDotHeader := """|digraph "dependency-graph" { - | graph[rankdir="LR"] + | graph[rankdir="LR"; splines=polyline] | edge [ | arrowtail="none" | ]""".stripMargin, + dependencyDotNodeColors := true, dependencyDotNodeLabel := { (organization: String, name: String, version: String) => """%s
%s
%s""".format(organization, name, version) }, @@ -192,7 +194,8 @@ object DependencyTreeSettings { graph, dependencyDotHeader.value, dependencyDotNodeLabel.value, - rendering.DOT.LabelTypeHtml + rendering.DOT.AngleBrackets, + dependencyDotNodeColors.value ) val link = DagreHTML.createLink(dotGraph, target.value) streams.value.log.info(s"HTML graph written to $link") diff --git a/sbt-app/src/sbt-test/dependency-graph/testDotFileGeneration/build.sbt b/sbt-app/src/sbt-test/dependency-graph/testDotFileGeneration/build.sbt index fc61f4b22..7e79f27d0 100644 --- a/sbt-app/src/sbt-test/dependency-graph/testDotFileGeneration/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/testDotFileGeneration/build.sbt @@ -11,43 +11,43 @@ lazy val justATransitiveDependencyProject = project lazy val justADependencyProject = project lazy val test_project = project - .dependsOn(justADependencyProject, justATransitiveDependencyProject) - .settings( - TaskKey[Unit]("check") := { - val dotFile = (dependencyDot in Compile).value - val expectedGraph = - """digraph "dependency-graph" { - | graph[rankdir="LR"] + .dependsOn(justADependencyProject, justATransitiveDependencyProject) + .settings( + TaskKey[Unit]("check") := { + val dotFile = (dependencyDot in Compile).value + val expectedGraph = + """digraph "dependency-graph" { + | graph[rankdir="LR"; splines=polyline] | edge [ | arrowtail="none" | ] - | "justadependencyproject:justadependencyproject_2.9.2:0.1-SNAPSHOT"[label=justadependencyproject_2.9.2
0.1-SNAPSHOT> style=""] - | "justatransitivedependencyproject:justatransitivedependencyproject_2.9.2:0.1-SNAPSHOT"[label=justatransitivedependencyproject_2.9.2
0.1-SNAPSHOT> style=""] - | "justatransivitedependencyendpointproject:justatransivitedependencyendpointproject_2.9.2:0.1-SNAPSHOT"[label=justatransivitedependencyendpointproject_2.9.2
0.1-SNAPSHOT> style=""] - | "test_project:test_project_2.9.2:0.1-SNAPSHOT"[label=test_project_2.9.2
0.1-SNAPSHOT> style=""] + | "justadependencyproject:justadependencyproject_2.9.2:0.1-SNAPSHOT"[shape=box label=justadependencyproject_2.9.2
0.1-SNAPSHOT> style="" penwidth="5" color="#B6E316"] + | "justatransitivedependencyproject:justatransitivedependencyproject_2.9.2:0.1-SNAPSHOT"[shape=box label=justatransitivedependencyproject_2.9.2
0.1-SNAPSHOT> style="" penwidth="5" color="#0E92BE"] + | "justatransivitedependencyendpointproject:justatransivitedependencyendpointproject_2.9.2:0.1-SNAPSHOT"[shape=box label=justatransivitedependencyendpointproject_2.9.2
0.1-SNAPSHOT> style="" penwidth="5" color="#9EAD1B"] + | "test_project:test_project_2.9.2:0.1-SNAPSHOT"[shape=box label=test_project_2.9.2
0.1-SNAPSHOT> style="" penwidth="5" color="#C37661"] | "justatransitivedependencyproject:justatransitivedependencyproject_2.9.2:0.1-SNAPSHOT" -> "justatransivitedependencyendpointproject:justatransivitedependencyendpointproject_2.9.2:0.1-SNAPSHOT" | "test_project:test_project_2.9.2:0.1-SNAPSHOT" -> "justadependencyproject:justadependencyproject_2.9.2:0.1-SNAPSHOT" | "test_project:test_project_2.9.2:0.1-SNAPSHOT" -> "justatransitivedependencyproject:justatransitivedependencyproject_2.9.2:0.1-SNAPSHOT" |} """.stripMargin - val graph : String = scala.io.Source.fromFile(dotFile.getAbsolutePath).mkString - val errors = compareByLine(graph, expectedGraph) - require(errors.isEmpty , errors.mkString("\n")) - () - } - ) + val graph: String = scala.io.Source.fromFile(dotFile.getAbsolutePath).mkString + val errors = compareByLine(graph, expectedGraph) + require(errors.isEmpty, errors.mkString("\n")) + () + } + ) -def compareByLine(got : String, expected : String) : Seq[String] = { +def compareByLine(got: String, expected: String): Seq[String] = { val errors = ListBuffer[String]() - got.split("\n").zip(expected.split("\n").toSeq).zipWithIndex.foreach { case((got_line : String, expected_line : String), i : Int) => - if(got_line != expected_line) { - errors.append( - """not matching lines at line %s + got.split("\n").zip(expected.split("\n").toSeq).zipWithIndex.foreach { + case ((got_line: String, expected_line: String), i: Int) => + if (got_line != expected_line) { + errors.append("""not matching lines at line %s |expected: %s |got: %s - |""".stripMargin.format(i,expected_line, got_line)) - } + |""".stripMargin.format(i, expected_line, got_line)) + } } errors -} \ No newline at end of file +} diff --git a/sbt-app/src/sbt-test/dependency-graph/testHtmlFileGeneration/build.sbt b/sbt-app/src/sbt-test/dependency-graph/testHtmlFileGeneration/build.sbt index bd4cf6257..7a2eb062d 100644 --- a/sbt-app/src/sbt-test/dependency-graph/testHtmlFileGeneration/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/testHtmlFileGeneration/build.sbt @@ -11,146 +11,75 @@ lazy val justATransitiveDependencyProject = project lazy val justADependencyProject = project lazy val test_project = project - .dependsOn(justADependencyProject, justATransitiveDependencyProject) - .settings( - TaskKey[Unit]("check") := { - val htmlFile = (dependencyBrowseGraphHTML in Compile).value - val expectedHtml = - """ - | - | - | - | - |Dependency Graph - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | + .dependsOn(justADependencyProject, justATransitiveDependencyProject) + .settings( + TaskKey[Unit]("check") := { + val htmlFile = (dependencyBrowseGraphHTML in Compile).value + val expectedHtml = + """ + | + | + | + | + |Dependency Graph + | + | + | + | + | + | + | + |
+ | + | + | + | """.stripMargin - val html : String = scala.io.Source.fromFile(htmlFile).mkString - val errors = compareByLine(html, expectedHtml) - require(errors.isEmpty , errors.mkString("\n")) - () - } - ) + val html: String = scala.io.Source.fromFile(htmlFile).mkString + val errors = compareByLine(html, expectedHtml) + require(errors.isEmpty, errors.mkString("\n")) + () + } + ) -def compareByLine(got : String, expected : String) : Seq[String] = { +def compareByLine(got: String, expected: String): Seq[String] = { val errors = ListBuffer[String]() - got.split("\n").zip(expected.split("\n").toSeq).zipWithIndex.foreach { case((got_line : String, expected_line : String), i : Int) => - if(got_line != expected_line) { - errors.append( - """not matching lines at line %s + got.split("\n").zip(expected.split("\n").toSeq).zipWithIndex.foreach { + case ((got_line: String, expected_line: String), i: Int) => + if (got_line != expected_line) { + errors.append("""not matching lines at line %s |expected: %s |got: %s - |""".stripMargin.format(i,expected_line, got_line)) - } + |""".stripMargin.format(i, expected_line, got_line)) + } } errors } From 41b8a92b40e6dae883101a2f3060cb4d408b7b2a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 18 Jun 2023 14:22:02 -0400 Subject: [PATCH 085/207] Zinc 1.9.1 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 935d0a5a9..f27154224 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.9.0") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0") - val zincVersion = nightlyVersion.getOrElse("1.9.0") + val zincVersion = nightlyVersion.getOrElse("1.9.1") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 5398f6e1aa3d1e60633d2aef61684267bb12359e Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 18 Jun 2023 15:48:18 -0400 Subject: [PATCH 086/207] Make sbt new extensible Problem ------- `sbt new` (`sbt init`) hardcodes the templates, which I think is ok, but without changing much, we can make it extensible. Solution -------- This adds two new keys `templateDescriptions` and `templateRunLocal`, which can customize the behavior for in-house usage etc. --- main/src/main/scala/sbt/Defaults.scala | 15 +++++++++++++++ main/src/main/scala/sbt/Keys.scala | 2 ++ main/src/main/scala/sbt/TemplateCommandUtil.scala | 14 +++++++++----- .../main/scala/sbt/internal/TaskProgress.scala | 4 +++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 4c3801d30..0ea596dcc 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -361,6 +361,8 @@ object Defaults extends BuildCommon { fork :== false, initialize :== {}, templateResolverInfos :== Nil, + templateDescriptions :== TemplateCommandUtil.defaultTemplateDescriptions, + templateRunLocal := templateRunLocalInputTask(runLocalTemplate).evaluated, forcegc :== sys.props .get("sbt.task.forcegc") .map(java.lang.Boolean.parseBoolean) @@ -2644,6 +2646,19 @@ object Defaults extends BuildCommon { if (useCoursier.value) CoursierDependencyResolution(csrConfiguration.value) else IvyDependencyResolution(ivyConfiguration.value) } + + def templateRunLocalInputTask( + runLocal: (Seq[String], Logger) => Unit + ): Initialize[InputTask[Unit]] = + Def.inputTask { + import Def._ + val s = streams.value + val args = spaceDelimited().parsed + runLocal(args, s.log) + } + + def runLocalTemplate(arguments: Seq[String], log: Logger): Unit = + TemplateCommandUtil.defaultRunLocalTemplate(arguments.toList, log) } object Classpaths { diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index c64bbbcac..9c8d1855c 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -571,6 +571,8 @@ object Keys { val sbtBinaryVersion = settingKey[String]("Defines the binary compatibility version substring.").withRank(BPlusSetting) val skip = taskKey[Boolean]("For tasks that support it (currently only 'compile', 'update', 'publish' and 'publishLocal'), setting skip to true will force the task to not to do its work. The exact semantics may vary depending on the task.").withRank(BSetting) val templateResolverInfos = settingKey[Seq[TemplateResolverInfo]]("Template resolvers used for 'new'.").withRank(BSetting) + val templateDescriptions = settingKey[Seq[(String, String)]]("List of templates with description used for 'new' / 'init'.") + val templateRunLocal = inputKey[Unit]("Runs a local template.").withRank(DTask) val interactionService = taskKey[InteractionService]("Service used to ask for user input through the current user interface(s).").withRank(CTask) val insideCI = SettingKey[Boolean]("insideCI", "Determines if the sbt is running in a Continuous Integration environment", AMinusSetting) diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 5a09fd190..41db2d389 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -41,6 +41,7 @@ private[sbt] object TemplateCommandUtil { val extracted = (Project extract s0) val (s1, ivyConf) = extracted.runTask(Keys.ivyConfiguration, s0) val scalaModuleInfo = extracted.get(Keys.updateSbtClassifiers / Keys.scalaModuleInfo) + val templateDescriptions = extracted.get(Keys.templateDescriptions) val args0 = inputArg.toList ++ (s0.remainingCommands match { case exec :: Nil if exec.commandLine == "shell" => Nil @@ -52,10 +53,10 @@ private[sbt] object TemplateCommandUtil { run(infos, args0, s0.configuration, ivyConf, globalBase, scalaModuleInfo, log) terminate } else { - fortifyArgs() match { + fortifyArgs(templateDescriptions.toList) match { case Nil => terminate case arg :: Nil if arg.endsWith(".local") => - localRun(arg :: Nil, log) + extracted.runInputTask(Keys.templateRunLocal, " " + arg, s0) reload case args => run(infos, args, s0.configuration, ivyConf, globalBase, scalaModuleInfo, log) @@ -166,7 +167,7 @@ private[sbt] object TemplateCommandUtil { private lazy val term: ITerminal = ITerminal.get private lazy val isAnsiSupported = term.isAnsiSupported private lazy val nonMoveLetters = ('a' to 'z').toList diff List('h', 'j', 'k', 'l', 'q') - private lazy val templates = List( + private[sbt] lazy val defaultTemplateDescriptions = List( ScalaToolkitSlug -> "Scala Toolkit (beta) by Scala Center and VirtusLab", TypelevelToolkitSlug -> "Toolkit to start building Typelevel apps", SbtCrossPlatformSlug -> "A cross-JVM/JS/Native project", @@ -179,10 +180,11 @@ private[sbt] object TemplateCommandUtil { "spotify/scio.g8" -> "A Scio project", "disneystreaming/smithy4s.g8" -> "A Smithy4s project", ) - private def fortifyArgs(): List[String] = + private def fortifyArgs(templates: List[(String, String)]): List[String] = if (System.console eq null) Nil else ITerminal.withStreams(true, false) { + assert(templates.size <= 20, "template list cannot have more than 20 items") val mappingList = templates.zipWithIndex.map { case (v, idx) => toLetter(idx) -> v } @@ -261,7 +263,9 @@ private[sbt] object TemplateCommandUtil { else ans0 } - private def localRun( + // This is used by Defaults.runLocalTemplate, which implements + // templateRunLocal input task. + private[sbt] def defaultRunLocalTemplate( arguments: List[String], log: Logger ): Unit = diff --git a/main/src/main/scala/sbt/internal/TaskProgress.scala b/main/src/main/scala/sbt/internal/TaskProgress.scala index 65fea78fc..25effeb81 100644 --- a/main/src/main/scala/sbt/internal/TaskProgress.scala +++ b/main/src/main/scala/sbt/internal/TaskProgress.scala @@ -149,7 +149,9 @@ private[sbt] class TaskProgress( "console", "consoleProject", "consoleQuick", - "state" + "state", + "streams", + "streams-manager", ) private[this] val hiddenTasks = Set( "compileEarly", From 72bfb3f45ab346ddf3558bc23853dfbb9392cc55 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 20 Jun 2023 13:42:07 +0200 Subject: [PATCH 087/207] Transfer copyright to Scala Center --- .github/workflows/cla.yml | 24 +++++++++++++++++++ CONTRIBUTING.md | 2 +- LICENSE | 3 ++- NOTICE | 3 ++- SUPPORT.md | 10 -------- build.sbt | 3 ++- client/src/main/java/sbt/client/Client.java | 3 ++- .../internal/util/appmacro/ContextUtil.scala | 3 ++- .../sbt/internal/util/appmacro/Convert.scala | 3 ++- .../sbt/internal/util/appmacro/Instance.scala | 3 ++- .../internal/util/appmacro/KListBuilder.scala | 3 ++- .../internal/util/appmacro/LinterDSL.scala | 3 ++- .../internal/util/appmacro/MixedBuilder.scala | 3 ++- .../util/appmacro/StringTypeTag.scala | 3 ++- .../internal/util/appmacro/TupleBuilder.scala | 3 ++- .../util/appmacro/TupleNBuilder.scala | 3 ++- .../sbt/plugins/DependencyTreePlugin.scala | 3 ++- internal/util-collection/NOTICE | 3 ++- .../scala-2.12/sbt/internal/util/Par.scala | 3 ++- .../sbt/internal/util/WrappedMap.scala | 3 ++- .../main/scala/sbt/internal/util/AList.scala | 3 ++- .../scala/sbt/internal/util/Attributes.scala | 3 ++- .../scala/sbt/internal/util/Classes.scala | 3 ++- .../main/scala/sbt/internal/util/Dag.scala | 3 ++- .../main/scala/sbt/internal/util/HList.scala | 3 ++- .../sbt/internal/util/HListFormats.scala | 3 ++- .../main/scala/sbt/internal/util/IDSet.scala | 3 ++- .../main/scala/sbt/internal/util/INode.scala | 3 ++- .../main/scala/sbt/internal/util/KList.scala | 3 ++- .../main/scala/sbt/internal/util/PMap.scala | 3 ++- .../scala/sbt/internal/util/Settings.scala | 3 ++- .../main/scala/sbt/internal/util/Signal.scala | 3 ++- .../sbt/internal/util/TypeFunctions.scala | 3 ++- .../main/scala/sbt/internal/util/Types.scala | 3 ++- .../main/scala/sbt/internal/util/Util.scala | 3 ++- .../main/scala/sbt/util/OptJsonWriter.scala | 3 ++- .../src/main/scala/sbt/util/Show.scala | 3 ++- .../src/test/scala/DagSpecification.scala | 3 ++- .../src/test/scala/HListFormatSpec.scala | 3 ++- .../src/test/scala/KeyTest.scala | 3 ++- .../src/test/scala/PMapTest.scala | 3 ++- .../src/test/scala/SettingsExample.scala | 3 ++- .../src/test/scala/SettingsTest.scala | 3 ++- .../src/test/scala/UnitSpec.scala | 3 ++- internal/util-complete/NOTICE | 3 ++- .../scala/sbt/internal/util/LineReader.scala | 3 ++- .../internal/util/complete/Completions.scala | 3 ++- .../internal/util/complete/EditDistance.scala | 3 ++- .../util/complete/ExampleSource.scala | 3 ++- .../sbt/internal/util/complete/History.scala | 3 ++- .../util/complete/HistoryCommands.scala | 3 ++- .../util/complete/JLineCompletion.scala | 3 ++- .../sbt/internal/util/complete/Parser.scala | 3 ++- .../sbt/internal/util/complete/Parsers.scala | 3 ++- .../internal/util/complete/ProcessError.scala | 3 ++- .../internal/util/complete/SizeParser.scala | 3 ++- .../util/complete/TokenCompletions.scala | 3 ++- .../internal/util/complete/TypeString.scala | 3 ++- .../internal/util/complete/UpperBound.scala | 3 ++- .../src/test/scala/DefaultParsersSpec.scala | 3 ++- .../src/test/scala/ParserTest.scala | 3 ++- .../src/test/scala/UnitSpec.scala | 3 ++- .../scala/sbt/complete/FileExamplesTest.scala | 3 ++- .../sbt/complete/FixedSetExamplesTest.scala | 3 ++- .../sbt/complete/ParserWithExamplesTest.scala | 3 ++- .../util/complete/SizeParserSpec.scala | 3 ++- .../sbt/internal/util/ErrorHandling.scala | 3 ++- .../scala/sbt/internal/util/ExitHook.scala | 3 ++- .../internal/util/MessageOnlyException.scala | 3 ++- .../sbt/internal/util/RunningProcesses.scala | 3 ++- .../src/main/java/xsbti/Action.java | 3 ++- .../src/main/java/xsbti/DiagnosticCode.java | 3 ++- .../xsbti/DiagnosticRelatedInformation.java | 3 ++- .../src/main/java/xsbti/Logger.java | 3 ++- .../src/main/java/xsbti/Position.java | 3 ++- .../src/main/java/xsbti/Problem.java | 3 ++- .../src/main/java/xsbti/Severity.java | 3 ++- .../src/main/java/xsbti/T2.java | 3 ++- .../src/main/java/xsbti/TextEdit.java | 3 ++- .../src/main/java/xsbti/WorkspaceEdit.java | 3 ++- .../sbt/internal/util/DeprecatedJLine.java | 3 ++- .../com/github/ghik/silencer/silent.scala | 3 ++- .../scala/sbt/internal/util/BasicLogger.scala | 3 ++- .../sbt/internal/util/BufferedLogger.scala | 3 ++- .../sbt/internal/util/ConsoleAppender.scala | 3 ++- .../scala/sbt/internal/util/ConsoleOut.scala | 3 ++- .../scala/sbt/internal/util/EscHelpers.scala | 3 ++- .../sbt/internal/util/FilterLogger.scala | 3 ++- .../scala/sbt/internal/util/FullLogger.scala | 3 ++- .../sbt/internal/util/GlobalLogging.scala | 3 ++- .../main/scala/sbt/internal/util/JLine3.scala | 3 ++- .../sbt/internal/util/LoggerWriter.scala | 3 ++- .../sbt/internal/util/MainAppender.scala | 3 ++- .../sbt/internal/util/ManagedLogger.scala | 3 ++- .../scala/sbt/internal/util/MultiLogger.scala | 3 ++- .../scala/sbt/internal/util/ObjectEvent.scala | 3 ++- .../sbt/internal/util/ProgressState.scala | 3 ++- .../main/scala/sbt/internal/util/Prompt.scala | 3 ++- .../scala/sbt/internal/util/StackTrace.scala | 3 ++- .../sbt/internal/util/StringTypeTag.scala | 3 ++- .../scala/sbt/internal/util/Terminal.scala | 3 ++- .../internal/util/WindowsInputStream.scala | 3 ++- .../internal/util/codec/JValueFormats.scala | 3 ++- .../internal/util/codec/PositionFormats.scala | 3 ++- .../internal/util/codec/ProblemFormats.scala | 3 ++- .../internal/util/codec/SeverityFormats.scala | 3 ++- .../util/codec/SuccessEventShowLines.scala | 3 ++- .../util/codec/ThrowableShowLines.scala | 3 ++- .../main/scala/sbt/util/AbstractLogger.scala | 3 ++- .../main/scala/sbt/util/InterfaceUtil.scala | 3 ++- .../src/main/scala/sbt/util/Level.scala | 3 ++- .../src/main/scala/sbt/util/LogEvent.scala | 3 ++- .../src/main/scala/sbt/util/LogExchange.scala | 3 ++- .../src/main/scala/sbt/util/Logger.scala | 3 ++- .../main/scala/sbt/util/LoggerContext.scala | 3 ++- .../src/main/scala/sbt/util/ShowLines.scala | 3 ++- .../util-logging/src/test/scala/Escapes.scala | 3 ++- .../src/test/scala/LogExchangeSpec.scala | 3 ++- .../src/test/scala/LogWriterTest.scala | 3 ++- .../src/test/scala/ManagedLoggerSpec.scala | 3 ++- .../src/test/scala/ProblemTest.scala | 3 ++- .../src/test/scala/TestLogger.scala | 3 ++- .../sbt/internal/util/CleanStringSpec.scala | 3 ++- .../sbt/internal/util/ProgressStateSpec.scala | 3 ++- .../sbt/internal/util/UTF8DecoderSpec.scala | 3 ++- .../scala/sbt/internal/util/logic/Logic.scala | 3 ++- .../src/test/scala/sbt/logic/Test.scala | 3 ++- .../internal/util/SourcePositionMacro.scala | 3 ++- .../scala/sbt/internal/util/Positions.scala | 3 ++- .../internal/util/SourcePositionSpec.scala | 5 ++-- .../scala/sbt/internal/util/Relation.scala | 3 ++- .../src/test/scala/RelationTest.scala | 3 ++- .../sbt/internal/scripted/ScriptConfig.java | 3 ++- .../internal/scripted/CommentHandler.scala | 3 ++- .../sbt/internal/scripted/FileCommands.scala | 3 ++- .../internal/scripted/FilteredLoader.scala | 3 ++- .../internal/scripted/HandlersProvider.scala | 3 ++- .../sbt/internal/scripted/ScriptRunner.scala | 3 ++- .../sbt/internal/scripted/ScriptedTests.scala | 3 ++- .../internal/scripted/StatementHandler.scala | 3 ++- .../internal/scripted/TestScriptParser.scala | 3 ++- launch/NOTICE | 3 ++- launcher-package/NOTICE | 3 ++- launcher-package/build.sbt | 6 ++--- main-actions/src/main/scala/sbt/Console.scala | 3 ++- main-actions/src/main/scala/sbt/Doc.scala | 3 ++- .../src/main/scala/sbt/DotGraph.scala | 3 ++- .../src/main/scala/sbt/ForkTests.scala | 3 ++- main-actions/src/main/scala/sbt/Package.scala | 3 ++- .../src/main/scala/sbt/RawCompileLike.scala | 3 ++- main-actions/src/main/scala/sbt/Sync.scala | 3 ++- .../src/main/scala/sbt/TestResultLogger.scala | 3 ++- main-actions/src/main/scala/sbt/Tests.scala | 3 ++- .../src/main/scala/sbt/compiler/Eval.scala | 3 ++- .../scala/sbt/compiler/EvalReporter.scala | 3 ++- .../src/test/scala/sbt/CacheIvyTest.scala | 3 ++- .../test/scala/sbt/compiler/EvalTest.scala | 3 ++- .../java/sbt/internal/BootServerSocket.java | 3 ++- .../ServerAlreadyBootingException.java | 3 ++- .../sbt/internal/classpath/WrappedLoader.java | 3 ++- .../main/scala/sbt/BasicCommandStrings.scala | 3 ++- .../src/main/scala/sbt/BasicCommands.scala | 3 ++- .../src/main/scala/sbt/BasicKeys.scala | 3 ++- main-command/src/main/scala/sbt/Command.scala | 3 ++- .../src/main/scala/sbt/CommandUtil.scala | 3 ++- .../main/scala/sbt/ExceptionCategory.scala | 3 ++- .../src/main/scala/sbt/Highlight.scala | 3 ++- .../src/main/scala/sbt/MainControl.scala | 3 ++- main-command/src/main/scala/sbt/State.scala | 3 ++- main-command/src/main/scala/sbt/Watched.scala | 3 ++- .../scala/sbt/internal/CommandChannel.scala | 3 ++- .../scala/sbt/internal/ConsoleChannel.scala | 3 ++- .../scala/sbt/internal/LabeledFunctions.scala | 3 ++- .../scala/sbt/internal/LegacyWatched.scala | 3 ++- .../internal/classpath/ClassLoaderCache.scala | 3 ++- .../scala/sbt/internal/client/BspClient.scala | 3 ++- .../sbt/internal/client/NetworkClient.scala | 3 ++- .../internal/client/ServerConnection.scala | 3 ++- .../scala/sbt/internal/server/Server.scala | 3 ++- .../sbt/internal/server/ServerHandler.scala | 3 ++- .../main/scala/sbt/internal/ui/UITask.scala | 3 ++- .../scala/sbt/internal/ui/UserThread.scala | 3 ++- .../scala/sbt/internal/util/JoinThread.scala | 3 ++- .../util/ReadJsonFromInputStream.scala | 3 ++- main-command/src/main/scala/xsbt/IPC.scala | 3 ++- .../src/test/scala/sbt/MultiParserSpec.scala | 3 ++- .../sbt/internal/ClassLoaderCacheTest.scala | 3 ++- main-settings/src/main/scala/sbt/Append.scala | 3 ++- .../src/main/scala/sbt/ConfigKey.scala | 3 ++- main-settings/src/main/scala/sbt/Def.scala | 3 ++- .../src/main/scala/sbt/DelegateIndex.scala | 3 ++- .../src/main/scala/sbt/InputTask.scala | 3 ++- .../src/main/scala/sbt/KeyRanks.scala | 3 ++- .../src/main/scala/sbt/Previous.scala | 3 ++- .../src/main/scala/sbt/PromiseWrap.scala | 3 ++- .../src/main/scala/sbt/Reference.scala | 3 ++- main-settings/src/main/scala/sbt/Remove.scala | 3 ++- main-settings/src/main/scala/sbt/Scope.scala | 3 ++- .../src/main/scala/sbt/ScopeAxis.scala | 3 ++- .../src/main/scala/sbt/ScopeMask.scala | 3 ++- .../src/main/scala/sbt/SlashSyntax.scala | 3 ++- .../src/main/scala/sbt/Structure.scala | 3 ++- .../src/main/scala/sbt/dsl/LinterLevel.scala | 3 ++- .../src/main/scala/sbt/std/InputConvert.scala | 3 ++- .../src/main/scala/sbt/std/InputWrapper.scala | 3 ++- .../src/main/scala/sbt/std/KeyMacro.scala | 3 ++- .../src/main/scala/sbt/std/SettingMacro.scala | 3 ++- .../main/scala/sbt/std/TaskLinterDSL.scala | 3 ++- .../src/main/scala/sbt/std/TaskMacro.scala | 3 ++- .../src/main/scala/sbt/unchecked.scala | 3 ++- .../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 ++- .../src/test/scala/sbt/TupleSyntaxTest.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 ++- .../src/test/scala/sbt/std/UsageTest.scala | 3 ++- .../test/scala/sbt/std/neg/TaskNegSpec.scala | 3 ++- main/NOTICE | 3 ++- .../java/sbt/internal/BottomClassLoader.java | 3 ++- .../java/sbt/internal/ClassLoaderClose.java | 3 ++- .../java/sbt/internal/ClassLoadingLock.java | 3 ++- .../main/java/sbt/internal/FlatLoader.java | 3 ++- .../java/sbt/internal/FullScalaLoader.java | 3 ++- .../main/java/sbt/internal/JLineLoader.java | 3 ++- .../java/sbt/internal/LayeredClassLoader.java | 3 ++- .../java/sbt/internal/ManagedClassLoader.java | 3 ++- .../java/sbt/internal/MetaBuildLoader.java | 3 ++- .../internal/ReverseLookupClassLoader.java | 3 ++- .../java/sbt/internal/SbtInterfaceLoader.java | 3 ++- .../sbt/internal/ScalaLibraryClassLoader.java | 3 ++- .../sbt/internal/ScalaReflectClassLoader.java | 3 ++- .../java/sbt/internal/XMainClassLoader.java | 3 ++- .../java/sbt/internal/XMainConfiguration.java | 3 ++- .../main/scala/sbt/BackgroundJobService.scala | 3 ++- main/src/main/scala/sbt/BuildPaths.scala | 3 ++- main/src/main/scala/sbt/BuildSyntax.scala | 3 ++- .../sbt/ClassLoaderLayeringStrategy.scala | 3 ++- .../main/scala/sbt/CommandLineUIService.scala | 3 ++- main/src/main/scala/sbt/Cross.scala | 3 ++- main/src/main/scala/sbt/Defaults.scala | 3 ++- main/src/main/scala/sbt/EvaluateTask.scala | 3 ++- main/src/main/scala/sbt/Extracted.scala | 3 ++- .../main/scala/sbt/InteractionService.scala | 3 ++- main/src/main/scala/sbt/Keys.scala | 3 ++- main/src/main/scala/sbt/Main.scala | 3 ++- main/src/main/scala/sbt/MainLoop.scala | 3 ++- main/src/main/scala/sbt/OptionSyntax.scala | 3 ++- main/src/main/scala/sbt/Opts.scala | 3 ++- main/src/main/scala/sbt/PluginCross.scala | 3 ++- main/src/main/scala/sbt/Plugins.scala | 3 ++- main/src/main/scala/sbt/Project.scala | 3 ++- main/src/main/scala/sbt/Resolvers.scala | 3 ++- main/src/main/scala/sbt/RichURI.scala | 3 ++- main/src/main/scala/sbt/ScopeFilter.scala | 3 ++- main/src/main/scala/sbt/ScopedKeyData.scala | 3 ++- main/src/main/scala/sbt/ScriptedPlugin.scala | 3 ++- main/src/main/scala/sbt/ScriptedRun.scala | 3 ++- main/src/main/scala/sbt/SessionVar.scala | 3 ++- main/src/main/scala/sbt/StateTransform.scala | 3 ++- main/src/main/scala/sbt/Tags.scala | 3 ++- .../main/scala/sbt/TemplateCommandUtil.scala | 3 ++- main/src/main/scala/sbt/Terminal.scala | 3 ++- main/src/main/scala/sbt/UpperStateOps.scala | 3 ++- main/src/main/scala/sbt/VersionScheme.scala | 3 ++- .../coursierint/CoursierArtifactsTasks.scala | 3 ++- .../sbt/coursierint/CoursierInputsTasks.scala | 3 ++- .../CoursierRepositoriesTasks.scala | 3 ++- .../scala/sbt/coursierint/LMCoursier.scala | 3 ++- .../main/scala/sbt/internal/APIMappings.scala | 3 ++- .../sbt/internal/AbstractTaskProgress.scala | 3 ++- main/src/main/scala/sbt/internal/Act.scala | 3 ++- .../main/scala/sbt/internal/AddSettings.scala | 3 ++- .../main/scala/sbt/internal/Aggregation.scala | 3 ++- main/src/main/scala/sbt/internal/Banner.scala | 3 ++- .../main/scala/sbt/internal/BuildDef.scala | 3 ++- .../sbt/internal/BuildDependencies.scala | 3 ++- .../main/scala/sbt/internal/BuildLoader.scala | 3 ++- .../scala/sbt/internal/BuildStructure.scala | 3 ++- .../main/scala/sbt/internal/BuildUtil.scala | 3 ++- .../sbt/internal/ClassLoaderWarmup.scala | 3 ++- .../scala/sbt/internal/ClassLoaders.scala | 3 ++- .../scala/sbt/internal/ClasspathImpl.scala | 3 ++- main/src/main/scala/sbt/internal/Clean.scala | 3 ++- .../scala/sbt/internal/CommandExchange.scala | 3 ++- .../scala/sbt/internal/CommandStrings.scala | 3 ++- .../scala/sbt/internal/CompatParColls.scala | 3 ++- .../scala/sbt/internal/ConsoleProject.scala | 3 ++- .../main/scala/sbt/internal/Continuous.scala | 3 ++- .../main/scala/sbt/internal/CrossJava.scala | 3 ++- .../DefaultBackgroundJobService.scala | 3 ++- .../sbt/internal/DefaultRunProfiler.scala | 3 ++- .../sbt/internal/DeprecatedContinuous.scala | 3 ++- .../main/scala/sbt/internal/DslEntry.scala | 3 ++- .../scala/sbt/internal/DynamicInput.scala | 3 ++- .../sbt/internal/EvaluateConfigurations.scala | 3 ++- .../sbt/internal/FastTrackCommands.scala | 3 ++- .../scala/sbt/internal/FileChangesMacro.scala | 3 ++- .../main/scala/sbt/internal/GCMonitor.scala | 3 ++- main/src/main/scala/sbt/internal/GCUtil.scala | 3 ++- .../scala/sbt/internal/GlobalPlugin.scala | 3 ++- .../sbt/internal/GroupedAutoPlugins.scala | 3 ++- .../sbt/internal/InMemoryCacheStore.scala | 3 ++- .../src/main/scala/sbt/internal/Inspect.scala | 3 ++- .../main/scala/sbt/internal/InstallSbtn.scala | 3 ++- .../sbt/internal/InternalDependencies.scala | 3 ++- .../main/scala/sbt/internal/IvyConsole.scala | 3 ++- .../scala/sbt/internal/JarClassPath.scala | 3 ++- .../main/scala/sbt/internal/KeyIndex.scala | 3 ++- .../sbt/internal/LayeredClassLoaders.scala | 3 ++- .../sbt/internal/LibraryManagement.scala | 3 ++- .../main/scala/sbt/internal/LintUnused.scala | 3 ++- main/src/main/scala/sbt/internal/Load.scala | 3 ++- .../scala/sbt/internal/LoadedSbtFile.scala | 3 ++- .../main/scala/sbt/internal/LogManager.scala | 3 ++- main/src/main/scala/sbt/internal/Output.scala | 3 ++- .../scala/sbt/internal/PluginDiscovery.scala | 3 ++- .../scala/sbt/internal/PluginManagement.scala | 3 ++- .../scala/sbt/internal/PluginsDebug.scala | 3 ++- .../main/scala/sbt/internal/PrettyPrint.scala | 3 ++- .../sbt/internal/ProjectNavigation.scala | 3 ++- .../scala/sbt/internal/RelayAppender.scala | 3 ++- .../main/scala/sbt/internal/RemoteCache.scala | 3 ++- .../src/main/scala/sbt/internal/Resolve.scala | 3 ++- .../scala/sbt/internal/RetrieveUnit.scala | 3 ++- main/src/main/scala/sbt/internal/Script.scala | 3 ++- .../scala/sbt/internal/SessionSettings.scala | 3 ++- .../sbt/internal/SettingCompletions.scala | 3 ++- .../scala/sbt/internal/SettingGraph.scala | 3 ++- .../scala/sbt/internal/ShutdownHooks.scala | 3 ++- .../src/main/scala/sbt/internal/SysProp.scala | 3 ++- .../main/scala/sbt/internal/TaskName.scala | 3 ++- .../scala/sbt/internal/TaskProgress.scala | 3 ++- .../scala/sbt/internal/TaskSequential.scala | 3 ++- .../main/scala/sbt/internal/TaskTimings.scala | 3 ++- .../scala/sbt/internal/TaskTraceEvent.scala | 3 ++- .../sbt/internal/VirtualFileValueCache.scala | 3 ++- .../WatchTransitiveDependencies.scala | 3 ++- .../internal/graph/GraphTransformations.scala | 3 ++- .../internal/graph/backend/IvyReport.scala | 3 ++- .../graph/backend/SbtUpdateReport.scala | 3 ++- .../main/scala/sbt/internal/graph/model.scala | 3 ++- .../scala/sbt/internal/graph/package.scala | 3 ++- .../internal/graph/rendering/AsciiTree.scala | 3 ++- .../sbt/internal/graph/rendering/DOT.scala | 3 ++- .../internal/graph/rendering/DagreHTML.scala | 3 ++- .../internal/graph/rendering/FlatList.scala | 3 ++- .../internal/graph/rendering/GraphML.scala | 3 ++- .../graph/rendering/LicenseInfo.scala | 3 ++- .../internal/graph/rendering/Statistics.scala | 3 ++- .../internal/graph/rendering/TreeView.scala | 3 ++- .../librarymanagement/FakeRawRepository.scala | 3 ++- .../internal/librarymanagement/IvyXml.scala | 3 ++- .../sbt/internal/nio/CheckBuildSources.scala | 3 ++- .../scala/sbt/internal/parser/SbtParser.scala | 3 ++- .../sbt/internal/parser/SbtRefactorings.scala | 3 ++- .../internal/server/BspCompileProgress.scala | 3 ++- .../sbt/internal/server/BspCompileTask.scala | 3 ++- .../server/BuildServerEvalReporter.scala | 3 ++- .../internal/server/BuildServerProtocol.scala | 3 ++- .../internal/server/BuildServerReporter.scala | 3 ++- .../sbt/internal/server/Definition.scala | 3 ++- .../server/LanguageServerProtocol.scala | 3 ++- .../sbt/internal/server/NetworkChannel.scala | 3 ++- .../sbt/internal/server/SettingQuery.scala | 3 ++- .../sbt/internal/server/VirtualTerminal.scala | 3 ++- main/src/main/scala/sbt/nio/FileChanges.scala | 3 ++- main/src/main/scala/sbt/nio/FileStamp.scala | 3 ++- main/src/main/scala/sbt/nio/Keys.scala | 3 ++- main/src/main/scala/sbt/nio/Settings.scala | 3 ++- main/src/main/scala/sbt/nio/Watch.scala | 3 ++- .../main/scala/sbt/plugins/CorePlugin.scala | 3 ++- .../sbt/plugins/DependencyTreeKeys.scala | 3 ++- .../sbt/plugins/DependencyTreeSettings.scala | 3 ++- .../sbt/plugins/Giter8TemplatePlugin.scala | 3 ++- .../main/scala/sbt/plugins/IvyPlugin.scala | 3 ++- .../sbt/plugins/JUnitXmlReportPlugin.scala | 3 ++- .../main/scala/sbt/plugins/JvmPlugin.scala | 3 ++- .../plugins/MiniDependencyTreePlugin.scala | 3 ++- .../main/scala/sbt/plugins/SbtPlugin.scala | 3 ++- .../scala/sbt/plugins/SemanticdbPlugin.scala | 3 ++- main/src/test/scala/BuildPathsTest.scala | 3 ++- main/src/test/scala/ClasspathsTest.scala | 3 ++- main/src/test/scala/DefaultsTest.scala | 3 ++- main/src/test/scala/Delegates.scala | 3 ++- main/src/test/scala/ParseKey.scala | 3 ++- main/src/test/scala/ParserSpec.scala | 3 ++- main/src/test/scala/PluginCommandTest.scala | 3 ++- main/src/test/scala/PluginsTest.scala | 3 ++- main/src/test/scala/ProjectMacro.scala | 3 ++- main/src/test/scala/ProjectSpec.scala | 3 ++- main/src/test/scala/TagsTest.scala | 3 ++- .../scala/sbt/internal/AggregationSpec.scala | 3 ++- .../scala/sbt/internal/CrossJavaTest.scala | 3 ++- .../sbt/internal/FileStampJsonSpec.scala | 3 ++- .../scala/sbt/internal/GCMonitorTest.scala | 3 ++- .../scala/sbt/internal/InstallSbtnSpec.scala | 3 ++- .../scala/sbt/internal/StressGCMonitor.scala | 3 ++- .../test/scala/sbt/internal/TestBuild.scala | 3 ++- .../graph/rendering/TreeViewTest.scala | 3 ++- .../sbt/internal/parser/AbstractSpec.scala | 3 ++- .../internal/parser/CheckIfParsedSpec.scala | 3 ++- .../internal/parser/CommentedXmlSpec.scala | 3 ++- .../sbt/internal/parser/EmbeddedXmlSpec.scala | 3 ++- .../scala/sbt/internal/parser/ErrorSpec.scala | 3 ++- .../sbt/internal/parser/NewFormatSpec.scala | 3 ++- .../internal/parser/SessionSettingsSpec.scala | 3 ++- .../internal/parser/SplitExpressions.scala | 3 ++- .../parser/SplitExpressionsBehavior.scala | 3 ++- .../parser/SplitExpressionsTest.scala | 3 ++- .../sbt/internal/server/DefinitionTest.scala | 3 ++- .../internal/server/SettingQueryTest.scala | 3 ++- .../test/scala/testpkg/CompletionSpec.scala | 3 ++- .../internal/bsp/BuildServerConnection.scala | 3 ++- .../sbt/internal/bsp/BuildServerTasks.scala | 3 ++- .../sbt/internal/bsp/BuildTargetName.scala | 3 ++- .../sbt/internal/bsp/BuildTargetTag.scala | 3 ++- .../sbt/internal/bsp/DiagnosticSeverity.scala | 3 ++- .../sbt/internal/bsp/OutputPathItemKind.scala | 3 ++- .../sbt/internal/bsp/ScalaPlatform.scala | 3 ++- .../sbt/internal/bsp/SourceItemKind.scala | 3 ++- .../scala/sbt/internal/bsp/StatusCode.scala | 3 ++- .../langserver/DiagnosticSeverity.scala | 3 ++- .../sbt/internal/langserver/ErrorCodes.scala | 3 ++- .../sbt/internal/langserver/MessageType.scala | 3 ++- .../protocol/codec/JsonRPCProtocol.scala | 3 ++- .../JsonRpcNotificationMessageFormats.scala | 3 ++- .../codec/JsonRpcRequestMessageFormats.scala | 3 ++- .../codec/JsonRpcResponseErrorFormats.scala | 3 ++- .../codec/JsonRpcResponseMessageFormats.scala | 3 ++- .../scala/sbt/protocol/ClientSocket.scala | 3 ++- .../scala/sbt/protocol/Serialization.scala | 3 ++- run/NOTICE | 3 ++- run/src/main/scala/sbt/Fork.scala | 3 ++- run/src/main/scala/sbt/OutputStrategy.scala | 3 ++- run/src/main/scala/sbt/Run.scala | 3 ++- run/src/main/scala/sbt/SelectMainClass.scala | 3 ++- run/src/main/scala/sbt/TrapExit.scala | 3 ++- .../scala/sbt/TrapExitSecurityException.scala | 3 ++- run/src/test/scala/sbt/ForkTest.scala | 3 ++- run/src/test/scala/sbt/TestLogger.scala | 3 ++- sbt-app/src/main/scala/package.scala | 3 ++- sbt-app/src/main/scala/sbt/AllSyntax.scala | 3 ++- sbt-app/src/main/scala/sbt/Import.scala | 3 ++- .../test/scala/sbt/IllegalReferenceSpec.scala | 3 ++- .../test/scala/sbt/RunFromSourceMain.scala | 3 ++- .../scriptedtest/ScriptedLauncher.java | 3 ++- .../src/main/scala/sbt/ScriptedPlugin.scala | 3 ++- .../scala/sbt/test/OldScriptedTests.scala | 3 ++- scripted-sbt-redux/NOTICE | 3 ++- .../sbt/scriptedtest/BatchScriptRunner.scala | 3 ++- .../sbt/scriptedtest/RemoteSbtCreator.scala | 3 ++- .../scala/sbt/scriptedtest/SbtHandler.scala | 3 ++- .../sbt/scriptedtest/ScriptedTests.scala | 3 ++- tasks-standard/NOTICE | 3 ++- .../src/main/scala/sbt/Action.scala | 3 ++- .../src/main/scala/sbt/std/Streams.scala | 3 ++- .../src/main/scala/sbt/std/TaskExtra.scala | 3 ++- .../src/main/scala/sbt/std/Transform.scala | 3 ++- tasks-standard/src/test/scala/Execute.scala | 3 ++- tasks-standard/src/test/scala/TaskGen.scala | 3 ++- .../src/test/scala/TaskRunnerCircular.scala | 3 ++- .../src/test/scala/TaskRunnerFork.scala | 3 ++- .../src/test/scala/TaskSerial.scala | 3 ++- tasks-standard/src/test/scala/Test.scala | 3 ++- .../src/test/scala/TestRunnerCall.scala | 3 ++- .../src/test/scala/TestRunnerSort.scala | 3 ++- .../src/test/scala/checkResult.scala | 3 ++- tasks/NOTICE | 3 ++- .../main/scala/sbt/CompletionService.scala | 3 ++- .../scala/sbt/ConcurrentRestrictions.scala | 3 ++- tasks/src/main/scala/sbt/Execute.scala | 3 ++- .../src/main/scala/sbt/ExecuteProgress.scala | 3 ++- tasks/src/main/scala/sbt/Incomplete.scala | 3 ++- tasks/src/main/scala/sbt/Node.scala | 3 ++- tasks/src/main/scala/sbt/Result.scala | 3 ++- testing/NOTICE | 3 ++- .../src/main/java/sbt/ForkConfiguration.java | 3 ++- testing/agent/src/main/java/sbt/ForkMain.java | 3 ++- testing/agent/src/main/java/sbt/ForkTags.java | 3 ++- .../src/main/java/sbt/FrameworkWrapper.java | 3 ++- .../scala/sbt/JUnitXmlTestsListener.scala | 3 ++- .../src/main/scala/sbt/TestFramework.scala | 3 ++- .../main/scala/sbt/TestReportListener.scala | 3 ++- .../main/scala/sbt/TestStatusReporter.scala | 3 ++- .../sbt/internal/testing/StatusFormats.scala | 3 ++- .../sbt/internal/testing/TestLogger.scala | 3 ++- .../sbt/internal/util/EmptyCacheError.scala | 3 ++- .../scala/sbt/util/BasicCacheImplicits.scala | 3 ++- .../src/main/scala/sbt/util/Cache.scala | 3 ++- .../main/scala/sbt/util/CacheImplicits.scala | 3 ++- .../src/main/scala/sbt/util/CacheStore.scala | 3 ++- .../src/main/scala/sbt/util/FileInfo.scala | 3 ++- .../src/main/scala/sbt/util/Input.scala | 3 ++- .../src/main/scala/sbt/util/Output.scala | 3 ++- .../main/scala/sbt/util/SeparatedCache.scala | 3 ++- .../main/scala/sbt/util/StampedFormat.scala | 3 ++- util-cache/src/test/scala/CacheSpec.scala | 3 ++- util-cache/src/test/scala/FileInfoSpec.scala | 3 ++- .../src/test/scala/SingletonCacheSpec.scala | 3 ++- .../main/scala/sbt/util/ChangeReport.scala | 3 ++- .../main/scala/sbt/util/FileFunction.scala | 3 ++- .../src/main/scala/sbt/util/Tracked.scala | 3 ++- .../src/test/scala/sbt/util/TrackedSpec.scala | 3 ++- .../xsbti/compile/ZincBridgeProvider.java | 3 ++- .../main/scala/sbt/internal/inc/Errors.scala | 3 ++- .../scala/sbt/internal/inc/IfMissing.scala | 3 ++- .../sbt/internal/inc/ResourceLoader.scala | 3 ++- .../internal/inc/ZincComponentCompiler.scala | 3 ++- .../internal/inc/ZincComponentManager.scala | 3 ++- .../scala/sbt/internal/inc/ZincLmUtil.scala | 3 ++- .../inc/IvyBridgeProviderSpecification.scala | 3 ++- .../inc/ZincComponentCompilerSpec.scala | 3 ++- 517 files changed, 1055 insertions(+), 528 deletions(-) create mode 100644 .github/workflows/cla.yml diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 000000000..abbf9f3ba --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,24 @@ +name: Scala CLA +on: [pull_request] +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Check CLA + env: + AUTHOR: ${{ github.event.pull_request.user.login }} + run: | + echo "Pull request submitted by $AUTHOR"; + signed=$(curl -s "https://www.lightbend.com/contribute/cla/scala/check/$AUTHOR" | jq -r ".signed"); + if [ "$signed" = "true" ] ; then + echo "CLA check for $AUTHOR successful"; + else + echo "CLA check for $AUTHOR failed"; + echo "Please sign the Scala CLA to contribute to the Scala compiler."; + echo "Go to https://www.lightbend.com/contribute/cla/scala and then"; + echo "comment on the pull request to ask for a new check."; + echo ""; + echo "Check if CLA is signed: https://www.lightbend.com/contribute/cla/scala/check/$AUTHOR"; + exit 1; + fi; diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7a90de47c..74e222003 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -153,7 +153,7 @@ $ vsce publish ## Signing the CLA Contributing to sbt requires you or your employer to sign the -[Lightbend Contributor License Agreement](https://www.lightbend.com/contribute/cla). +[Scala Contributor License Agreement](https://www.lightbend.com/contribute/cla/scala). To make it easier to respect our license agreements, we have added an sbt task that takes care of adding the LICENSE headers to new files. Run `headerCreate` diff --git a/LICENSE b/LICENSE index a5c4997c4..5c4a3cff9 100644 --- a/LICENSE +++ b/LICENSE @@ -187,7 +187,8 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright (c) 2011 - 2018, Lightbend, Inc. + Copyright (c) 2023, Scala Center + Copyright (c) 2011 - 2022, Lightbend, Inc. Copyright (c) 2008 - 2010, Mark Harrah Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/NOTICE b/NOTICE index 82bd2c916..7cc4772ab 100644 --- a/NOTICE +++ b/NOTICE @@ -1,5 +1,6 @@ sbt -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under Apache v2 license (see LICENSE) diff --git a/SUPPORT.md b/SUPPORT.md index c3c7d0c44..9195e0789 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,20 +1,10 @@ [ask]: https://stackoverflow.com/questions/ask?tags=sbt - [Lightbend]: https://www.lightbend.com/ - [subscriptions]: https://www.lightbend.com/platform/subscription [gitter]: https://gitter.im/sbt/sbt Support ======= -[Lightbend] sponsors sbt and encourages contributions from the active community. Enterprises can adopt it for mission critical systems with confidence because Lightbend stands behind sbt with commercial support and services. - For community support please [ask] on StackOverflow with the tag "sbt" (and the name of the sbt plugin(s) if any). - State the problem or question clearly and provide enough context. Code examples and `build.sbt` are often useful when appropriately edited. - There's also [Gitter sbt/sbt room][gitter], but Stackoverflow is recommended so others can benefit from the answers. - -For professional support, for instance if you need faster response times, [Lightbend], the maintainer of Scala compiler and sbt, provides: - -- [Lightbend Subscriptions][subscriptions], which includes Expert Support -- Training -- Consulting diff --git a/build.sbt b/build.sbt index 3c7f12022..7ddb3efbc 100644 --- a/build.sbt +++ b/build.sbt @@ -59,7 +59,8 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( headerLicense := Some( HeaderLicense.Custom( """|sbt - |Copyright 2011 - 2018, Lightbend, Inc. + |Copyright 2023, Scala center + |Copyright 2011 - 2022, Lightbend, Inc. |Copyright 2008 - 2010, Mark Harrah |Licensed under Apache License 2.0 (see LICENSE) |""".stripMargin diff --git a/client/src/main/java/sbt/client/Client.java b/client/src/main/java/sbt/client/Client.java index bf9f120bb..6ffe838ff 100644 --- a/client/src/main/java/sbt/client/Client.java +++ b/client/src/main/java/sbt/client/Client.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 e87b13a21..5d2826cfa 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,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 a3e3a754b..12eaa0f0a 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/Instance.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/Instance.scala index 35e2d7dc6..1e0d1e10b 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/Instance.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/Instance.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/KListBuilder.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/KListBuilder.scala index 6d2ae0a50..b829cdf2a 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/KListBuilder.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/KListBuilder.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/LinterDSL.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/LinterDSL.scala index fb42f2e2e..ea42203fa 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/LinterDSL.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/LinterDSL.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/MixedBuilder.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/MixedBuilder.scala index abcde7c80..29b81f3d6 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/MixedBuilder.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/MixedBuilder.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/StringTypeTag.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/StringTypeTag.scala index faeda9245..3abc37b9d 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/StringTypeTag.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/StringTypeTag.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleBuilder.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleBuilder.scala index 14afc4eb4..434d97801 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleBuilder.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleBuilder.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleNBuilder.scala b/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleNBuilder.scala index e47e06b11..8d724e970 100644 --- a/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleNBuilder.scala +++ b/core-macros/src/main/scala/sbt/internal/util/appmacro/TupleNBuilder.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala b/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala index a6debd947..bbe154376 100644 --- a/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala +++ b/dependency-tree/src/main/scala/sbt/plugins/DependencyTreePlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/NOTICE b/internal/util-collection/NOTICE index db1ba7e33..476ffa821 100644 --- a/internal/util-collection/NOTICE +++ b/internal/util-collection/NOTICE @@ -1,4 +1,5 @@ sbt: Collection Component -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under BSD-3-Clause license (see LICENSE) diff --git a/internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala b/internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala index 34e939244..6f07a0074 100644 --- a/internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala +++ b/internal/util-collection/src/main/scala-2.12/sbt/internal/util/Par.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala b/internal/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala index 6a8caf80f..8bf203baf 100644 --- a/internal/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala +++ b/internal/util-collection/src/main/scala-2.12/sbt/internal/util/WrappedMap.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/AList.scala b/internal/util-collection/src/main/scala/sbt/internal/util/AList.scala index ca10d2356..912ac9053 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/AList.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/AList.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala index 0c1d2cf2c..7d1bdd678 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Classes.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Classes.scala index 2d7c7aeac..e3bc49394 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Classes.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Classes.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Dag.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Dag.scala index f5f584290..25bab8f8f 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Dag.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Dag.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/HList.scala b/internal/util-collection/src/main/scala/sbt/internal/util/HList.scala index dc9d163f9..d0644a4b5 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/HList.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/HList.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/HListFormats.scala b/internal/util-collection/src/main/scala/sbt/internal/util/HListFormats.scala index 4143861b2..6ed3ab554 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/HListFormats.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/HListFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/IDSet.scala b/internal/util-collection/src/main/scala/sbt/internal/util/IDSet.scala index b3cacdfe1..6646505e5 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/IDSet.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/IDSet.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/INode.scala b/internal/util-collection/src/main/scala/sbt/internal/util/INode.scala index 3d7c86646..db1ec44ad 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/INode.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/INode.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/KList.scala b/internal/util-collection/src/main/scala/sbt/internal/util/KList.scala index 2761d8172..338004e3a 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/KList.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/KList.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala b/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala index ed90560ee..c7b909aeb 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/PMap.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala index 4541980cd..dee09aa17 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Settings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala index b0e862410..8c186c7be 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Signal.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/TypeFunctions.scala b/internal/util-collection/src/main/scala/sbt/internal/util/TypeFunctions.scala index 5d11c57fb..c719756ff 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/TypeFunctions.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/TypeFunctions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Types.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Types.scala index e07b6bd9f..a30b2aa62 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Types.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Types.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala index ca03ed381..324c62dfb 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/util/OptJsonWriter.scala b/internal/util-collection/src/main/scala/sbt/util/OptJsonWriter.scala index 13883bbff..15df76707 100644 --- a/internal/util-collection/src/main/scala/sbt/util/OptJsonWriter.scala +++ b/internal/util-collection/src/main/scala/sbt/util/OptJsonWriter.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/main/scala/sbt/util/Show.scala b/internal/util-collection/src/main/scala/sbt/util/Show.scala index fa2c27008..09d275eaa 100644 --- a/internal/util-collection/src/main/scala/sbt/util/Show.scala +++ b/internal/util-collection/src/main/scala/sbt/util/Show.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/test/scala/DagSpecification.scala b/internal/util-collection/src/test/scala/DagSpecification.scala index f5da77dee..9b919faa2 100644 --- a/internal/util-collection/src/test/scala/DagSpecification.scala +++ b/internal/util-collection/src/test/scala/DagSpecification.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/test/scala/HListFormatSpec.scala b/internal/util-collection/src/test/scala/HListFormatSpec.scala index dbdd5ce88..2b0b96bab 100644 --- a/internal/util-collection/src/test/scala/HListFormatSpec.scala +++ b/internal/util-collection/src/test/scala/HListFormatSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/test/scala/KeyTest.scala b/internal/util-collection/src/test/scala/KeyTest.scala index b2ebb4d11..01f1e4830 100644 --- a/internal/util-collection/src/test/scala/KeyTest.scala +++ b/internal/util-collection/src/test/scala/KeyTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/test/scala/PMapTest.scala b/internal/util-collection/src/test/scala/PMapTest.scala index c21cfd4b0..98660389a 100644 --- a/internal/util-collection/src/test/scala/PMapTest.scala +++ b/internal/util-collection/src/test/scala/PMapTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/test/scala/SettingsExample.scala b/internal/util-collection/src/test/scala/SettingsExample.scala index 5399f79c1..2b7cc57a3 100644 --- a/internal/util-collection/src/test/scala/SettingsExample.scala +++ b/internal/util-collection/src/test/scala/SettingsExample.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/test/scala/SettingsTest.scala b/internal/util-collection/src/test/scala/SettingsTest.scala index bbfa2a848..72d37ddab 100644 --- a/internal/util-collection/src/test/scala/SettingsTest.scala +++ b/internal/util-collection/src/test/scala/SettingsTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-collection/src/test/scala/UnitSpec.scala b/internal/util-collection/src/test/scala/UnitSpec.scala index 912b39d16..1469ed6f6 100644 --- a/internal/util-collection/src/test/scala/UnitSpec.scala +++ b/internal/util-collection/src/test/scala/UnitSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/NOTICE b/internal/util-complete/NOTICE index d5827b9c2..49c8ba71c 100644 --- a/internal/util-complete/NOTICE +++ b/internal/util-complete/NOTICE @@ -1,4 +1,5 @@ sbt: Completion Component -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under BSD-3-Clause license (see LICENSE) 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 fbc86b725..20db30ab0 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/Completions.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/Completions.scala index 2d938d89a..0e079a32f 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/Completions.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/Completions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/EditDistance.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/EditDistance.scala index e7c710c87..a2d70864c 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/EditDistance.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/EditDistance.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 e15217524..cbc658900 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/History.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/History.scala index b65dba0dc..46b48591d 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/History.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/History.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 6c45f54e9..a00f30036 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 1e9f4cfcb..909df515e 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 8d66d2137..76aaecdda 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parsers.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parsers.scala index 15a1f2dcb..ad2622f83 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parsers.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/Parsers.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/ProcessError.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/ProcessError.scala index 1d3a540bf..e26eebfc9 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/ProcessError.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/ProcessError.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/SizeParser.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/SizeParser.scala index 1ca63efbe..3f110c006 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/SizeParser.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/SizeParser.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/TokenCompletions.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/TokenCompletions.scala index b956417da..0b30a9b64 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/TokenCompletions.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/TokenCompletions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/TypeString.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/TypeString.scala index 3a4e84ad2..99d4dd2d1 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/TypeString.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/TypeString.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/complete/UpperBound.scala b/internal/util-complete/src/main/scala/sbt/internal/util/complete/UpperBound.scala index c502f8784..a25e1aa89 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/complete/UpperBound.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/complete/UpperBound.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/test/scala/DefaultParsersSpec.scala b/internal/util-complete/src/test/scala/DefaultParsersSpec.scala index b0f7bd47e..4c8cd8c04 100644 --- a/internal/util-complete/src/test/scala/DefaultParsersSpec.scala +++ b/internal/util-complete/src/test/scala/DefaultParsersSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/test/scala/ParserTest.scala b/internal/util-complete/src/test/scala/ParserTest.scala index 4694f974a..2db039b43 100644 --- a/internal/util-complete/src/test/scala/ParserTest.scala +++ b/internal/util-complete/src/test/scala/ParserTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/test/scala/UnitSpec.scala b/internal/util-complete/src/test/scala/UnitSpec.scala index 912b39d16..1469ed6f6 100644 --- a/internal/util-complete/src/test/scala/UnitSpec.scala +++ b/internal/util-complete/src/test/scala/UnitSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala b/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala index da4662308..c32269bde 100644 --- a/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala +++ b/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/test/scala/sbt/complete/FixedSetExamplesTest.scala b/internal/util-complete/src/test/scala/sbt/complete/FixedSetExamplesTest.scala index 51c6a2f6f..835afb593 100644 --- a/internal/util-complete/src/test/scala/sbt/complete/FixedSetExamplesTest.scala +++ b/internal/util-complete/src/test/scala/sbt/complete/FixedSetExamplesTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/test/scala/sbt/complete/ParserWithExamplesTest.scala b/internal/util-complete/src/test/scala/sbt/complete/ParserWithExamplesTest.scala index 93e8e4c05..534d64ca9 100644 --- a/internal/util-complete/src/test/scala/sbt/complete/ParserWithExamplesTest.scala +++ b/internal/util-complete/src/test/scala/sbt/complete/ParserWithExamplesTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-complete/src/test/scala/sbt/internal/util/complete/SizeParserSpec.scala b/internal/util-complete/src/test/scala/sbt/internal/util/complete/SizeParserSpec.scala index 6d68fdae9..73c3be393 100644 --- a/internal/util-complete/src/test/scala/sbt/internal/util/complete/SizeParserSpec.scala +++ b/internal/util-complete/src/test/scala/sbt/internal/util/complete/SizeParserSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-control/src/main/scala/sbt/internal/util/ErrorHandling.scala b/internal/util-control/src/main/scala/sbt/internal/util/ErrorHandling.scala index 7b2a86994..06160b3cd 100644 --- a/internal/util-control/src/main/scala/sbt/internal/util/ErrorHandling.scala +++ b/internal/util-control/src/main/scala/sbt/internal/util/ErrorHandling.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-control/src/main/scala/sbt/internal/util/ExitHook.scala b/internal/util-control/src/main/scala/sbt/internal/util/ExitHook.scala index 677b780fd..ef66b7cac 100644 --- a/internal/util-control/src/main/scala/sbt/internal/util/ExitHook.scala +++ b/internal/util-control/src/main/scala/sbt/internal/util/ExitHook.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-control/src/main/scala/sbt/internal/util/MessageOnlyException.scala b/internal/util-control/src/main/scala/sbt/internal/util/MessageOnlyException.scala index 094d4999c..f398fecbc 100644 --- a/internal/util-control/src/main/scala/sbt/internal/util/MessageOnlyException.scala +++ b/internal/util-control/src/main/scala/sbt/internal/util/MessageOnlyException.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-control/src/main/scala/sbt/internal/util/RunningProcesses.scala b/internal/util-control/src/main/scala/sbt/internal/util/RunningProcesses.scala index 47da42d34..e291da42e 100644 --- a/internal/util-control/src/main/scala/sbt/internal/util/RunningProcesses.scala +++ b/internal/util-control/src/main/scala/sbt/internal/util/RunningProcesses.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/Action.java b/internal/util-interface/src/main/java/xsbti/Action.java index 6bfc12826..c5c25cdc8 100644 --- a/internal/util-interface/src/main/java/xsbti/Action.java +++ b/internal/util-interface/src/main/java/xsbti/Action.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/DiagnosticCode.java b/internal/util-interface/src/main/java/xsbti/DiagnosticCode.java index 6633e2b4e..21a9bbe72 100644 --- a/internal/util-interface/src/main/java/xsbti/DiagnosticCode.java +++ b/internal/util-interface/src/main/java/xsbti/DiagnosticCode.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/DiagnosticRelatedInformation.java b/internal/util-interface/src/main/java/xsbti/DiagnosticRelatedInformation.java index 786cecc52..e9be34ab9 100644 --- a/internal/util-interface/src/main/java/xsbti/DiagnosticRelatedInformation.java +++ b/internal/util-interface/src/main/java/xsbti/DiagnosticRelatedInformation.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/Logger.java b/internal/util-interface/src/main/java/xsbti/Logger.java index 54023b52e..5dffe56c0 100644 --- a/internal/util-interface/src/main/java/xsbti/Logger.java +++ b/internal/util-interface/src/main/java/xsbti/Logger.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/Position.java b/internal/util-interface/src/main/java/xsbti/Position.java index da4f139d6..694d005f4 100644 --- a/internal/util-interface/src/main/java/xsbti/Position.java +++ b/internal/util-interface/src/main/java/xsbti/Position.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/Problem.java b/internal/util-interface/src/main/java/xsbti/Problem.java index 2d5c091f6..50efefc8b 100644 --- a/internal/util-interface/src/main/java/xsbti/Problem.java +++ b/internal/util-interface/src/main/java/xsbti/Problem.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/Severity.java b/internal/util-interface/src/main/java/xsbti/Severity.java index 833d91093..261e79200 100644 --- a/internal/util-interface/src/main/java/xsbti/Severity.java +++ b/internal/util-interface/src/main/java/xsbti/Severity.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/T2.java b/internal/util-interface/src/main/java/xsbti/T2.java index 2f51726d7..382f4e446 100644 --- a/internal/util-interface/src/main/java/xsbti/T2.java +++ b/internal/util-interface/src/main/java/xsbti/T2.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/TextEdit.java b/internal/util-interface/src/main/java/xsbti/TextEdit.java index caffb642d..1ea5fbce0 100644 --- a/internal/util-interface/src/main/java/xsbti/TextEdit.java +++ b/internal/util-interface/src/main/java/xsbti/TextEdit.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java b/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java index 8508e5826..9de31fb31 100644 --- a/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java +++ b/internal/util-interface/src/main/java/xsbti/WorkspaceEdit.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/java/sbt/internal/util/DeprecatedJLine.java b/internal/util-logging/src/main/java/sbt/internal/util/DeprecatedJLine.java index 4e091a2a5..00fc47df2 100644 --- a/internal/util-logging/src/main/java/sbt/internal/util/DeprecatedJLine.java +++ b/internal/util-logging/src/main/java/sbt/internal/util/DeprecatedJLine.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/com/github/ghik/silencer/silent.scala b/internal/util-logging/src/main/scala/com/github/ghik/silencer/silent.scala index 0918e75aa..a025b8c3b 100644 --- a/internal/util-logging/src/main/scala/com/github/ghik/silencer/silent.scala +++ b/internal/util-logging/src/main/scala/com/github/ghik/silencer/silent.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/BasicLogger.scala b/internal/util-logging/src/main/scala/sbt/internal/util/BasicLogger.scala index 802e60a42..4568cdda9 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/BasicLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/BasicLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/BufferedLogger.scala b/internal/util-logging/src/main/scala/sbt/internal/util/BufferedLogger.scala index 827cfa82f..96319d76a 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/BufferedLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/BufferedLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 2b1700572..58fada63b 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 0f6a089bf..f7c47c045 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 ee84680c6..4fe3060a8 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/FilterLogger.scala b/internal/util-logging/src/main/scala/sbt/internal/util/FilterLogger.scala index 57cad95a9..dbf33bd6a 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/FilterLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/FilterLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/FullLogger.scala b/internal/util-logging/src/main/scala/sbt/internal/util/FullLogger.scala index 3298d26a0..9eb93b1b0 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/FullLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/FullLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/GlobalLogging.scala b/internal/util-logging/src/main/scala/sbt/internal/util/GlobalLogging.scala index 00c0a67c0..c80871311 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/GlobalLogging.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/GlobalLogging.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 a4811a2cc..6c2a04311 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/LoggerWriter.scala b/internal/util-logging/src/main/scala/sbt/internal/util/LoggerWriter.scala index 8c8fe34b7..5d0809cee 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/LoggerWriter.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/LoggerWriter.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/MainAppender.scala b/internal/util-logging/src/main/scala/sbt/internal/util/MainAppender.scala index 22ad78a9c..734650bc6 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/MainAppender.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/MainAppender.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala index 21e2bbfa6..9833da1d3 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/MultiLogger.scala b/internal/util-logging/src/main/scala/sbt/internal/util/MultiLogger.scala index 3169b868d..9e1240433 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/MultiLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/MultiLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala index e73b76183..dcebd5eb6 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 817363f8d..e407b4c6f 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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..ae1999b9d 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala b/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala index f98c2d9ce..1e0940efb 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/StringTypeTag.scala b/internal/util-logging/src/main/scala/sbt/internal/util/StringTypeTag.scala index e2b54232a..fa17920d0 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/StringTypeTag.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/StringTypeTag.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala index c935a0999..85176a988 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/WindowsInputStream.scala b/internal/util-logging/src/main/scala/sbt/internal/util/WindowsInputStream.scala index 830dbc2d2..4c0f42f01 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/WindowsInputStream.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/WindowsInputStream.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala index 1b67fa425..455df179b 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codec/PositionFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/PositionFormats.scala index 9b77889df..805165dcf 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/codec/PositionFormats.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codec/PositionFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codec/ProblemFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/ProblemFormats.scala index 2ae0d7512..d81ae2425 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/codec/ProblemFormats.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codec/ProblemFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codec/SeverityFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/SeverityFormats.scala index 982d248d0..63e931182 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/codec/SeverityFormats.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codec/SeverityFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codec/SuccessEventShowLines.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/SuccessEventShowLines.scala index d0bb12ea3..3da1789cc 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/codec/SuccessEventShowLines.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codec/SuccessEventShowLines.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codec/ThrowableShowLines.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/ThrowableShowLines.scala index 21f400ee4..7a23bec31 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/codec/ThrowableShowLines.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codec/ThrowableShowLines.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/util/AbstractLogger.scala b/internal/util-logging/src/main/scala/sbt/util/AbstractLogger.scala index 1337aaf97..69a3de344 100644 --- a/internal/util-logging/src/main/scala/sbt/util/AbstractLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/util/AbstractLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 9da7d0efa..2b9488114 100644 --- a/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala +++ b/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/util/Level.scala b/internal/util-logging/src/main/scala/sbt/util/Level.scala index b9d30dca7..1588fe961 100644 --- a/internal/util-logging/src/main/scala/sbt/util/Level.scala +++ b/internal/util-logging/src/main/scala/sbt/util/Level.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/util/LogEvent.scala b/internal/util-logging/src/main/scala/sbt/util/LogEvent.scala index 28798feef..7f00b4d5a 100644 --- a/internal/util-logging/src/main/scala/sbt/util/LogEvent.scala +++ b/internal/util-logging/src/main/scala/sbt/util/LogEvent.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/util/LogExchange.scala b/internal/util-logging/src/main/scala/sbt/util/LogExchange.scala index 99ee76192..7effb8b6b 100644 --- a/internal/util-logging/src/main/scala/sbt/util/LogExchange.scala +++ b/internal/util-logging/src/main/scala/sbt/util/LogExchange.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/util/Logger.scala b/internal/util-logging/src/main/scala/sbt/util/Logger.scala index 135c92da4..978a36323 100644 --- a/internal/util-logging/src/main/scala/sbt/util/Logger.scala +++ b/internal/util-logging/src/main/scala/sbt/util/Logger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 194bb2de7..c887c786f 100644 --- a/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala +++ b/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/main/scala/sbt/util/ShowLines.scala b/internal/util-logging/src/main/scala/sbt/util/ShowLines.scala index 2f428086f..f6ea6107e 100644 --- a/internal/util-logging/src/main/scala/sbt/util/ShowLines.scala +++ b/internal/util-logging/src/main/scala/sbt/util/ShowLines.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/Escapes.scala b/internal/util-logging/src/test/scala/Escapes.scala index af4e1c705..fd92660de 100644 --- a/internal/util-logging/src/test/scala/Escapes.scala +++ b/internal/util-logging/src/test/scala/Escapes.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/LogExchangeSpec.scala b/internal/util-logging/src/test/scala/LogExchangeSpec.scala index 7e3e44131..d480a9267 100644 --- a/internal/util-logging/src/test/scala/LogExchangeSpec.scala +++ b/internal/util-logging/src/test/scala/LogExchangeSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/LogWriterTest.scala b/internal/util-logging/src/test/scala/LogWriterTest.scala index 0fda82264..e62f65c2a 100644 --- a/internal/util-logging/src/test/scala/LogWriterTest.scala +++ b/internal/util-logging/src/test/scala/LogWriterTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala b/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala index 9a0ecd2c7..95093855a 100644 --- a/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala +++ b/internal/util-logging/src/test/scala/ManagedLoggerSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/ProblemTest.scala b/internal/util-logging/src/test/scala/ProblemTest.scala index d81e80fd2..ed54efe33 100644 --- a/internal/util-logging/src/test/scala/ProblemTest.scala +++ b/internal/util-logging/src/test/scala/ProblemTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/TestLogger.scala b/internal/util-logging/src/test/scala/TestLogger.scala index 45034ab10..d31369a71 100644 --- a/internal/util-logging/src/test/scala/TestLogger.scala +++ b/internal/util-logging/src/test/scala/TestLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/sbt/internal/util/CleanStringSpec.scala b/internal/util-logging/src/test/scala/sbt/internal/util/CleanStringSpec.scala index ee1abdd66..201235ba6 100644 --- a/internal/util-logging/src/test/scala/sbt/internal/util/CleanStringSpec.scala +++ b/internal/util-logging/src/test/scala/sbt/internal/util/CleanStringSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/sbt/internal/util/ProgressStateSpec.scala b/internal/util-logging/src/test/scala/sbt/internal/util/ProgressStateSpec.scala index 909c64968..c777772ce 100644 --- a/internal/util-logging/src/test/scala/sbt/internal/util/ProgressStateSpec.scala +++ b/internal/util-logging/src/test/scala/sbt/internal/util/ProgressStateSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logging/src/test/scala/sbt/internal/util/UTF8DecoderSpec.scala b/internal/util-logging/src/test/scala/sbt/internal/util/UTF8DecoderSpec.scala index 06c2e711b..0e9a1e1ad 100644 --- a/internal/util-logging/src/test/scala/sbt/internal/util/UTF8DecoderSpec.scala +++ b/internal/util-logging/src/test/scala/sbt/internal/util/UTF8DecoderSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 e508022bb..a359524bf 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-logic/src/test/scala/sbt/logic/Test.scala b/internal/util-logic/src/test/scala/sbt/logic/Test.scala index 1a2046381..8d993f730 100644 --- a/internal/util-logic/src/test/scala/sbt/logic/Test.scala +++ b/internal/util-logic/src/test/scala/sbt/logic/Test.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 a4a38e744..0233307c4 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-position/src/main/scala/sbt/internal/util/Positions.scala b/internal/util-position/src/main/scala/sbt/internal/util/Positions.scala index 78deb8e48..a1d6f7123 100644 --- a/internal/util-position/src/main/scala/sbt/internal/util/Positions.scala +++ b/internal/util-position/src/main/scala/sbt/internal/util/Positions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-position/src/test/scala/sbt/internal/util/SourcePositionSpec.scala b/internal/util-position/src/test/scala/sbt/internal/util/SourcePositionSpec.scala index 60206dcc6..f41cef10b 100644 --- a/internal/util-position/src/test/scala/sbt/internal/util/SourcePositionSpec.scala +++ b/internal/util-position/src/test/scala/sbt/internal/util/SourcePositionSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ @@ -12,7 +13,7 @@ import org.scalatest.flatspec.AnyFlatSpec class SourcePositionSpec extends AnyFlatSpec { "SourcePosition()" should "return a sane SourcePosition" in { val filename = "SourcePositionSpec.scala" - val lineNumber = 16 + val lineNumber = 17 SourcePosition.fromEnclosing() match { case LinePosition(path, startLine) => assert(path === filename && startLine === lineNumber) case RangePosition(path, range) => assert(path === filename && inRange(range, lineNumber)) 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 ce644ac13..e57845a26 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-relation/src/test/scala/RelationTest.scala b/internal/util-relation/src/test/scala/RelationTest.scala index 1ee742d73..cdf6dab13 100644 --- a/internal/util-relation/src/test/scala/RelationTest.scala +++ b/internal/util-relation/src/test/scala/RelationTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-scripted/src/main/java/sbt/internal/scripted/ScriptConfig.java b/internal/util-scripted/src/main/java/sbt/internal/scripted/ScriptConfig.java index 39216d3ae..32813b55d 100644 --- a/internal/util-scripted/src/main/java/sbt/internal/scripted/ScriptConfig.java +++ b/internal/util-scripted/src/main/java/sbt/internal/scripted/ScriptConfig.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/CommentHandler.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/CommentHandler.scala index 7b78f82e3..d832536d0 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/CommentHandler.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/CommentHandler.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/FileCommands.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/FileCommands.scala index fcc6707f5..1de3ff607 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/FileCommands.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/FileCommands.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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..f0e6f0807 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/HandlersProvider.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/HandlersProvider.scala index f6bfe1c20..06ccdf023 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/HandlersProvider.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/HandlersProvider.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptRunner.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptRunner.scala index 9bcbe25ee..85b61ad59 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptRunner.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/ScriptRunner.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 9ce5dbca0..e25028b13 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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..aecd501d1 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 @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/internal/util-scripted/src/main/scala/sbt/internal/scripted/TestScriptParser.scala b/internal/util-scripted/src/main/scala/sbt/internal/scripted/TestScriptParser.scala index 9d2548059..51309a78d 100644 --- a/internal/util-scripted/src/main/scala/sbt/internal/scripted/TestScriptParser.scala +++ b/internal/util-scripted/src/main/scala/sbt/internal/scripted/TestScriptParser.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/launch/NOTICE b/launch/NOTICE index 8abf4ed53..620b87014 100644 --- a/launch/NOTICE +++ b/launch/NOTICE @@ -1,5 +1,6 @@ sbt Launcher -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah, David MacIver Licensed under BSD-3-Clause license (see LICENSE) diff --git a/launcher-package/NOTICE b/launcher-package/NOTICE index 6b28ce942..98799ed60 100644 --- a/launcher-package/NOTICE +++ b/launcher-package/NOTICE @@ -1,6 +1,7 @@ sbt https://www.scala-sbt.org/ -Copyright 2011 - 2019, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under Apache v2 license (see LICENSE) diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index f8c8922e3..870c1a02a 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -185,7 +185,7 @@ val root = (project in file(".")). }, // GENERAL LINUX PACKAGING STUFFS - maintainer := "Eugene Yokota ", + maintainer := "Eugene Yokota ", packageSummary := "sbt, the interactive build tool", packageDescription := """This script provides a native way to run sbt, a build tool for Scala and more.""", @@ -240,7 +240,7 @@ val root = (project in file(".")). case (x, p) => p.contains("sbtn-x86_64") || p.contains("sbtn-aarch64") })) }, - rpmVendor := "lightbend", + rpmVendor := "scalacenter", rpmUrl := Some("http://github.com/sbt/sbt-launcher-package"), rpmLicense := Some("Apache-2.0"), // This is intentionally empty. java-devel could bring in JDK 9-ea on Fedora, @@ -262,7 +262,7 @@ val root = (project in file(".")). case Array(major) => Seq(major, "0", "0", bid.toString) mkString "." } }, - maintainer in Windows := "Lightbend, Inc.", + maintainer in Windows := "Scala Center", packageSummary in Windows := "sbt " + (version in Windows).value, packageDescription in Windows := "The interactive build tool.", wixProductId := "ce07be71-510d-414a-92d4-dff47631848a", diff --git a/main-actions/src/main/scala/sbt/Console.scala b/main-actions/src/main/scala/sbt/Console.scala index c46fde5a2..625ce689b 100644 --- a/main-actions/src/main/scala/sbt/Console.scala +++ b/main-actions/src/main/scala/sbt/Console.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/Doc.scala b/main-actions/src/main/scala/sbt/Doc.scala index 798e0b8d4..6d033f2db 100644 --- a/main-actions/src/main/scala/sbt/Doc.scala +++ b/main-actions/src/main/scala/sbt/Doc.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/DotGraph.scala b/main-actions/src/main/scala/sbt/DotGraph.scala index 6d39109a3..71b927812 100644 --- a/main-actions/src/main/scala/sbt/DotGraph.scala +++ b/main-actions/src/main/scala/sbt/DotGraph.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/ForkTests.scala b/main-actions/src/main/scala/sbt/ForkTests.scala index ba707d5a2..599f313c3 100755 --- a/main-actions/src/main/scala/sbt/ForkTests.scala +++ b/main-actions/src/main/scala/sbt/ForkTests.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/Package.scala b/main-actions/src/main/scala/sbt/Package.scala index 2b4946700..a3b944b79 100644 --- a/main-actions/src/main/scala/sbt/Package.scala +++ b/main-actions/src/main/scala/sbt/Package.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/RawCompileLike.scala b/main-actions/src/main/scala/sbt/RawCompileLike.scala index 4a81f027b..fc7b7bf50 100644 --- a/main-actions/src/main/scala/sbt/RawCompileLike.scala +++ b/main-actions/src/main/scala/sbt/RawCompileLike.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/Sync.scala b/main-actions/src/main/scala/sbt/Sync.scala index 9c5421276..c1e180227 100644 --- a/main-actions/src/main/scala/sbt/Sync.scala +++ b/main-actions/src/main/scala/sbt/Sync.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/TestResultLogger.scala b/main-actions/src/main/scala/sbt/TestResultLogger.scala index d7675fb34..b018c203a 100644 --- a/main-actions/src/main/scala/sbt/TestResultLogger.scala +++ b/main-actions/src/main/scala/sbt/TestResultLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/Tests.scala b/main-actions/src/main/scala/sbt/Tests.scala index 90f64b29e..821cb4d3e 100644 --- a/main-actions/src/main/scala/sbt/Tests.scala +++ b/main-actions/src/main/scala/sbt/Tests.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/compiler/Eval.scala b/main-actions/src/main/scala/sbt/compiler/Eval.scala index 6995637f4..5f1bc323d 100644 --- a/main-actions/src/main/scala/sbt/compiler/Eval.scala +++ b/main-actions/src/main/scala/sbt/compiler/Eval.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/main/scala/sbt/compiler/EvalReporter.scala b/main-actions/src/main/scala/sbt/compiler/EvalReporter.scala index 7ae284231..b076002ca 100644 --- a/main-actions/src/main/scala/sbt/compiler/EvalReporter.scala +++ b/main-actions/src/main/scala/sbt/compiler/EvalReporter.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/test/scala/sbt/CacheIvyTest.scala b/main-actions/src/test/scala/sbt/CacheIvyTest.scala index a8f76ec98..b78e3d537 100644 --- a/main-actions/src/test/scala/sbt/CacheIvyTest.scala +++ b/main-actions/src/test/scala/sbt/CacheIvyTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-actions/src/test/scala/sbt/compiler/EvalTest.scala b/main-actions/src/test/scala/sbt/compiler/EvalTest.scala index 4bea445b9..0f040bbda 100644 --- a/main-actions/src/test/scala/sbt/compiler/EvalTest.scala +++ b/main-actions/src/test/scala/sbt/compiler/EvalTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/java/sbt/internal/BootServerSocket.java b/main-command/src/main/java/sbt/internal/BootServerSocket.java index a64c18951..84cd3e69c 100644 --- a/main-command/src/main/java/sbt/internal/BootServerSocket.java +++ b/main-command/src/main/java/sbt/internal/BootServerSocket.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/java/sbt/internal/ServerAlreadyBootingException.java b/main-command/src/main/java/sbt/internal/ServerAlreadyBootingException.java index 90a16fdff..b036bdea4 100644 --- a/main-command/src/main/java/sbt/internal/ServerAlreadyBootingException.java +++ b/main-command/src/main/java/sbt/internal/ServerAlreadyBootingException.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/java/sbt/internal/classpath/WrappedLoader.java b/main-command/src/main/java/sbt/internal/classpath/WrappedLoader.java index 76942d046..89749c705 100644 --- a/main-command/src/main/java/sbt/internal/classpath/WrappedLoader.java +++ b/main-command/src/main/java/sbt/internal/classpath/WrappedLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/BasicCommandStrings.scala b/main-command/src/main/scala/sbt/BasicCommandStrings.scala index 774c19115..985045486 100644 --- a/main-command/src/main/scala/sbt/BasicCommandStrings.scala +++ b/main-command/src/main/scala/sbt/BasicCommandStrings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/BasicCommands.scala b/main-command/src/main/scala/sbt/BasicCommands.scala index 06b7599f1..238c2bfca 100644 --- a/main-command/src/main/scala/sbt/BasicCommands.scala +++ b/main-command/src/main/scala/sbt/BasicCommands.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/BasicKeys.scala b/main-command/src/main/scala/sbt/BasicKeys.scala index 84c7471b2..fd7b75d17 100644 --- a/main-command/src/main/scala/sbt/BasicKeys.scala +++ b/main-command/src/main/scala/sbt/BasicKeys.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/Command.scala b/main-command/src/main/scala/sbt/Command.scala index ec224b551..f4a1ebc6f 100644 --- a/main-command/src/main/scala/sbt/Command.scala +++ b/main-command/src/main/scala/sbt/Command.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/CommandUtil.scala b/main-command/src/main/scala/sbt/CommandUtil.scala index dc2f52476..354b28cb1 100644 --- a/main-command/src/main/scala/sbt/CommandUtil.scala +++ b/main-command/src/main/scala/sbt/CommandUtil.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/ExceptionCategory.scala b/main-command/src/main/scala/sbt/ExceptionCategory.scala index 5fab7dd34..b1d7e10fd 100644 --- a/main-command/src/main/scala/sbt/ExceptionCategory.scala +++ b/main-command/src/main/scala/sbt/ExceptionCategory.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/Highlight.scala b/main-command/src/main/scala/sbt/Highlight.scala index 8dc05f9b1..45c1fbfec 100644 --- a/main-command/src/main/scala/sbt/Highlight.scala +++ b/main-command/src/main/scala/sbt/Highlight.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/MainControl.scala b/main-command/src/main/scala/sbt/MainControl.scala index 69d0d2fdb..9993ffa15 100644 --- a/main-command/src/main/scala/sbt/MainControl.scala +++ b/main-command/src/main/scala/sbt/MainControl.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/State.scala b/main-command/src/main/scala/sbt/State.scala index 00a2d946f..64e7261a7 100644 --- a/main-command/src/main/scala/sbt/State.scala +++ b/main-command/src/main/scala/sbt/State.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/Watched.scala b/main-command/src/main/scala/sbt/Watched.scala index 3bb4b4666..86294e0ce 100644 --- a/main-command/src/main/scala/sbt/Watched.scala +++ b/main-command/src/main/scala/sbt/Watched.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/CommandChannel.scala b/main-command/src/main/scala/sbt/internal/CommandChannel.scala index c40375ec7..db53b9558 100644 --- a/main-command/src/main/scala/sbt/internal/CommandChannel.scala +++ b/main-command/src/main/scala/sbt/internal/CommandChannel.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala b/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala index dac0c9565..83f21eaf8 100644 --- a/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala +++ b/main-command/src/main/scala/sbt/internal/ConsoleChannel.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/LabeledFunctions.scala b/main-command/src/main/scala/sbt/internal/LabeledFunctions.scala index bb196462d..b5a8949b8 100644 --- a/main-command/src/main/scala/sbt/internal/LabeledFunctions.scala +++ b/main-command/src/main/scala/sbt/internal/LabeledFunctions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/LegacyWatched.scala b/main-command/src/main/scala/sbt/internal/LegacyWatched.scala index 78a7a25b7..b1aa8afb8 100644 --- a/main-command/src/main/scala/sbt/internal/LegacyWatched.scala +++ b/main-command/src/main/scala/sbt/internal/LegacyWatched.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 16877ad08..43024924a 100644 --- a/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala +++ b/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/client/BspClient.scala b/main-command/src/main/scala/sbt/internal/client/BspClient.scala index 19b8e106a..c5ed0edb0 100644 --- a/main-command/src/main/scala/sbt/internal/client/BspClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/BspClient.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 8909d6d42..34c544011 100644 --- a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/client/ServerConnection.scala b/main-command/src/main/scala/sbt/internal/client/ServerConnection.scala index 777593caa..51a1a862b 100644 --- a/main-command/src/main/scala/sbt/internal/client/ServerConnection.scala +++ b/main-command/src/main/scala/sbt/internal/client/ServerConnection.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/server/Server.scala b/main-command/src/main/scala/sbt/internal/server/Server.scala index 6baf8bc1a..83aeb6b31 100644 --- a/main-command/src/main/scala/sbt/internal/server/Server.scala +++ b/main-command/src/main/scala/sbt/internal/server/Server.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala b/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala index 4cfbd9e3f..7f78de2d4 100644 --- a/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala +++ b/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/ui/UITask.scala b/main-command/src/main/scala/sbt/internal/ui/UITask.scala index 1ed500047..e3540c570 100644 --- a/main-command/src/main/scala/sbt/internal/ui/UITask.scala +++ b/main-command/src/main/scala/sbt/internal/ui/UITask.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/ui/UserThread.scala b/main-command/src/main/scala/sbt/internal/ui/UserThread.scala index 94f239bc0..4debe3d7d 100644 --- a/main-command/src/main/scala/sbt/internal/ui/UserThread.scala +++ b/main-command/src/main/scala/sbt/internal/ui/UserThread.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/util/JoinThread.scala b/main-command/src/main/scala/sbt/internal/util/JoinThread.scala index c955e9993..0acf23e0e 100644 --- a/main-command/src/main/scala/sbt/internal/util/JoinThread.scala +++ b/main-command/src/main/scala/sbt/internal/util/JoinThread.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala b/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala index 693f2df5f..11b7e07cf 100644 --- a/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala +++ b/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/main/scala/xsbt/IPC.scala b/main-command/src/main/scala/xsbt/IPC.scala index 9c353613d..e679cfe3b 100644 --- a/main-command/src/main/scala/xsbt/IPC.scala +++ b/main-command/src/main/scala/xsbt/IPC.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/test/scala/sbt/MultiParserSpec.scala b/main-command/src/test/scala/sbt/MultiParserSpec.scala index 2e8b54584..3757a7b9b 100644 --- a/main-command/src/test/scala/sbt/MultiParserSpec.scala +++ b/main-command/src/test/scala/sbt/MultiParserSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-command/src/test/scala/sbt/internal/ClassLoaderCacheTest.scala b/main-command/src/test/scala/sbt/internal/ClassLoaderCacheTest.scala index 089bbd034..5a02df2f4 100644 --- a/main-command/src/test/scala/sbt/internal/ClassLoaderCacheTest.scala +++ b/main-command/src/test/scala/sbt/internal/ClassLoaderCacheTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/Append.scala b/main-settings/src/main/scala/sbt/Append.scala index 68aa27d9b..6dac5ee35 100644 --- a/main-settings/src/main/scala/sbt/Append.scala +++ b/main-settings/src/main/scala/sbt/Append.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/ConfigKey.scala b/main-settings/src/main/scala/sbt/ConfigKey.scala index 09f847bc4..44e14bdb1 100644 --- a/main-settings/src/main/scala/sbt/ConfigKey.scala +++ b/main-settings/src/main/scala/sbt/ConfigKey.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/Def.scala b/main-settings/src/main/scala/sbt/Def.scala index 13ccec44e..eee29e66b 100644 --- a/main-settings/src/main/scala/sbt/Def.scala +++ b/main-settings/src/main/scala/sbt/Def.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/DelegateIndex.scala b/main-settings/src/main/scala/sbt/DelegateIndex.scala index e187ce931..7a6c6686c 100644 --- a/main-settings/src/main/scala/sbt/DelegateIndex.scala +++ b/main-settings/src/main/scala/sbt/DelegateIndex.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/InputTask.scala b/main-settings/src/main/scala/sbt/InputTask.scala index faea5bd00..1509ec44b 100644 --- a/main-settings/src/main/scala/sbt/InputTask.scala +++ b/main-settings/src/main/scala/sbt/InputTask.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/KeyRanks.scala b/main-settings/src/main/scala/sbt/KeyRanks.scala index 252dd10cd..f4eb4b22f 100644 --- a/main-settings/src/main/scala/sbt/KeyRanks.scala +++ b/main-settings/src/main/scala/sbt/KeyRanks.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/Previous.scala b/main-settings/src/main/scala/sbt/Previous.scala index acd6ba18f..75e41a192 100644 --- a/main-settings/src/main/scala/sbt/Previous.scala +++ b/main-settings/src/main/scala/sbt/Previous.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/PromiseWrap.scala b/main-settings/src/main/scala/sbt/PromiseWrap.scala index ec9a50817..356cb7cef 100644 --- a/main-settings/src/main/scala/sbt/PromiseWrap.scala +++ b/main-settings/src/main/scala/sbt/PromiseWrap.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/Reference.scala b/main-settings/src/main/scala/sbt/Reference.scala index 74267ba89..ab9f4670d 100644 --- a/main-settings/src/main/scala/sbt/Reference.scala +++ b/main-settings/src/main/scala/sbt/Reference.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/Remove.scala b/main-settings/src/main/scala/sbt/Remove.scala index e09555f5b..689b533b5 100644 --- a/main-settings/src/main/scala/sbt/Remove.scala +++ b/main-settings/src/main/scala/sbt/Remove.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/Scope.scala b/main-settings/src/main/scala/sbt/Scope.scala index 4fa31f51c..3bf51a7a2 100644 --- a/main-settings/src/main/scala/sbt/Scope.scala +++ b/main-settings/src/main/scala/sbt/Scope.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/ScopeAxis.scala b/main-settings/src/main/scala/sbt/ScopeAxis.scala index 6b494a73b..6de7fb520 100644 --- a/main-settings/src/main/scala/sbt/ScopeAxis.scala +++ b/main-settings/src/main/scala/sbt/ScopeAxis.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/ScopeMask.scala b/main-settings/src/main/scala/sbt/ScopeMask.scala index 056fdc385..5133c5f87 100644 --- a/main-settings/src/main/scala/sbt/ScopeMask.scala +++ b/main-settings/src/main/scala/sbt/ScopeMask.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/SlashSyntax.scala b/main-settings/src/main/scala/sbt/SlashSyntax.scala index ae774b30a..8b7a2a6d3 100644 --- a/main-settings/src/main/scala/sbt/SlashSyntax.scala +++ b/main-settings/src/main/scala/sbt/SlashSyntax.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/Structure.scala b/main-settings/src/main/scala/sbt/Structure.scala index 6ac79293a..56758ea18 100644 --- a/main-settings/src/main/scala/sbt/Structure.scala +++ b/main-settings/src/main/scala/sbt/Structure.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/dsl/LinterLevel.scala b/main-settings/src/main/scala/sbt/dsl/LinterLevel.scala index 7fe257c82..a4a6c9066 100644 --- a/main-settings/src/main/scala/sbt/dsl/LinterLevel.scala +++ b/main-settings/src/main/scala/sbt/dsl/LinterLevel.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/std/InputConvert.scala b/main-settings/src/main/scala/sbt/std/InputConvert.scala index c133a2eaa..6b835c98f 100644 --- a/main-settings/src/main/scala/sbt/std/InputConvert.scala +++ b/main-settings/src/main/scala/sbt/std/InputConvert.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/std/InputWrapper.scala b/main-settings/src/main/scala/sbt/std/InputWrapper.scala index f0fc8fb62..2f9a05faa 100644 --- a/main-settings/src/main/scala/sbt/std/InputWrapper.scala +++ b/main-settings/src/main/scala/sbt/std/InputWrapper.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/std/KeyMacro.scala b/main-settings/src/main/scala/sbt/std/KeyMacro.scala index f7eaaf033..ccbc0e6a7 100644 --- a/main-settings/src/main/scala/sbt/std/KeyMacro.scala +++ b/main-settings/src/main/scala/sbt/std/KeyMacro.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/std/SettingMacro.scala b/main-settings/src/main/scala/sbt/std/SettingMacro.scala index 43128193b..551998601 100644 --- a/main-settings/src/main/scala/sbt/std/SettingMacro.scala +++ b/main-settings/src/main/scala/sbt/std/SettingMacro.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala b/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala index 6a9b78aa7..1b49d56a3 100644 --- a/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala +++ b/main-settings/src/main/scala/sbt/std/TaskLinterDSL.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/std/TaskMacro.scala b/main-settings/src/main/scala/sbt/std/TaskMacro.scala index 9d0dd530d..8d4fab28a 100644 --- a/main-settings/src/main/scala/sbt/std/TaskMacro.scala +++ b/main-settings/src/main/scala/sbt/std/TaskMacro.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/main/scala/sbt/unchecked.scala b/main-settings/src/main/scala/sbt/unchecked.scala index 55261fa97..b9767d92e 100644 --- a/main-settings/src/main/scala/sbt/unchecked.scala +++ b/main-settings/src/main/scala/sbt/unchecked.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/AppendSpec.scala b/main-settings/src/test/scala/sbt/AppendSpec.scala index a9c0e035e..e3429f4c3 100644 --- a/main-settings/src/test/scala/sbt/AppendSpec.scala +++ b/main-settings/src/test/scala/sbt/AppendSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala b/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala index 9ce456b64..64a7ede43 100644 --- a/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala +++ b/main-settings/src/test/scala/sbt/BuildSettingsInstances.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala b/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala index e38fecdff..7678378f6 100644 --- a/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala +++ b/main-settings/src/test/scala/sbt/ScopeDisplaySpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/ScopedSpec.scala b/main-settings/src/test/scala/sbt/ScopedSpec.scala index 8e5702188..5a0f462e1 100644 --- a/main-settings/src/test/scala/sbt/ScopedSpec.scala +++ b/main-settings/src/test/scala/sbt/ScopedSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala b/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala index 159276235..b8da1d28c 100644 --- a/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala +++ b/main-settings/src/test/scala/sbt/SlashSyntaxSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala b/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala index 8076fab2f..5aeec369d 100644 --- a/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala +++ b/main-settings/src/test/scala/sbt/SlashSyntaxTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala b/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala index 7b4028bcb..cdf7e92ba 100644 --- a/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala +++ b/main-settings/src/test/scala/sbt/TupleSyntaxTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala b/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala index 210284215..259b21256 100644 --- a/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala +++ b/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala b/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala index 671d8c24f..6929b3105 100644 --- a/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala +++ b/main-settings/src/test/scala/sbt/std/TaskPosSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/std/TestUtil.scala b/main-settings/src/test/scala/sbt/std/TestUtil.scala index e020624ab..f1048adda 100644 --- a/main-settings/src/test/scala/sbt/std/TestUtil.scala +++ b/main-settings/src/test/scala/sbt/std/TestUtil.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main-settings/src/test/scala/sbt/std/UsageTest.scala b/main-settings/src/test/scala/sbt/std/UsageTest.scala index ec1f2149e..a090ee4ed 100644 --- a/main-settings/src/test/scala/sbt/std/UsageTest.scala +++ b/main-settings/src/test/scala/sbt/std/UsageTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 e2d214657..b1f3906f9 100644 --- a/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala +++ b/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/NOTICE b/main/NOTICE index 0fab58e02..09043e901 100644 --- a/main/NOTICE +++ b/main/NOTICE @@ -1,4 +1,5 @@ sbt: Main integration component -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under BSD-3-Clause license (see LICENSE) diff --git a/main/src/main/java/sbt/internal/BottomClassLoader.java b/main/src/main/java/sbt/internal/BottomClassLoader.java index 58997c4db..8bd485473 100644 --- a/main/src/main/java/sbt/internal/BottomClassLoader.java +++ b/main/src/main/java/sbt/internal/BottomClassLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/ClassLoaderClose.java b/main/src/main/java/sbt/internal/ClassLoaderClose.java index 70c7cf16c..67bf6e099 100644 --- a/main/src/main/java/sbt/internal/ClassLoaderClose.java +++ b/main/src/main/java/sbt/internal/ClassLoaderClose.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/ClassLoadingLock.java b/main/src/main/java/sbt/internal/ClassLoadingLock.java index 1c5307430..a4cf46f12 100644 --- a/main/src/main/java/sbt/internal/ClassLoadingLock.java +++ b/main/src/main/java/sbt/internal/ClassLoadingLock.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/FlatLoader.java b/main/src/main/java/sbt/internal/FlatLoader.java index 203635412..49c6debcf 100644 --- a/main/src/main/java/sbt/internal/FlatLoader.java +++ b/main/src/main/java/sbt/internal/FlatLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/FullScalaLoader.java b/main/src/main/java/sbt/internal/FullScalaLoader.java index fd8d88236..fd9818fe3 100644 --- a/main/src/main/java/sbt/internal/FullScalaLoader.java +++ b/main/src/main/java/sbt/internal/FullScalaLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/JLineLoader.java b/main/src/main/java/sbt/internal/JLineLoader.java index 098b21bc9..0a90b0d39 100644 --- a/main/src/main/java/sbt/internal/JLineLoader.java +++ b/main/src/main/java/sbt/internal/JLineLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/LayeredClassLoader.java b/main/src/main/java/sbt/internal/LayeredClassLoader.java index 457881816..e831b720e 100644 --- a/main/src/main/java/sbt/internal/LayeredClassLoader.java +++ b/main/src/main/java/sbt/internal/LayeredClassLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/ManagedClassLoader.java b/main/src/main/java/sbt/internal/ManagedClassLoader.java index 048572fc0..76e7f570c 100644 --- a/main/src/main/java/sbt/internal/ManagedClassLoader.java +++ b/main/src/main/java/sbt/internal/ManagedClassLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/MetaBuildLoader.java b/main/src/main/java/sbt/internal/MetaBuildLoader.java index 05cef0f02..c1980117f 100644 --- a/main/src/main/java/sbt/internal/MetaBuildLoader.java +++ b/main/src/main/java/sbt/internal/MetaBuildLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/ReverseLookupClassLoader.java b/main/src/main/java/sbt/internal/ReverseLookupClassLoader.java index c2c0d5088..29c3c0bb7 100644 --- a/main/src/main/java/sbt/internal/ReverseLookupClassLoader.java +++ b/main/src/main/java/sbt/internal/ReverseLookupClassLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/SbtInterfaceLoader.java b/main/src/main/java/sbt/internal/SbtInterfaceLoader.java index 7d8d75450..47e396205 100644 --- a/main/src/main/java/sbt/internal/SbtInterfaceLoader.java +++ b/main/src/main/java/sbt/internal/SbtInterfaceLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/ScalaLibraryClassLoader.java b/main/src/main/java/sbt/internal/ScalaLibraryClassLoader.java index 6fe4403a6..80c0ea759 100644 --- a/main/src/main/java/sbt/internal/ScalaLibraryClassLoader.java +++ b/main/src/main/java/sbt/internal/ScalaLibraryClassLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/ScalaReflectClassLoader.java b/main/src/main/java/sbt/internal/ScalaReflectClassLoader.java index b8a3fff17..f0fe19cbd 100644 --- a/main/src/main/java/sbt/internal/ScalaReflectClassLoader.java +++ b/main/src/main/java/sbt/internal/ScalaReflectClassLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/XMainClassLoader.java b/main/src/main/java/sbt/internal/XMainClassLoader.java index 2668a5db7..d6cab932b 100644 --- a/main/src/main/java/sbt/internal/XMainClassLoader.java +++ b/main/src/main/java/sbt/internal/XMainClassLoader.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/java/sbt/internal/XMainConfiguration.java b/main/src/main/java/sbt/internal/XMainConfiguration.java index d6cf69af2..50e84c08c 100644 --- a/main/src/main/java/sbt/internal/XMainConfiguration.java +++ b/main/src/main/java/sbt/internal/XMainConfiguration.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/BackgroundJobService.scala b/main/src/main/scala/sbt/BackgroundJobService.scala index 1cbff3f2d..65ebe7a08 100644 --- a/main/src/main/scala/sbt/BackgroundJobService.scala +++ b/main/src/main/scala/sbt/BackgroundJobService.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/BuildPaths.scala b/main/src/main/scala/sbt/BuildPaths.scala index 87bfb7173..e6a97985b 100644 --- a/main/src/main/scala/sbt/BuildPaths.scala +++ b/main/src/main/scala/sbt/BuildPaths.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/BuildSyntax.scala b/main/src/main/scala/sbt/BuildSyntax.scala index b2038c4a3..ab71bf772 100644 --- a/main/src/main/scala/sbt/BuildSyntax.scala +++ b/main/src/main/scala/sbt/BuildSyntax.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/ClassLoaderLayeringStrategy.scala b/main/src/main/scala/sbt/ClassLoaderLayeringStrategy.scala index cfb360fc4..c1e1f7584 100644 --- a/main/src/main/scala/sbt/ClassLoaderLayeringStrategy.scala +++ b/main/src/main/scala/sbt/ClassLoaderLayeringStrategy.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/CommandLineUIService.scala b/main/src/main/scala/sbt/CommandLineUIService.scala index 39c3db302..790146980 100644 --- a/main/src/main/scala/sbt/CommandLineUIService.scala +++ b/main/src/main/scala/sbt/CommandLineUIService.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index b6f8447d4..64ff77293 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 4c3801d30..6d0da9315 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/EvaluateTask.scala b/main/src/main/scala/sbt/EvaluateTask.scala index 8d45104cb..29749cfde 100644 --- a/main/src/main/scala/sbt/EvaluateTask.scala +++ b/main/src/main/scala/sbt/EvaluateTask.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Extracted.scala b/main/src/main/scala/sbt/Extracted.scala index cec5beb4c..2b4992dac 100644 --- a/main/src/main/scala/sbt/Extracted.scala +++ b/main/src/main/scala/sbt/Extracted.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/InteractionService.scala b/main/src/main/scala/sbt/InteractionService.scala index 6a37d4ff2..24fa62104 100644 --- a/main/src/main/scala/sbt/InteractionService.scala +++ b/main/src/main/scala/sbt/InteractionService.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index c64bbbcac..cc52bf816 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index da69f098c..49d9700f4 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index 351be3700..3c7a800a6 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/OptionSyntax.scala b/main/src/main/scala/sbt/OptionSyntax.scala index 5716eba36..eac941392 100644 --- a/main/src/main/scala/sbt/OptionSyntax.scala +++ b/main/src/main/scala/sbt/OptionSyntax.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Opts.scala b/main/src/main/scala/sbt/Opts.scala index 25afca7fd..ca271448d 100644 --- a/main/src/main/scala/sbt/Opts.scala +++ b/main/src/main/scala/sbt/Opts.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/PluginCross.scala b/main/src/main/scala/sbt/PluginCross.scala index 49b953541..a12fc4b60 100644 --- a/main/src/main/scala/sbt/PluginCross.scala +++ b/main/src/main/scala/sbt/PluginCross.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Plugins.scala b/main/src/main/scala/sbt/Plugins.scala index 502d72111..92a9947cd 100644 --- a/main/src/main/scala/sbt/Plugins.scala +++ b/main/src/main/scala/sbt/Plugins.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Project.scala b/main/src/main/scala/sbt/Project.scala index 5fd822f01..d5a058d81 100755 --- a/main/src/main/scala/sbt/Project.scala +++ b/main/src/main/scala/sbt/Project.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Resolvers.scala b/main/src/main/scala/sbt/Resolvers.scala index d28d8a026..71a0674d9 100644 --- a/main/src/main/scala/sbt/Resolvers.scala +++ b/main/src/main/scala/sbt/Resolvers.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/RichURI.scala b/main/src/main/scala/sbt/RichURI.scala index bf8954f9d..d3260744c 100644 --- a/main/src/main/scala/sbt/RichURI.scala +++ b/main/src/main/scala/sbt/RichURI.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/ScopeFilter.scala b/main/src/main/scala/sbt/ScopeFilter.scala index f279afb9a..fe0cbff51 100644 --- a/main/src/main/scala/sbt/ScopeFilter.scala +++ b/main/src/main/scala/sbt/ScopeFilter.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/ScopedKeyData.scala b/main/src/main/scala/sbt/ScopedKeyData.scala index f09a935a4..410afef4e 100644 --- a/main/src/main/scala/sbt/ScopedKeyData.scala +++ b/main/src/main/scala/sbt/ScopedKeyData.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/ScriptedPlugin.scala b/main/src/main/scala/sbt/ScriptedPlugin.scala index 35deb1104..00bc687bf 100644 --- a/main/src/main/scala/sbt/ScriptedPlugin.scala +++ b/main/src/main/scala/sbt/ScriptedPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/ScriptedRun.scala b/main/src/main/scala/sbt/ScriptedRun.scala index ea7d7054c..dc05f6836 100644 --- a/main/src/main/scala/sbt/ScriptedRun.scala +++ b/main/src/main/scala/sbt/ScriptedRun.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/SessionVar.scala b/main/src/main/scala/sbt/SessionVar.scala index a9a04607a..353e9d65f 100644 --- a/main/src/main/scala/sbt/SessionVar.scala +++ b/main/src/main/scala/sbt/SessionVar.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/StateTransform.scala b/main/src/main/scala/sbt/StateTransform.scala index 66d5d9165..5b291b6a7 100644 --- a/main/src/main/scala/sbt/StateTransform.scala +++ b/main/src/main/scala/sbt/StateTransform.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Tags.scala b/main/src/main/scala/sbt/Tags.scala index ec37b8807..0691d3410 100644 --- a/main/src/main/scala/sbt/Tags.scala +++ b/main/src/main/scala/sbt/Tags.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 5a09fd190..755550460 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/Terminal.scala b/main/src/main/scala/sbt/Terminal.scala index 8d84cd167..03496ec13 100644 --- a/main/src/main/scala/sbt/Terminal.scala +++ b/main/src/main/scala/sbt/Terminal.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/UpperStateOps.scala b/main/src/main/scala/sbt/UpperStateOps.scala index 02c9ef0c3..d0da94305 100644 --- a/main/src/main/scala/sbt/UpperStateOps.scala +++ b/main/src/main/scala/sbt/UpperStateOps.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/VersionScheme.scala b/main/src/main/scala/sbt/VersionScheme.scala index 4427f7798..58e84adba 100644 --- a/main/src/main/scala/sbt/VersionScheme.scala +++ b/main/src/main/scala/sbt/VersionScheme.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala index 84f6776fb..c249f4e05 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala index 70b7f2ffc..946d164ae 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierInputsTasks.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala index e05916408..daea7a2b6 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index ebdf02d78..865fbf899 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/APIMappings.scala b/main/src/main/scala/sbt/internal/APIMappings.scala index e07dda236..18291c643 100644 --- a/main/src/main/scala/sbt/internal/APIMappings.scala +++ b/main/src/main/scala/sbt/internal/APIMappings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/AbstractTaskProgress.scala b/main/src/main/scala/sbt/internal/AbstractTaskProgress.scala index dfac9b2e5..18e6ffe2d 100644 --- a/main/src/main/scala/sbt/internal/AbstractTaskProgress.scala +++ b/main/src/main/scala/sbt/internal/AbstractTaskProgress.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Act.scala b/main/src/main/scala/sbt/internal/Act.scala index 50bdde82d..e74160ccc 100644 --- a/main/src/main/scala/sbt/internal/Act.scala +++ b/main/src/main/scala/sbt/internal/Act.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/AddSettings.scala b/main/src/main/scala/sbt/internal/AddSettings.scala index 14acc5c05..d8dac2a6f 100644 --- a/main/src/main/scala/sbt/internal/AddSettings.scala +++ b/main/src/main/scala/sbt/internal/AddSettings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Aggregation.scala b/main/src/main/scala/sbt/internal/Aggregation.scala index b17413652..8a26dcd77 100644 --- a/main/src/main/scala/sbt/internal/Aggregation.scala +++ b/main/src/main/scala/sbt/internal/Aggregation.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Banner.scala b/main/src/main/scala/sbt/internal/Banner.scala index 7ce38b461..559f01ef1 100644 --- a/main/src/main/scala/sbt/internal/Banner.scala +++ b/main/src/main/scala/sbt/internal/Banner.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/BuildDef.scala b/main/src/main/scala/sbt/internal/BuildDef.scala index 4c17f2f05..8d85a3c08 100644 --- a/main/src/main/scala/sbt/internal/BuildDef.scala +++ b/main/src/main/scala/sbt/internal/BuildDef.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/BuildDependencies.scala b/main/src/main/scala/sbt/internal/BuildDependencies.scala index 601584de7..3f24cda84 100644 --- a/main/src/main/scala/sbt/internal/BuildDependencies.scala +++ b/main/src/main/scala/sbt/internal/BuildDependencies.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/BuildLoader.scala b/main/src/main/scala/sbt/internal/BuildLoader.scala index 76c67addc..eec587030 100644 --- a/main/src/main/scala/sbt/internal/BuildLoader.scala +++ b/main/src/main/scala/sbt/internal/BuildLoader.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/BuildStructure.scala b/main/src/main/scala/sbt/internal/BuildStructure.scala index 8bd0bcccf..565dc55df 100644 --- a/main/src/main/scala/sbt/internal/BuildStructure.scala +++ b/main/src/main/scala/sbt/internal/BuildStructure.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/BuildUtil.scala b/main/src/main/scala/sbt/internal/BuildUtil.scala index 78611a963..a131e48e9 100644 --- a/main/src/main/scala/sbt/internal/BuildUtil.scala +++ b/main/src/main/scala/sbt/internal/BuildUtil.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/ClassLoaderWarmup.scala b/main/src/main/scala/sbt/internal/ClassLoaderWarmup.scala index 00159964e..2ce2a2e3a 100644 --- a/main/src/main/scala/sbt/internal/ClassLoaderWarmup.scala +++ b/main/src/main/scala/sbt/internal/ClassLoaderWarmup.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/ClassLoaders.scala b/main/src/main/scala/sbt/internal/ClassLoaders.scala index 1c5df8aa0..e54ebfa0b 100644 --- a/main/src/main/scala/sbt/internal/ClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/ClassLoaders.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/ClasspathImpl.scala b/main/src/main/scala/sbt/internal/ClasspathImpl.scala index 43f35dbd8..d7531ce53 100644 --- a/main/src/main/scala/sbt/internal/ClasspathImpl.scala +++ b/main/src/main/scala/sbt/internal/ClasspathImpl.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Clean.scala b/main/src/main/scala/sbt/internal/Clean.scala index c55a0f90a..30776d3e8 100644 --- a/main/src/main/scala/sbt/internal/Clean.scala +++ b/main/src/main/scala/sbt/internal/Clean.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/CommandExchange.scala b/main/src/main/scala/sbt/internal/CommandExchange.scala index 992fb8548..870bbe6c2 100644 --- a/main/src/main/scala/sbt/internal/CommandExchange.scala +++ b/main/src/main/scala/sbt/internal/CommandExchange.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/CommandStrings.scala b/main/src/main/scala/sbt/internal/CommandStrings.scala index 78ed93104..86f7ba420 100644 --- a/main/src/main/scala/sbt/internal/CommandStrings.scala +++ b/main/src/main/scala/sbt/internal/CommandStrings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/CompatParColls.scala b/main/src/main/scala/sbt/internal/CompatParColls.scala index 00410e7d5..b79efc6d8 100644 --- a/main/src/main/scala/sbt/internal/CompatParColls.scala +++ b/main/src/main/scala/sbt/internal/CompatParColls.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/ConsoleProject.scala b/main/src/main/scala/sbt/internal/ConsoleProject.scala index b2776b754..3c4e315e3 100644 --- a/main/src/main/scala/sbt/internal/ConsoleProject.scala +++ b/main/src/main/scala/sbt/internal/ConsoleProject.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Continuous.scala b/main/src/main/scala/sbt/internal/Continuous.scala index 68c2d4a87..4366cd053 100644 --- a/main/src/main/scala/sbt/internal/Continuous.scala +++ b/main/src/main/scala/sbt/internal/Continuous.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/CrossJava.scala b/main/src/main/scala/sbt/internal/CrossJava.scala index a16aca956..38765232c 100644 --- a/main/src/main/scala/sbt/internal/CrossJava.scala +++ b/main/src/main/scala/sbt/internal/CrossJava.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala b/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala index 79d431ebd..37d302229 100644 --- a/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala +++ b/main/src/main/scala/sbt/internal/DefaultBackgroundJobService.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/DefaultRunProfiler.scala b/main/src/main/scala/sbt/internal/DefaultRunProfiler.scala index 8878729af..cc3f54c64 100644 --- a/main/src/main/scala/sbt/internal/DefaultRunProfiler.scala +++ b/main/src/main/scala/sbt/internal/DefaultRunProfiler.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala b/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala index 7d344aab9..e902cc989 100644 --- a/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala +++ b/main/src/main/scala/sbt/internal/DeprecatedContinuous.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/DslEntry.scala b/main/src/main/scala/sbt/internal/DslEntry.scala index 9da26a9b2..f451a055f 100644 --- a/main/src/main/scala/sbt/internal/DslEntry.scala +++ b/main/src/main/scala/sbt/internal/DslEntry.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/DynamicInput.scala b/main/src/main/scala/sbt/internal/DynamicInput.scala index 36260e6c0..e2e4619cb 100644 --- a/main/src/main/scala/sbt/internal/DynamicInput.scala +++ b/main/src/main/scala/sbt/internal/DynamicInput.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/EvaluateConfigurations.scala b/main/src/main/scala/sbt/internal/EvaluateConfigurations.scala index 9986629e5..40a9e1076 100644 --- a/main/src/main/scala/sbt/internal/EvaluateConfigurations.scala +++ b/main/src/main/scala/sbt/internal/EvaluateConfigurations.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/FastTrackCommands.scala b/main/src/main/scala/sbt/internal/FastTrackCommands.scala index 13774fe7c..673198a5b 100644 --- a/main/src/main/scala/sbt/internal/FastTrackCommands.scala +++ b/main/src/main/scala/sbt/internal/FastTrackCommands.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/FileChangesMacro.scala b/main/src/main/scala/sbt/internal/FileChangesMacro.scala index 0b60b53cc..02f7a07b0 100644 --- a/main/src/main/scala/sbt/internal/FileChangesMacro.scala +++ b/main/src/main/scala/sbt/internal/FileChangesMacro.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/GCMonitor.scala b/main/src/main/scala/sbt/internal/GCMonitor.scala index aacd8fac3..b5a776c7e 100644 --- a/main/src/main/scala/sbt/internal/GCMonitor.scala +++ b/main/src/main/scala/sbt/internal/GCMonitor.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/GCUtil.scala b/main/src/main/scala/sbt/internal/GCUtil.scala index 821ea7022..51d08d41c 100644 --- a/main/src/main/scala/sbt/internal/GCUtil.scala +++ b/main/src/main/scala/sbt/internal/GCUtil.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/GlobalPlugin.scala b/main/src/main/scala/sbt/internal/GlobalPlugin.scala index 285f15910..e8707e58e 100644 --- a/main/src/main/scala/sbt/internal/GlobalPlugin.scala +++ b/main/src/main/scala/sbt/internal/GlobalPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala b/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala index af67e69bd..8cb59860d 100644 --- a/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala +++ b/main/src/main/scala/sbt/internal/GroupedAutoPlugins.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/InMemoryCacheStore.scala b/main/src/main/scala/sbt/internal/InMemoryCacheStore.scala index 58eeeb5ef..714c3544f 100644 --- a/main/src/main/scala/sbt/internal/InMemoryCacheStore.scala +++ b/main/src/main/scala/sbt/internal/InMemoryCacheStore.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Inspect.scala b/main/src/main/scala/sbt/internal/Inspect.scala index ecc84b5b3..4697f6767 100644 --- a/main/src/main/scala/sbt/internal/Inspect.scala +++ b/main/src/main/scala/sbt/internal/Inspect.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/InstallSbtn.scala b/main/src/main/scala/sbt/internal/InstallSbtn.scala index e5edd4b6f..151fa2a28 100644 --- a/main/src/main/scala/sbt/internal/InstallSbtn.scala +++ b/main/src/main/scala/sbt/internal/InstallSbtn.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/InternalDependencies.scala b/main/src/main/scala/sbt/internal/InternalDependencies.scala index 6808f5e6a..4c866b17b 100644 --- a/main/src/main/scala/sbt/internal/InternalDependencies.scala +++ b/main/src/main/scala/sbt/internal/InternalDependencies.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/IvyConsole.scala b/main/src/main/scala/sbt/internal/IvyConsole.scala index ec61b1dda..d91cc9e3d 100644 --- a/main/src/main/scala/sbt/internal/IvyConsole.scala +++ b/main/src/main/scala/sbt/internal/IvyConsole.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/JarClassPath.scala b/main/src/main/scala/sbt/internal/JarClassPath.scala index 93ed22690..9d93e6736 100644 --- a/main/src/main/scala/sbt/internal/JarClassPath.scala +++ b/main/src/main/scala/sbt/internal/JarClassPath.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/KeyIndex.scala b/main/src/main/scala/sbt/internal/KeyIndex.scala index dd803de33..5919ac826 100644 --- a/main/src/main/scala/sbt/internal/KeyIndex.scala +++ b/main/src/main/scala/sbt/internal/KeyIndex.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala b/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala index 579b08415..2d627606e 100644 --- a/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/LayeredClassLoaders.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/LibraryManagement.scala b/main/src/main/scala/sbt/internal/LibraryManagement.scala index e6aafbbba..220115e6a 100644 --- a/main/src/main/scala/sbt/internal/LibraryManagement.scala +++ b/main/src/main/scala/sbt/internal/LibraryManagement.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/LintUnused.scala b/main/src/main/scala/sbt/internal/LintUnused.scala index 17bb15924..c2d2db006 100644 --- a/main/src/main/scala/sbt/internal/LintUnused.scala +++ b/main/src/main/scala/sbt/internal/LintUnused.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 834257634..6b566d2c4 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/LoadedSbtFile.scala b/main/src/main/scala/sbt/internal/LoadedSbtFile.scala index d39a8e69a..8035d5ebd 100644 --- a/main/src/main/scala/sbt/internal/LoadedSbtFile.scala +++ b/main/src/main/scala/sbt/internal/LoadedSbtFile.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/LogManager.scala b/main/src/main/scala/sbt/internal/LogManager.scala index 9feb065d1..834254805 100644 --- a/main/src/main/scala/sbt/internal/LogManager.scala +++ b/main/src/main/scala/sbt/internal/LogManager.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Output.scala b/main/src/main/scala/sbt/internal/Output.scala index 81090e7a4..b254f9bcd 100644 --- a/main/src/main/scala/sbt/internal/Output.scala +++ b/main/src/main/scala/sbt/internal/Output.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/PluginDiscovery.scala b/main/src/main/scala/sbt/internal/PluginDiscovery.scala index 0f3998fc5..75b2712a2 100644 --- a/main/src/main/scala/sbt/internal/PluginDiscovery.scala +++ b/main/src/main/scala/sbt/internal/PluginDiscovery.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/PluginManagement.scala b/main/src/main/scala/sbt/internal/PluginManagement.scala index b000a1061..e9d02173f 100644 --- a/main/src/main/scala/sbt/internal/PluginManagement.scala +++ b/main/src/main/scala/sbt/internal/PluginManagement.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/PluginsDebug.scala b/main/src/main/scala/sbt/internal/PluginsDebug.scala index d73cfcdc7..e039a7d01 100644 --- a/main/src/main/scala/sbt/internal/PluginsDebug.scala +++ b/main/src/main/scala/sbt/internal/PluginsDebug.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/PrettyPrint.scala b/main/src/main/scala/sbt/internal/PrettyPrint.scala index 04683313b..b0e1955e7 100644 --- a/main/src/main/scala/sbt/internal/PrettyPrint.scala +++ b/main/src/main/scala/sbt/internal/PrettyPrint.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/ProjectNavigation.scala b/main/src/main/scala/sbt/internal/ProjectNavigation.scala index b8cd6168c..e3a560c6c 100644 --- a/main/src/main/scala/sbt/internal/ProjectNavigation.scala +++ b/main/src/main/scala/sbt/internal/ProjectNavigation.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/RelayAppender.scala b/main/src/main/scala/sbt/internal/RelayAppender.scala index 2e61daa7c..3ac53b6f9 100644 --- a/main/src/main/scala/sbt/internal/RelayAppender.scala +++ b/main/src/main/scala/sbt/internal/RelayAppender.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/RemoteCache.scala b/main/src/main/scala/sbt/internal/RemoteCache.scala index c3838243b..ec2cde5a3 100644 --- a/main/src/main/scala/sbt/internal/RemoteCache.scala +++ b/main/src/main/scala/sbt/internal/RemoteCache.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Resolve.scala b/main/src/main/scala/sbt/internal/Resolve.scala index 8e92e1b78..d2f71b34f 100644 --- a/main/src/main/scala/sbt/internal/Resolve.scala +++ b/main/src/main/scala/sbt/internal/Resolve.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/RetrieveUnit.scala b/main/src/main/scala/sbt/internal/RetrieveUnit.scala index bf8eb1939..93126743e 100644 --- a/main/src/main/scala/sbt/internal/RetrieveUnit.scala +++ b/main/src/main/scala/sbt/internal/RetrieveUnit.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/Script.scala b/main/src/main/scala/sbt/internal/Script.scala index 203ee2000..a20580bca 100644 --- a/main/src/main/scala/sbt/internal/Script.scala +++ b/main/src/main/scala/sbt/internal/Script.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/SessionSettings.scala b/main/src/main/scala/sbt/internal/SessionSettings.scala index dce3424d6..9b5d4e1f5 100755 --- a/main/src/main/scala/sbt/internal/SessionSettings.scala +++ b/main/src/main/scala/sbt/internal/SessionSettings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/SettingCompletions.scala b/main/src/main/scala/sbt/internal/SettingCompletions.scala index e3ff3cce4..ff63be151 100644 --- a/main/src/main/scala/sbt/internal/SettingCompletions.scala +++ b/main/src/main/scala/sbt/internal/SettingCompletions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/SettingGraph.scala b/main/src/main/scala/sbt/internal/SettingGraph.scala index 15669675c..af6af86f9 100644 --- a/main/src/main/scala/sbt/internal/SettingGraph.scala +++ b/main/src/main/scala/sbt/internal/SettingGraph.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/ShutdownHooks.scala b/main/src/main/scala/sbt/internal/ShutdownHooks.scala index 385848371..411d42095 100644 --- a/main/src/main/scala/sbt/internal/ShutdownHooks.scala +++ b/main/src/main/scala/sbt/internal/ShutdownHooks.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/SysProp.scala b/main/src/main/scala/sbt/internal/SysProp.scala index b2846a1b7..bcb2fe8c0 100644 --- a/main/src/main/scala/sbt/internal/SysProp.scala +++ b/main/src/main/scala/sbt/internal/SysProp.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/TaskName.scala b/main/src/main/scala/sbt/internal/TaskName.scala index 35b126e3c..f5ead4568 100644 --- a/main/src/main/scala/sbt/internal/TaskName.scala +++ b/main/src/main/scala/sbt/internal/TaskName.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/TaskProgress.scala b/main/src/main/scala/sbt/internal/TaskProgress.scala index 65fea78fc..6d9e6b963 100644 --- a/main/src/main/scala/sbt/internal/TaskProgress.scala +++ b/main/src/main/scala/sbt/internal/TaskProgress.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/TaskSequential.scala b/main/src/main/scala/sbt/internal/TaskSequential.scala index 628652dda..94c6f014e 100644 --- a/main/src/main/scala/sbt/internal/TaskSequential.scala +++ b/main/src/main/scala/sbt/internal/TaskSequential.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/TaskTimings.scala b/main/src/main/scala/sbt/internal/TaskTimings.scala index fe814ccd5..328c40abe 100644 --- a/main/src/main/scala/sbt/internal/TaskTimings.scala +++ b/main/src/main/scala/sbt/internal/TaskTimings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/TaskTraceEvent.scala b/main/src/main/scala/sbt/internal/TaskTraceEvent.scala index 7034c0af6..57b2900e7 100644 --- a/main/src/main/scala/sbt/internal/TaskTraceEvent.scala +++ b/main/src/main/scala/sbt/internal/TaskTraceEvent.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala index 02d107e83..2f2c97c0c 100644 --- a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala +++ b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala b/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala index 5215f4ea8..e755f6c27 100644 --- a/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala +++ b/main/src/main/scala/sbt/internal/WatchTransitiveDependencies.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/GraphTransformations.scala b/main/src/main/scala/sbt/internal/graph/GraphTransformations.scala index 816fe2624..b80dd1b97 100644 --- a/main/src/main/scala/sbt/internal/graph/GraphTransformations.scala +++ b/main/src/main/scala/sbt/internal/graph/GraphTransformations.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/backend/IvyReport.scala b/main/src/main/scala/sbt/internal/graph/backend/IvyReport.scala index 07fb20312..71504081c 100644 --- a/main/src/main/scala/sbt/internal/graph/backend/IvyReport.scala +++ b/main/src/main/scala/sbt/internal/graph/backend/IvyReport.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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..122cbeb95 100644 --- a/main/src/main/scala/sbt/internal/graph/backend/SbtUpdateReport.scala +++ b/main/src/main/scala/sbt/internal/graph/backend/SbtUpdateReport.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/model.scala b/main/src/main/scala/sbt/internal/graph/model.scala index 5bedafcc4..6ea2af56a 100644 --- a/main/src/main/scala/sbt/internal/graph/model.scala +++ b/main/src/main/scala/sbt/internal/graph/model.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/package.scala b/main/src/main/scala/sbt/internal/graph/package.scala index f1fac27a6..50ef7036e 100644 --- a/main/src/main/scala/sbt/internal/graph/package.scala +++ b/main/src/main/scala/sbt/internal/graph/package.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala b/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala index 5c474bf6f..d40230bed 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/AsciiTree.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala b/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala index 5c7dae6c9..172bc6bcd 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/rendering/DagreHTML.scala b/main/src/main/scala/sbt/internal/graph/rendering/DagreHTML.scala index 0938d9ec9..d8247cff3 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/DagreHTML.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/DagreHTML.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/rendering/FlatList.scala b/main/src/main/scala/sbt/internal/graph/rendering/FlatList.scala index a0a842408..cad3be0c3 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/FlatList.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/FlatList.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/rendering/GraphML.scala b/main/src/main/scala/sbt/internal/graph/rendering/GraphML.scala index 9f61873dc..7415b90ea 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/GraphML.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/GraphML.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/rendering/LicenseInfo.scala b/main/src/main/scala/sbt/internal/graph/rendering/LicenseInfo.scala index d00209735..e979fd4e3 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/LicenseInfo.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/LicenseInfo.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala b/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala index 15c922992..7b24dd30e 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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..4258d3b92 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/TreeView.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/TreeView.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/librarymanagement/FakeRawRepository.scala b/main/src/main/scala/sbt/internal/librarymanagement/FakeRawRepository.scala index a8a236643..4d196279d 100644 --- a/main/src/main/scala/sbt/internal/librarymanagement/FakeRawRepository.scala +++ b/main/src/main/scala/sbt/internal/librarymanagement/FakeRawRepository.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala b/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala index 74c3af588..832f1f8e6 100644 --- a/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala +++ b/main/src/main/scala/sbt/internal/librarymanagement/IvyXml.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala b/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala index 57be28464..70e3d827f 100644 --- a/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala +++ b/main/src/main/scala/sbt/internal/nio/CheckBuildSources.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/parser/SbtParser.scala b/main/src/main/scala/sbt/internal/parser/SbtParser.scala index e281368e6..c755bc411 100644 --- a/main/src/main/scala/sbt/internal/parser/SbtParser.scala +++ b/main/src/main/scala/sbt/internal/parser/SbtParser.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/parser/SbtRefactorings.scala b/main/src/main/scala/sbt/internal/parser/SbtRefactorings.scala index 647e5d012..50903aa47 100644 --- a/main/src/main/scala/sbt/internal/parser/SbtRefactorings.scala +++ b/main/src/main/scala/sbt/internal/parser/SbtRefactorings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala b/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala index c445a9fe4..b5ccae255 100644 --- a/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala +++ b/main/src/main/scala/sbt/internal/server/BspCompileProgress.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala index 57abb770a..99cd0898a 100644 --- a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala +++ b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala index cc4475e75..fcf35bd6f 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerEvalReporter.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index adc0004a5..0f53ad216 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index 9d314a5eb..fbf2d9a08 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/Definition.scala b/main/src/main/scala/sbt/internal/server/Definition.scala index 0564c9811..4deed7385 100644 --- a/main/src/main/scala/sbt/internal/server/Definition.scala +++ b/main/src/main/scala/sbt/internal/server/Definition.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/LanguageServerProtocol.scala b/main/src/main/scala/sbt/internal/server/LanguageServerProtocol.scala index 57c1c9c13..2bf2878bd 100644 --- a/main/src/main/scala/sbt/internal/server/LanguageServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/LanguageServerProtocol.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala index 0acab0974..95c0e16c0 100644 --- a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala +++ b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/SettingQuery.scala b/main/src/main/scala/sbt/internal/server/SettingQuery.scala index 98aa89655..defe142bc 100644 --- a/main/src/main/scala/sbt/internal/server/SettingQuery.scala +++ b/main/src/main/scala/sbt/internal/server/SettingQuery.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala index c88adaab8..165202287 100644 --- a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala +++ b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/nio/FileChanges.scala b/main/src/main/scala/sbt/nio/FileChanges.scala index 66329caad..d07240403 100644 --- a/main/src/main/scala/sbt/nio/FileChanges.scala +++ b/main/src/main/scala/sbt/nio/FileChanges.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/nio/FileStamp.scala b/main/src/main/scala/sbt/nio/FileStamp.scala index 1a892373e..bd8f448c3 100644 --- a/main/src/main/scala/sbt/nio/FileStamp.scala +++ b/main/src/main/scala/sbt/nio/FileStamp.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/nio/Keys.scala b/main/src/main/scala/sbt/nio/Keys.scala index 373f23cda..1a27b7d20 100644 --- a/main/src/main/scala/sbt/nio/Keys.scala +++ b/main/src/main/scala/sbt/nio/Keys.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/nio/Settings.scala b/main/src/main/scala/sbt/nio/Settings.scala index 3f78649af..610272786 100644 --- a/main/src/main/scala/sbt/nio/Settings.scala +++ b/main/src/main/scala/sbt/nio/Settings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/nio/Watch.scala b/main/src/main/scala/sbt/nio/Watch.scala index 0e235ed13..e7ab6b0b5 100644 --- a/main/src/main/scala/sbt/nio/Watch.scala +++ b/main/src/main/scala/sbt/nio/Watch.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/CorePlugin.scala b/main/src/main/scala/sbt/plugins/CorePlugin.scala index c0ea66a10..3df867643 100644 --- a/main/src/main/scala/sbt/plugins/CorePlugin.scala +++ b/main/src/main/scala/sbt/plugins/CorePlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala b/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala index 5268941ef..4d775a6ff 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala index 88ed9d374..69f6aa1aa 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala b/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala index b8b108b99..51e60575b 100644 --- a/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala +++ b/main/src/main/scala/sbt/plugins/Giter8TemplatePlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/IvyPlugin.scala b/main/src/main/scala/sbt/plugins/IvyPlugin.scala index 97a7a1371..7300d609b 100644 --- a/main/src/main/scala/sbt/plugins/IvyPlugin.scala +++ b/main/src/main/scala/sbt/plugins/IvyPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala b/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala index 95da705df..fa5926548 100644 --- a/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala +++ b/main/src/main/scala/sbt/plugins/JUnitXmlReportPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/JvmPlugin.scala b/main/src/main/scala/sbt/plugins/JvmPlugin.scala index be930f5e5..e4b134d33 100644 --- a/main/src/main/scala/sbt/plugins/JvmPlugin.scala +++ b/main/src/main/scala/sbt/plugins/JvmPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/MiniDependencyTreePlugin.scala b/main/src/main/scala/sbt/plugins/MiniDependencyTreePlugin.scala index 2236c21c9..abbc0109f 100644 --- a/main/src/main/scala/sbt/plugins/MiniDependencyTreePlugin.scala +++ b/main/src/main/scala/sbt/plugins/MiniDependencyTreePlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/SbtPlugin.scala b/main/src/main/scala/sbt/plugins/SbtPlugin.scala index 3572972f7..c38d34b76 100644 --- a/main/src/main/scala/sbt/plugins/SbtPlugin.scala +++ b/main/src/main/scala/sbt/plugins/SbtPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala index 94964e1b0..5d603bc11 100644 --- a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala +++ b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/BuildPathsTest.scala b/main/src/test/scala/BuildPathsTest.scala index 0fe69ab13..b4f37906f 100644 --- a/main/src/test/scala/BuildPathsTest.scala +++ b/main/src/test/scala/BuildPathsTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/ClasspathsTest.scala b/main/src/test/scala/ClasspathsTest.scala index ff155199c..278191bbe 100644 --- a/main/src/test/scala/ClasspathsTest.scala +++ b/main/src/test/scala/ClasspathsTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/DefaultsTest.scala b/main/src/test/scala/DefaultsTest.scala index fa73a5795..3e02ac0c8 100644 --- a/main/src/test/scala/DefaultsTest.scala +++ b/main/src/test/scala/DefaultsTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/Delegates.scala b/main/src/test/scala/Delegates.scala index 2d317e8c2..40e691553 100644 --- a/main/src/test/scala/Delegates.scala +++ b/main/src/test/scala/Delegates.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/ParseKey.scala b/main/src/test/scala/ParseKey.scala index d5405a0da..331e33356 100644 --- a/main/src/test/scala/ParseKey.scala +++ b/main/src/test/scala/ParseKey.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/ParserSpec.scala b/main/src/test/scala/ParserSpec.scala index 5022fa9d3..8a92a1e12 100644 --- a/main/src/test/scala/ParserSpec.scala +++ b/main/src/test/scala/ParserSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/PluginCommandTest.scala b/main/src/test/scala/PluginCommandTest.scala index eb8d9d593..b0fa5662b 100644 --- a/main/src/test/scala/PluginCommandTest.scala +++ b/main/src/test/scala/PluginCommandTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/PluginsTest.scala b/main/src/test/scala/PluginsTest.scala index a3be3a322..e7bdcf826 100644 --- a/main/src/test/scala/PluginsTest.scala +++ b/main/src/test/scala/PluginsTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/ProjectMacro.scala b/main/src/test/scala/ProjectMacro.scala index d66146688..daf3d69f1 100644 --- a/main/src/test/scala/ProjectMacro.scala +++ b/main/src/test/scala/ProjectMacro.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/ProjectSpec.scala b/main/src/test/scala/ProjectSpec.scala index aa61bac9c..e6490d1aa 100644 --- a/main/src/test/scala/ProjectSpec.scala +++ b/main/src/test/scala/ProjectSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/TagsTest.scala b/main/src/test/scala/TagsTest.scala index d56160df9..270ca646e 100644 --- a/main/src/test/scala/TagsTest.scala +++ b/main/src/test/scala/TagsTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/AggregationSpec.scala b/main/src/test/scala/sbt/internal/AggregationSpec.scala index f8c7f7179..9acf09dc3 100644 --- a/main/src/test/scala/sbt/internal/AggregationSpec.scala +++ b/main/src/test/scala/sbt/internal/AggregationSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/CrossJavaTest.scala b/main/src/test/scala/sbt/internal/CrossJavaTest.scala index c884c31c8..b8dc89248 100644 --- a/main/src/test/scala/sbt/internal/CrossJavaTest.scala +++ b/main/src/test/scala/sbt/internal/CrossJavaTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/FileStampJsonSpec.scala b/main/src/test/scala/sbt/internal/FileStampJsonSpec.scala index bf0f127f3..ab6a8e192 100644 --- a/main/src/test/scala/sbt/internal/FileStampJsonSpec.scala +++ b/main/src/test/scala/sbt/internal/FileStampJsonSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/GCMonitorTest.scala b/main/src/test/scala/sbt/internal/GCMonitorTest.scala index d646b88f1..60461fa8f 100644 --- a/main/src/test/scala/sbt/internal/GCMonitorTest.scala +++ b/main/src/test/scala/sbt/internal/GCMonitorTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala index fa4b2c8a1..a5d6b8cdc 100644 --- a/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala +++ b/main/src/test/scala/sbt/internal/InstallSbtnSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/StressGCMonitor.scala b/main/src/test/scala/sbt/internal/StressGCMonitor.scala index 8566b21d1..8a4d245b7 100644 --- a/main/src/test/scala/sbt/internal/StressGCMonitor.scala +++ b/main/src/test/scala/sbt/internal/StressGCMonitor.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/TestBuild.scala b/main/src/test/scala/sbt/internal/TestBuild.scala index b9290240e..e34a88f65 100644 --- a/main/src/test/scala/sbt/internal/TestBuild.scala +++ b/main/src/test/scala/sbt/internal/TestBuild.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/graph/rendering/TreeViewTest.scala b/main/src/test/scala/sbt/internal/graph/rendering/TreeViewTest.scala index 6b291b4e3..705dd9dfc 100644 --- a/main/src/test/scala/sbt/internal/graph/rendering/TreeViewTest.scala +++ b/main/src/test/scala/sbt/internal/graph/rendering/TreeViewTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/AbstractSpec.scala b/main/src/test/scala/sbt/internal/parser/AbstractSpec.scala index a11fe9f85..3587401b3 100644 --- a/main/src/test/scala/sbt/internal/parser/AbstractSpec.scala +++ b/main/src/test/scala/sbt/internal/parser/AbstractSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/CheckIfParsedSpec.scala b/main/src/test/scala/sbt/internal/parser/CheckIfParsedSpec.scala index e13e15eed..ec0fa1ca2 100644 --- a/main/src/test/scala/sbt/internal/parser/CheckIfParsedSpec.scala +++ b/main/src/test/scala/sbt/internal/parser/CheckIfParsedSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/CommentedXmlSpec.scala b/main/src/test/scala/sbt/internal/parser/CommentedXmlSpec.scala index 06f348b3e..6d53c396a 100644 --- a/main/src/test/scala/sbt/internal/parser/CommentedXmlSpec.scala +++ b/main/src/test/scala/sbt/internal/parser/CommentedXmlSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala b/main/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala index 2af64a80c..4df812273 100644 --- a/main/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala +++ b/main/src/test/scala/sbt/internal/parser/EmbeddedXmlSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/ErrorSpec.scala b/main/src/test/scala/sbt/internal/parser/ErrorSpec.scala index 693e1b72a..8987b7d2f 100644 --- a/main/src/test/scala/sbt/internal/parser/ErrorSpec.scala +++ b/main/src/test/scala/sbt/internal/parser/ErrorSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/NewFormatSpec.scala b/main/src/test/scala/sbt/internal/parser/NewFormatSpec.scala index b8253a55e..e87d0c67d 100644 --- a/main/src/test/scala/sbt/internal/parser/NewFormatSpec.scala +++ b/main/src/test/scala/sbt/internal/parser/NewFormatSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala b/main/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala index 61e26dc4c..9d4bb915e 100644 --- a/main/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala +++ b/main/src/test/scala/sbt/internal/parser/SessionSettingsSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/SplitExpressions.scala b/main/src/test/scala/sbt/internal/parser/SplitExpressions.scala index fd8733a7a..5a21d55f9 100644 --- a/main/src/test/scala/sbt/internal/parser/SplitExpressions.scala +++ b/main/src/test/scala/sbt/internal/parser/SplitExpressions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala b/main/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala index a8f652149..90727e8fe 100644 --- a/main/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala +++ b/main/src/test/scala/sbt/internal/parser/SplitExpressionsBehavior.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/parser/SplitExpressionsTest.scala b/main/src/test/scala/sbt/internal/parser/SplitExpressionsTest.scala index 794a4edba..19efd4ae0 100644 --- a/main/src/test/scala/sbt/internal/parser/SplitExpressionsTest.scala +++ b/main/src/test/scala/sbt/internal/parser/SplitExpressionsTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/server/DefinitionTest.scala b/main/src/test/scala/sbt/internal/server/DefinitionTest.scala index f2c477e85..0d28294c1 100644 --- a/main/src/test/scala/sbt/internal/server/DefinitionTest.scala +++ b/main/src/test/scala/sbt/internal/server/DefinitionTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala b/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala index d64488a70..24263246e 100644 --- a/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala +++ b/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/main/src/test/scala/testpkg/CompletionSpec.scala b/main/src/test/scala/testpkg/CompletionSpec.scala index 686001859..5d1c2824d 100644 --- a/main/src/test/scala/testpkg/CompletionSpec.scala +++ b/main/src/test/scala/testpkg/CompletionSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/BuildServerConnection.scala b/protocol/src/main/scala/sbt/internal/bsp/BuildServerConnection.scala index 4317f893d..e03b67eae 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/BuildServerConnection.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/BuildServerConnection.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/BuildServerTasks.scala b/protocol/src/main/scala/sbt/internal/bsp/BuildServerTasks.scala index 9a8737bf7..9861d116c 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/BuildServerTasks.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/BuildServerTasks.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/BuildTargetName.scala b/protocol/src/main/scala/sbt/internal/bsp/BuildTargetName.scala index 1c3307542..e17f78581 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/BuildTargetName.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/BuildTargetName.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala b/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala index fa1773f27..478208cb7 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/BuildTargetTag.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/DiagnosticSeverity.scala b/protocol/src/main/scala/sbt/internal/bsp/DiagnosticSeverity.scala index 6f7797421..68358f8de 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/DiagnosticSeverity.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/DiagnosticSeverity.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/OutputPathItemKind.scala b/protocol/src/main/scala/sbt/internal/bsp/OutputPathItemKind.scala index aaee48e65..ce139e571 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/OutputPathItemKind.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/OutputPathItemKind.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/ScalaPlatform.scala b/protocol/src/main/scala/sbt/internal/bsp/ScalaPlatform.scala index ea1efffb5..158bd36d6 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/ScalaPlatform.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/ScalaPlatform.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/SourceItemKind.scala b/protocol/src/main/scala/sbt/internal/bsp/SourceItemKind.scala index f9dd7e6b3..335b786de 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/SourceItemKind.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/SourceItemKind.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/bsp/StatusCode.scala b/protocol/src/main/scala/sbt/internal/bsp/StatusCode.scala index a5b75971f..65085f7a0 100644 --- a/protocol/src/main/scala/sbt/internal/bsp/StatusCode.scala +++ b/protocol/src/main/scala/sbt/internal/bsp/StatusCode.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/langserver/DiagnosticSeverity.scala b/protocol/src/main/scala/sbt/internal/langserver/DiagnosticSeverity.scala index e13bb3081..52789d9c7 100644 --- a/protocol/src/main/scala/sbt/internal/langserver/DiagnosticSeverity.scala +++ b/protocol/src/main/scala/sbt/internal/langserver/DiagnosticSeverity.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/langserver/ErrorCodes.scala b/protocol/src/main/scala/sbt/internal/langserver/ErrorCodes.scala index 74611035a..a8f7936bc 100644 --- a/protocol/src/main/scala/sbt/internal/langserver/ErrorCodes.scala +++ b/protocol/src/main/scala/sbt/internal/langserver/ErrorCodes.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/langserver/MessageType.scala b/protocol/src/main/scala/sbt/internal/langserver/MessageType.scala index 2597fb1d1..4cef17853 100644 --- a/protocol/src/main/scala/sbt/internal/langserver/MessageType.scala +++ b/protocol/src/main/scala/sbt/internal/langserver/MessageType.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRPCProtocol.scala b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRPCProtocol.scala index 06a8fe423..ae5baedb3 100644 --- a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRPCProtocol.scala +++ b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRPCProtocol.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcNotificationMessageFormats.scala b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcNotificationMessageFormats.scala index 07a8b1f64..f825dc0a4 100644 --- a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcNotificationMessageFormats.scala +++ b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcNotificationMessageFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcRequestMessageFormats.scala b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcRequestMessageFormats.scala index 829b8d2a4..211475f43 100644 --- a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcRequestMessageFormats.scala +++ b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcRequestMessageFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseErrorFormats.scala b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseErrorFormats.scala index 6d54a55ab..e77b67b2f 100644 --- a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseErrorFormats.scala +++ b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseErrorFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseMessageFormats.scala b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseMessageFormats.scala index c93b31e22..997add8f5 100644 --- a/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseMessageFormats.scala +++ b/protocol/src/main/scala/sbt/internal/protocol/codec/JsonRpcResponseMessageFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/protocol/ClientSocket.scala b/protocol/src/main/scala/sbt/protocol/ClientSocket.scala index 165148f2a..90109e418 100644 --- a/protocol/src/main/scala/sbt/protocol/ClientSocket.scala +++ b/protocol/src/main/scala/sbt/protocol/ClientSocket.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/protocol/src/main/scala/sbt/protocol/Serialization.scala b/protocol/src/main/scala/sbt/protocol/Serialization.scala index 4b8537702..2dcd5ae98 100644 --- a/protocol/src/main/scala/sbt/protocol/Serialization.scala +++ b/protocol/src/main/scala/sbt/protocol/Serialization.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/NOTICE b/run/NOTICE index 40d55bd9b..42bb77ca6 100644 --- a/run/NOTICE +++ b/run/NOTICE @@ -1,5 +1,6 @@ sbt: Run Component -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under BSD-3-Clause license (see LICENSE) diff --git a/run/src/main/scala/sbt/Fork.scala b/run/src/main/scala/sbt/Fork.scala index 7cbf1c7ad..1bdf0127f 100644 --- a/run/src/main/scala/sbt/Fork.scala +++ b/run/src/main/scala/sbt/Fork.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/src/main/scala/sbt/OutputStrategy.scala b/run/src/main/scala/sbt/OutputStrategy.scala index 35b114b88..24eaa6a29 100644 --- a/run/src/main/scala/sbt/OutputStrategy.scala +++ b/run/src/main/scala/sbt/OutputStrategy.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/src/main/scala/sbt/Run.scala b/run/src/main/scala/sbt/Run.scala index 637c1473a..9e46f2b46 100644 --- a/run/src/main/scala/sbt/Run.scala +++ b/run/src/main/scala/sbt/Run.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/src/main/scala/sbt/SelectMainClass.scala b/run/src/main/scala/sbt/SelectMainClass.scala index 74803fb07..558389979 100644 --- a/run/src/main/scala/sbt/SelectMainClass.scala +++ b/run/src/main/scala/sbt/SelectMainClass.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/src/main/scala/sbt/TrapExit.scala b/run/src/main/scala/sbt/TrapExit.scala index 8a63bbd10..3703b2fa9 100644 --- a/run/src/main/scala/sbt/TrapExit.scala +++ b/run/src/main/scala/sbt/TrapExit.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/src/main/scala/sbt/TrapExitSecurityException.scala b/run/src/main/scala/sbt/TrapExitSecurityException.scala index ff5416eab..92ea0b4f8 100644 --- a/run/src/main/scala/sbt/TrapExitSecurityException.scala +++ b/run/src/main/scala/sbt/TrapExitSecurityException.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/src/test/scala/sbt/ForkTest.scala b/run/src/test/scala/sbt/ForkTest.scala index a3a66d47b..5803a13bb 100644 --- a/run/src/test/scala/sbt/ForkTest.scala +++ b/run/src/test/scala/sbt/ForkTest.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/run/src/test/scala/sbt/TestLogger.scala b/run/src/test/scala/sbt/TestLogger.scala index 6c3e96d51..3ee34f599 100644 --- a/run/src/test/scala/sbt/TestLogger.scala +++ b/run/src/test/scala/sbt/TestLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/sbt-app/src/main/scala/package.scala b/sbt-app/src/main/scala/package.scala index 01d133947..0bb7f7f24 100644 --- a/sbt-app/src/main/scala/package.scala +++ b/sbt-app/src/main/scala/package.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/sbt-app/src/main/scala/sbt/AllSyntax.scala b/sbt-app/src/main/scala/sbt/AllSyntax.scala index d3b6520fd..6d489eff8 100644 --- a/sbt-app/src/main/scala/sbt/AllSyntax.scala +++ b/sbt-app/src/main/scala/sbt/AllSyntax.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/sbt-app/src/main/scala/sbt/Import.scala b/sbt-app/src/main/scala/sbt/Import.scala index 548e571a4..a7c0d0598 100644 --- a/sbt-app/src/main/scala/sbt/Import.scala +++ b/sbt-app/src/main/scala/sbt/Import.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala b/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala index de4dfb96c..7c23ceecf 100644 --- a/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala +++ b/sbt-app/src/test/scala/sbt/IllegalReferenceSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala b/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala index ae6240a8b..daf703d25 100644 --- a/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala +++ b/sbt-app/src/test/scala/sbt/RunFromSourceMain.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java b/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java index a2710c66d..7e21f0795 100644 --- a/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java +++ b/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/scripted-plugin/src/main/scala/sbt/ScriptedPlugin.scala b/scripted-plugin/src/main/scala/sbt/ScriptedPlugin.scala index e00e0ef31..8383a97f3 100644 --- a/scripted-plugin/src/main/scala/sbt/ScriptedPlugin.scala +++ b/scripted-plugin/src/main/scala/sbt/ScriptedPlugin.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/scripted-sbt-old/src/main/scala/sbt/test/OldScriptedTests.scala b/scripted-sbt-old/src/main/scala/sbt/test/OldScriptedTests.scala index 2497a27fe..0eaf16602 100644 --- a/scripted-sbt-old/src/main/scala/sbt/test/OldScriptedTests.scala +++ b/scripted-sbt-old/src/main/scala/sbt/test/OldScriptedTests.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/scripted-sbt-redux/NOTICE b/scripted-sbt-redux/NOTICE index 89cb6a81c..e8ad87d2c 100644 --- a/scripted-sbt-redux/NOTICE +++ b/scripted-sbt-redux/NOTICE @@ -1,4 +1,5 @@ sbt: Scripted Testing -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under BSD-3-Clause license (see LICENSE) diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala index 3fcad568d..8c0a4df86 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/RemoteSbtCreator.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/RemoteSbtCreator.scala index b35b6a396..3c21125ce 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/RemoteSbtCreator.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/RemoteSbtCreator.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala index b8af69c58..1888ffa4f 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/SbtHandler.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ 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 5a836b885..803b14610 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/NOTICE b/tasks-standard/NOTICE index 3f12e2eda..94605a69a 100644 --- a/tasks-standard/NOTICE +++ b/tasks-standard/NOTICE @@ -1,4 +1,5 @@ sbt: Standard Tasks Component -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under BSD-3-Clause license (see LICENSE) diff --git a/tasks-standard/src/main/scala/sbt/Action.scala b/tasks-standard/src/main/scala/sbt/Action.scala index 56cd2214e..8a8a722be 100644 --- a/tasks-standard/src/main/scala/sbt/Action.scala +++ b/tasks-standard/src/main/scala/sbt/Action.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/main/scala/sbt/std/Streams.scala b/tasks-standard/src/main/scala/sbt/std/Streams.scala index da487fdd3..d4617d7f4 100644 --- a/tasks-standard/src/main/scala/sbt/std/Streams.scala +++ b/tasks-standard/src/main/scala/sbt/std/Streams.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala b/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala index 3d2061d2c..7bbb2edba 100644 --- a/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala +++ b/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/main/scala/sbt/std/Transform.scala b/tasks-standard/src/main/scala/sbt/std/Transform.scala index f2259f3b3..cc85c989c 100644 --- a/tasks-standard/src/main/scala/sbt/std/Transform.scala +++ b/tasks-standard/src/main/scala/sbt/std/Transform.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/Execute.scala b/tasks-standard/src/test/scala/Execute.scala index c61dc9c6b..b75eaf66a 100644 --- a/tasks-standard/src/test/scala/Execute.scala +++ b/tasks-standard/src/test/scala/Execute.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/TaskGen.scala b/tasks-standard/src/test/scala/TaskGen.scala index 92d8b29d8..8b286af46 100644 --- a/tasks-standard/src/test/scala/TaskGen.scala +++ b/tasks-standard/src/test/scala/TaskGen.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/TaskRunnerCircular.scala b/tasks-standard/src/test/scala/TaskRunnerCircular.scala index 532d45173..1df121f25 100644 --- a/tasks-standard/src/test/scala/TaskRunnerCircular.scala +++ b/tasks-standard/src/test/scala/TaskRunnerCircular.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/TaskRunnerFork.scala b/tasks-standard/src/test/scala/TaskRunnerFork.scala index 3551a0914..1621c8324 100644 --- a/tasks-standard/src/test/scala/TaskRunnerFork.scala +++ b/tasks-standard/src/test/scala/TaskRunnerFork.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/TaskSerial.scala b/tasks-standard/src/test/scala/TaskSerial.scala index a7bf8cbff..23818b3fc 100644 --- a/tasks-standard/src/test/scala/TaskSerial.scala +++ b/tasks-standard/src/test/scala/TaskSerial.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/Test.scala b/tasks-standard/src/test/scala/Test.scala index 36091c583..23b46180f 100644 --- a/tasks-standard/src/test/scala/Test.scala +++ b/tasks-standard/src/test/scala/Test.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/TestRunnerCall.scala b/tasks-standard/src/test/scala/TestRunnerCall.scala index 754c38bb8..849ea0d4f 100644 --- a/tasks-standard/src/test/scala/TestRunnerCall.scala +++ b/tasks-standard/src/test/scala/TestRunnerCall.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/TestRunnerSort.scala b/tasks-standard/src/test/scala/TestRunnerSort.scala index e7c6dcbed..ce3b73dd0 100644 --- a/tasks-standard/src/test/scala/TestRunnerSort.scala +++ b/tasks-standard/src/test/scala/TestRunnerSort.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks-standard/src/test/scala/checkResult.scala b/tasks-standard/src/test/scala/checkResult.scala index 4eb13075d..601aa5943 100644 --- a/tasks-standard/src/test/scala/checkResult.scala +++ b/tasks-standard/src/test/scala/checkResult.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks/NOTICE b/tasks/NOTICE index e3f56a307..8b66ff19e 100644 --- a/tasks/NOTICE +++ b/tasks/NOTICE @@ -1,4 +1,5 @@ sbt: Task Engine Component -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah Licensed under BSD-3-Clause license (see LICENSE) diff --git a/tasks/src/main/scala/sbt/CompletionService.scala b/tasks/src/main/scala/sbt/CompletionService.scala index f9586a5da..11af3feb7 100644 --- a/tasks/src/main/scala/sbt/CompletionService.scala +++ b/tasks/src/main/scala/sbt/CompletionService.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala b/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala index dadb4fa6c..30659e8bc 100644 --- a/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala +++ b/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks/src/main/scala/sbt/Execute.scala b/tasks/src/main/scala/sbt/Execute.scala index de2100154..944f3dabe 100644 --- a/tasks/src/main/scala/sbt/Execute.scala +++ b/tasks/src/main/scala/sbt/Execute.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks/src/main/scala/sbt/ExecuteProgress.scala b/tasks/src/main/scala/sbt/ExecuteProgress.scala index e52b743fd..a3d69d9e9 100644 --- a/tasks/src/main/scala/sbt/ExecuteProgress.scala +++ b/tasks/src/main/scala/sbt/ExecuteProgress.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks/src/main/scala/sbt/Incomplete.scala b/tasks/src/main/scala/sbt/Incomplete.scala index 59232f24a..47c5f6c89 100644 --- a/tasks/src/main/scala/sbt/Incomplete.scala +++ b/tasks/src/main/scala/sbt/Incomplete.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks/src/main/scala/sbt/Node.scala b/tasks/src/main/scala/sbt/Node.scala index fac5cff58..514c3317c 100644 --- a/tasks/src/main/scala/sbt/Node.scala +++ b/tasks/src/main/scala/sbt/Node.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/tasks/src/main/scala/sbt/Result.scala b/tasks/src/main/scala/sbt/Result.scala index 973e9d559..2f413dd70 100644 --- a/tasks/src/main/scala/sbt/Result.scala +++ b/tasks/src/main/scala/sbt/Result.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/NOTICE b/testing/NOTICE index 36daa88f1..4749d5e51 100644 --- a/testing/NOTICE +++ b/testing/NOTICE @@ -1,4 +1,5 @@ sbt: Testing Component -Copyright 2011 - 2017, Lightbend, Inc. +Copyright 2023, Scala center +Copyright 2011 - 2022, Lightbend, Inc. Copyright 2008 - 2010, Mark Harrah, Steven Blundy, Josh Cough Licensed under BSD-3-Clause license (see LICENSE) diff --git a/testing/agent/src/main/java/sbt/ForkConfiguration.java b/testing/agent/src/main/java/sbt/ForkConfiguration.java index 5a357ae24..993fe6908 100644 --- a/testing/agent/src/main/java/sbt/ForkConfiguration.java +++ b/testing/agent/src/main/java/sbt/ForkConfiguration.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/agent/src/main/java/sbt/ForkMain.java b/testing/agent/src/main/java/sbt/ForkMain.java index 2ba171603..593f86278 100644 --- a/testing/agent/src/main/java/sbt/ForkMain.java +++ b/testing/agent/src/main/java/sbt/ForkMain.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/agent/src/main/java/sbt/ForkTags.java b/testing/agent/src/main/java/sbt/ForkTags.java index 5f8022fed..1b0660119 100644 --- a/testing/agent/src/main/java/sbt/ForkTags.java +++ b/testing/agent/src/main/java/sbt/ForkTags.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/agent/src/main/java/sbt/FrameworkWrapper.java b/testing/agent/src/main/java/sbt/FrameworkWrapper.java index 22c94af0b..4d67edf8f 100644 --- a/testing/agent/src/main/java/sbt/FrameworkWrapper.java +++ b/testing/agent/src/main/java/sbt/FrameworkWrapper.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala b/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala index ebe66bfcd..382bf846e 100644 --- a/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala +++ b/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/src/main/scala/sbt/TestFramework.scala b/testing/src/main/scala/sbt/TestFramework.scala index 4cd8f0ca5..c11dbecf6 100644 --- a/testing/src/main/scala/sbt/TestFramework.scala +++ b/testing/src/main/scala/sbt/TestFramework.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/src/main/scala/sbt/TestReportListener.scala b/testing/src/main/scala/sbt/TestReportListener.scala index 08df6c415..55b1b5b30 100644 --- a/testing/src/main/scala/sbt/TestReportListener.scala +++ b/testing/src/main/scala/sbt/TestReportListener.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/src/main/scala/sbt/TestStatusReporter.scala b/testing/src/main/scala/sbt/TestStatusReporter.scala index 72b1a40ae..e9e9dd131 100644 --- a/testing/src/main/scala/sbt/TestStatusReporter.scala +++ b/testing/src/main/scala/sbt/TestStatusReporter.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/src/main/scala/sbt/internal/testing/StatusFormats.scala b/testing/src/main/scala/sbt/internal/testing/StatusFormats.scala index 51729dcb3..a73ee9dab 100644 --- a/testing/src/main/scala/sbt/internal/testing/StatusFormats.scala +++ b/testing/src/main/scala/sbt/internal/testing/StatusFormats.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/testing/src/main/scala/sbt/internal/testing/TestLogger.scala b/testing/src/main/scala/sbt/internal/testing/TestLogger.scala index 0e7bd1437..514b0b4ca 100644 --- a/testing/src/main/scala/sbt/internal/testing/TestLogger.scala +++ b/testing/src/main/scala/sbt/internal/testing/TestLogger.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/internal/util/EmptyCacheError.scala b/util-cache/src/main/scala/sbt/internal/util/EmptyCacheError.scala index a3e555859..36b5095d5 100644 --- a/util-cache/src/main/scala/sbt/internal/util/EmptyCacheError.scala +++ b/util-cache/src/main/scala/sbt/internal/util/EmptyCacheError.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/BasicCacheImplicits.scala b/util-cache/src/main/scala/sbt/util/BasicCacheImplicits.scala index f0931a4fb..2a45e5996 100644 --- a/util-cache/src/main/scala/sbt/util/BasicCacheImplicits.scala +++ b/util-cache/src/main/scala/sbt/util/BasicCacheImplicits.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/Cache.scala b/util-cache/src/main/scala/sbt/util/Cache.scala index c0cbd9a8e..eda9c4d28 100644 --- a/util-cache/src/main/scala/sbt/util/Cache.scala +++ b/util-cache/src/main/scala/sbt/util/Cache.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/CacheImplicits.scala b/util-cache/src/main/scala/sbt/util/CacheImplicits.scala index ba72b9d79..766afb608 100644 --- a/util-cache/src/main/scala/sbt/util/CacheImplicits.scala +++ b/util-cache/src/main/scala/sbt/util/CacheImplicits.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/CacheStore.scala b/util-cache/src/main/scala/sbt/util/CacheStore.scala index 42cc10c40..9d3ea5a0f 100644 --- a/util-cache/src/main/scala/sbt/util/CacheStore.scala +++ b/util-cache/src/main/scala/sbt/util/CacheStore.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/FileInfo.scala b/util-cache/src/main/scala/sbt/util/FileInfo.scala index b9d0e646d..94fb4c794 100644 --- a/util-cache/src/main/scala/sbt/util/FileInfo.scala +++ b/util-cache/src/main/scala/sbt/util/FileInfo.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/Input.scala b/util-cache/src/main/scala/sbt/util/Input.scala index a79b84822..e5aeecf1d 100644 --- a/util-cache/src/main/scala/sbt/util/Input.scala +++ b/util-cache/src/main/scala/sbt/util/Input.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/Output.scala b/util-cache/src/main/scala/sbt/util/Output.scala index 2c19f18ce..9a288233f 100644 --- a/util-cache/src/main/scala/sbt/util/Output.scala +++ b/util-cache/src/main/scala/sbt/util/Output.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/SeparatedCache.scala b/util-cache/src/main/scala/sbt/util/SeparatedCache.scala index c986bfdfc..fa1338599 100644 --- a/util-cache/src/main/scala/sbt/util/SeparatedCache.scala +++ b/util-cache/src/main/scala/sbt/util/SeparatedCache.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/main/scala/sbt/util/StampedFormat.scala b/util-cache/src/main/scala/sbt/util/StampedFormat.scala index eccb0f5bb..9ef4e8a5f 100644 --- a/util-cache/src/main/scala/sbt/util/StampedFormat.scala +++ b/util-cache/src/main/scala/sbt/util/StampedFormat.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/test/scala/CacheSpec.scala b/util-cache/src/test/scala/CacheSpec.scala index 6eab4cdaa..0365c8067 100644 --- a/util-cache/src/test/scala/CacheSpec.scala +++ b/util-cache/src/test/scala/CacheSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/test/scala/FileInfoSpec.scala b/util-cache/src/test/scala/FileInfoSpec.scala index 5ea495195..9ced623f2 100644 --- a/util-cache/src/test/scala/FileInfoSpec.scala +++ b/util-cache/src/test/scala/FileInfoSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-cache/src/test/scala/SingletonCacheSpec.scala b/util-cache/src/test/scala/SingletonCacheSpec.scala index ab6de3adb..8d6d16bb3 100644 --- a/util-cache/src/test/scala/SingletonCacheSpec.scala +++ b/util-cache/src/test/scala/SingletonCacheSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-tracking/src/main/scala/sbt/util/ChangeReport.scala b/util-tracking/src/main/scala/sbt/util/ChangeReport.scala index abbb3ac06..2f4254b5e 100644 --- a/util-tracking/src/main/scala/sbt/util/ChangeReport.scala +++ b/util-tracking/src/main/scala/sbt/util/ChangeReport.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-tracking/src/main/scala/sbt/util/FileFunction.scala b/util-tracking/src/main/scala/sbt/util/FileFunction.scala index 8ffea2008..beb953fc5 100644 --- a/util-tracking/src/main/scala/sbt/util/FileFunction.scala +++ b/util-tracking/src/main/scala/sbt/util/FileFunction.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-tracking/src/main/scala/sbt/util/Tracked.scala b/util-tracking/src/main/scala/sbt/util/Tracked.scala index b4bc765c1..fbde8e0a0 100644 --- a/util-tracking/src/main/scala/sbt/util/Tracked.scala +++ b/util-tracking/src/main/scala/sbt/util/Tracked.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/util-tracking/src/test/scala/sbt/util/TrackedSpec.scala b/util-tracking/src/test/scala/sbt/util/TrackedSpec.scala index 6c640a818..0e1550164 100644 --- a/util-tracking/src/test/scala/sbt/util/TrackedSpec.scala +++ b/util-tracking/src/test/scala/sbt/util/TrackedSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/main/java/xsbti/compile/ZincBridgeProvider.java b/zinc-lm-integration/src/main/java/xsbti/compile/ZincBridgeProvider.java index c0c1ca4e3..e7b9850ae 100644 --- a/zinc-lm-integration/src/main/java/xsbti/compile/ZincBridgeProvider.java +++ b/zinc-lm-integration/src/main/java/xsbti/compile/ZincBridgeProvider.java @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/Errors.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/Errors.scala index 35b344e6a..0d19dc24d 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/Errors.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/Errors.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/IfMissing.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/IfMissing.scala index 91aeb583c..7f3a60f8d 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/IfMissing.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/IfMissing.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ResourceLoader.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ResourceLoader.scala index d3c0f00b8..d097538ac 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ResourceLoader.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ResourceLoader.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala index de023d3c1..20a649275 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentManager.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentManager.scala index db5525a1a..dde22d8cd 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentManager.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentManager.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala index 3205052ef..31e558486 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala b/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala index e465c397a..d4245b7c4 100644 --- a/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala +++ b/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ diff --git a/zinc-lm-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala b/zinc-lm-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala index 1e0875a7b..bad241e51 100644 --- a/zinc-lm-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala +++ b/zinc-lm-integration/src/test/scala/sbt/internal/inc/ZincComponentCompilerSpec.scala @@ -1,6 +1,7 @@ /* * sbt - * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. * Copyright 2008 - 2010, Mark Harrah * Licensed under Apache License 2.0 (see LICENSE) */ From aeeee2f624a9aaac53d16df55b0b4560650f8f1f Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 20 Jun 2023 16:35:50 +0200 Subject: [PATCH 088/207] Remove vscode-sbt-scala extension Content has been archived here: https://github.com/sbt/vscode-sbt-scala --- vscode-sbt-scala/.vscode/launch.json | 33 - vscode-sbt-scala/.vscode/settings.json | 10 - vscode-sbt-scala/.vscode/tasks.json | 79 -- vscode-sbt-scala/client/.vscodeignore | 9 - vscode-sbt-scala/client/README.md | 9 - .../images/sbt-logo-bgwhite-455x262.png | Bin 7859 -> 0 bytes vscode-sbt-scala/client/images/sbt-logo.svg | 26 - .../client/language-configuration.json | 30 - vscode-sbt-scala/client/package-lock.json | 47 - vscode-sbt-scala/client/package.json | 54 - vscode-sbt-scala/client/src/extension.ts | 129 -- .../client/syntaxes/Scala.tmLanguage | 1262 ----------------- vscode-sbt-scala/client/tsconfig.json | 19 - vscode-sbt-scala/package-lock.json | 26 - vscode-sbt-scala/package.json | 26 - vscode-sbt-scala/server/package-lock.json | 41 - vscode-sbt-scala/server/package.json | 24 - vscode-sbt-scala/server/src/server.ts | 48 - vscode-sbt-scala/server/tsconfig.json | 17 - 19 files changed, 1889 deletions(-) delete mode 100644 vscode-sbt-scala/.vscode/launch.json delete mode 100644 vscode-sbt-scala/.vscode/settings.json delete mode 100644 vscode-sbt-scala/.vscode/tasks.json delete mode 100644 vscode-sbt-scala/client/.vscodeignore delete mode 100644 vscode-sbt-scala/client/README.md delete mode 100644 vscode-sbt-scala/client/images/sbt-logo-bgwhite-455x262.png delete mode 100644 vscode-sbt-scala/client/images/sbt-logo.svg delete mode 100644 vscode-sbt-scala/client/language-configuration.json delete mode 100644 vscode-sbt-scala/client/package-lock.json delete mode 100644 vscode-sbt-scala/client/package.json delete mode 100644 vscode-sbt-scala/client/src/extension.ts delete mode 100644 vscode-sbt-scala/client/syntaxes/Scala.tmLanguage delete mode 100644 vscode-sbt-scala/client/tsconfig.json delete mode 100644 vscode-sbt-scala/package-lock.json delete mode 100644 vscode-sbt-scala/package.json delete mode 100644 vscode-sbt-scala/server/package-lock.json delete mode 100644 vscode-sbt-scala/server/package.json delete mode 100644 vscode-sbt-scala/server/src/server.ts delete mode 100644 vscode-sbt-scala/server/tsconfig.json diff --git a/vscode-sbt-scala/.vscode/launch.json b/vscode-sbt-scala/.vscode/launch.json deleted file mode 100644 index 5201e0897..000000000 --- a/vscode-sbt-scala/.vscode/launch.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "version": "0.2.0", - // List of configurations. Add new configurations or edit existing ones. - "configurations": [ - { - "name": "Launch Client", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceRoot}/client" - ], - "stopOnEntry": false, - "sourceMaps": true, - "outFiles": [ - "${workspaceRoot}/client/out/**/*.js" - ] - // "preLaunchTask": "Client Watch" - }, - { - "name": "Attach to Server", - "type": "node", - "request": "attach", - "port": 6009, - "sourceMaps": true, - "outFiles": [ - "${workspaceRoot}/client/server/**/*.js" - ], - "protocol": "legacy" - // "preLaunchTask": "Server Watch" - } - ] -} \ No newline at end of file diff --git a/vscode-sbt-scala/.vscode/settings.json b/vscode-sbt-scala/.vscode/settings.json deleted file mode 100644 index ed40daef9..000000000 --- a/vscode-sbt-scala/.vscode/settings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "files.exclude": { - "out": false // set this to true to hide the "out" folder with the compiled JS files - }, - "search.exclude": { - "out": true // set this to false to include "out" folder in search results - }, - "typescript.tsdk": "./node_modules/typescript/lib", - "typescript.tsc.autoDetect": "off" -} \ No newline at end of file diff --git a/vscode-sbt-scala/.vscode/tasks.json b/vscode-sbt-scala/.vscode/tasks.json deleted file mode 100644 index 51026cd2d..000000000 --- a/vscode-sbt-scala/.vscode/tasks.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "taskName": "compile", - "dependsOn": [ - "compile:client", - "compile:server" - ], - "problemMatcher": [] - }, - { - "label": "compile:client", - "type": "npm", - "script": "compile:client", - "group": "build", - "presentation": { - "panel": "dedicated", - "reveal": "never" - }, - "problemMatcher": [ - "$tsc" - ] - }, - { - "label": "compile:server", - "type": "npm", - "script": "compile:server", - "group": "build", - "presentation": { - "panel": "dedicated", - "reveal": "never" - }, - "problemMatcher": [ - "$tsc" - ] - }, - { - "taskName": "watch", - "dependsOn": [ - "watch:client", - "watch:server" - ], - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [] - }, - { - "label": "watch:client", - "type": "npm", - "script": "watch:client", - "isBackground": true, - "group": "build", - "presentation": { - "panel": "dedicated", - "reveal": "never" - }, - "problemMatcher": [ - "$tsc-watch" - ] - }, - { - "label": "watch:server", - "type": "npm", - "script": "watch:server", - "isBackground": true, - "group": "build", - "presentation": { - "panel": "dedicated", - "reveal": "never" - }, - "problemMatcher": [ - "$tsc-watch" - ] - } - ] -} \ No newline at end of file diff --git a/vscode-sbt-scala/client/.vscodeignore b/vscode-sbt-scala/client/.vscodeignore deleted file mode 100644 index 93e28ff2f..000000000 --- a/vscode-sbt-scala/client/.vscodeignore +++ /dev/null @@ -1,9 +0,0 @@ -.vscode/** -typings/** -out/test/** -test/** -src/** -**/*.map -.gitignore -tsconfig.json -vsc-extension-quickstart.md diff --git a/vscode-sbt-scala/client/README.md b/vscode-sbt-scala/client/README.md deleted file mode 100644 index 01de59573..000000000 --- a/vscode-sbt-scala/client/README.md +++ /dev/null @@ -1,9 +0,0 @@ -Scala language support using sbt -================================ - -This is an experimental Scala language support using sbt as the language server. - -To try this, use sbt 1.1.0-RC1 or above. - -- Saving `*.scala` will trigger `compile` task. -- Jump to definition support for class names. diff --git a/vscode-sbt-scala/client/images/sbt-logo-bgwhite-455x262.png b/vscode-sbt-scala/client/images/sbt-logo-bgwhite-455x262.png deleted file mode 100644 index cce3269601ac01c3ce75167fedf466dc90c3ceaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7859 zcmZvBc|26{_xB)?Y-P)q(t@Eqdq_ei%V6#pWM8wBeaRMC5(-(8br^SMFvM80?_08r zB$6y;h-4YN=l1-l3|bMO6ZXZxJKJcBcYAL?D=#~ks;#@V-8n5+D+fCRJ1g4&&mOxwFxXi@>%J<= ze_}aXPutLVx=WGENN+>pVaA-RQPK^5r(Y~Krs!2iajDLZQHhw7Y!mlH1?dV(pZ)1# zyS%S28n22QiyEXyc-yPDbhB6ooStru)4f?!$g%Kc_wX0x_^Fw#t*y7y^0d7Z=RdOA z^!--K*;8s-U#(9RQK^F{9B=n4hr?jaAoPrfC@1{m2h9kBVR&FLO8|N)hl?wod{QYk z=@xqZ*+V+$n@jGd%T%XH^dVA^`IYHGxFwLVdS9Kflr;>XD{svRJ)B(%)v~_SFt%{% zWE(xSQ6)jD=xf_gjwAjvywFMM^PZv8wxKyYIkK##^98GUh%!DtPG}%l^~200bvVE3 zh*sF8=C;Wcd0h(HbGtoU9r({mOpCTYrNU|*h_I|$yvEO3O<-AWFU@x%?I#}yqJ5TKuV)7KIGvxS)i8wR zpNMir(Xlh38Mll9%jwW-hj%&oL?CL6DUAf``pgdo43A?s_?{3qK!U`>iE{l>*cB;F z4@pVEgh!Ppc%kMi8=gMb3BAd51J&^o6woxPvjQwR#6fyUr1O#RI1rkf`EM>HRmUVi zAN7w;E^dGhqW`Zdk2(O&(;>#?vOxRa?gpWS7@l7zpk>YA-JRUHd^j|(2(6A}g!U1z z1)zllmW}&peag(9AGGB;+(eHjS9(C0r?-bF&ELI$E4p8s!)yO3p| z8KqS9|8a5-_m98QT--mhlm0P7_t2IHIKd6Hw9pC*J4T=*6>(#txCr-iOE)<1^g)(oO z$EA06RI)exA5@Kw5H|d~Km3s@AjGYxK=Z{$yq#o}WV3V!z8t~tu{OB!BerJ z5xzy~)2qyyrb4d@(P?w6Kpu{TJ8GyO-djv7C7a>orE}63ibg{MLq3gcR{mrPByX^O z+B?j(K%)KVjCsU+{X|rr+73_ay-e^(TO>QiR6lC)`I=6|ij-uCHISTtSdhU^+08)y z--f%zO?HbJbrtF6skhzR=carnsk)3d>t)T&0TjlJo8`g(waxd<93| z&O2s!aWwZ5V93>*-#kji1oVwcf~F<}a6yyPnzg2q|8y4yM~BGB+!GjH)Y?A(CTn@M zz#?v#e75NnWJ)+I0P%!dUu46(1f#BWdYBWtx-$Kga_)UE3z%NQlA_^lmg@D$ouKnD zXXR3MWgKOtZxqv8x8kT#0?9pN+hDk{!T&+U9Gd0x z=FH_Yyv!AFZ0y#bfZr!eH2>xn$BP0#o0H%an43CKm%QLm)Kg4YnBjkgJ$oXg@#U06 ztNbTTsc8^NHDBNw;U3pCyq3y|e@~$9Sr=2YfB!~VX9o8+l^KppMEvl*`0Xra4M^18?4K?k&3D56IlE%!zV~Il&8^=E48FfwE$f@0>?pR( zP1kPBgE-*z*7?BE&c4Fn95wjaUv(f#Vv?*xzam+?jC( zwA2BrmCwEd+vWTwi9t0TVEGjKK4|dQ#MWHoxgnm!MlnUc9oP zV9TxyTRR+&ql&+pEg*&~99F7^Y2$|v)^dwa@{J0V@M}a)b%U+$uV5q@nK z18aS%^g;Xe-jX_T9%DeXGhgwevs&0W{7sd7Uc?m^ZUEaB;L6Nt z3%sy2$(7-pt9`-~0dHryXv(8Xp=TRPBkdU7p~a}_^H?)t4TlfG9?~hdrbJIzv}BXs zbCT?y#=>vir;NlN!xz28(RvQC@o#M1AfX*G-8S&XLqf=wLLAUxmn?Z%KXrJwT;>c| zx|ShNa8+9OmCTyL^dUbLt%{PREK5<`z{hQVBKGE8))haA$XWxxYmD|nY6J^|$18VFS!Mx0=dV-{z%?Is)-PT!%Flm^UwaAJ zmA6ychRI9VM~jkn_~nOQJWDG9r8hse-VDfP9)I331ouiJbfApfrrrfMxa{>Ti^1XI zr&yIk4mGz{6=xIg&1h&!P^wH(9Y`L-iMF4l*{VZyDuuqs&uCqV_E-PYQhb%4?Vs0J zp9qvb*xq$f?iEMvBfr}b4fMCmU=JRL%N~!u&zlZ!Fuy4ma;1OZE#YW9nv%Q4Kb`H%y&mQhB|01&Z=TQZ6GDP-PX1fx3 z54Zf=gR_%Md_Po9jy`GM_L%EyWm*KA0~SVH|9=@|wZ*{C>BiEaO#UN-=;B z1y+BQ=LtjBkYvt?zJBV=98-x2wFtamH^+j$QV%d%NXOAa534$Ug2F54`4mLc$H8|Z z?^nOS*6_0_sa@zo6H>~G)6xP;2O`;i)h4DPxU21NY3KCr{^712j`5m?%Y{ng&Q z6>Y%gWXwMEQ(Q1#PBBJh&Z|wyte28$37Dg?orz+%BEX>*8k1U{M?ra>$2)5XML*9n z#Uu>FQVG;v5jo5X0DQb3n@fGLN5 zF(EvU&v~_5c=RjL-R0G|g_WHDrgBz?l~6h8qdey&*F*6=!wYDcCSw$LmIj-ukLM^i zomu^ESZ*(lE@abz!>rRL&ti_1ha~Z-rs^?Gi?Bww>h$A(P9o?uCVmNhNX*LMa3T;V zB)#j3cgn^M8EgBF5+BL;%FkAUq()3omlF%i7~1%K7D4RR)WA{(nKM7%IMrIh=MU5A z9@(RvvY{5EHU1tVcNi5eDP;ouI5jkzdJ_@3AFhP`R_Iu&aSW@MR6GmgdjB+G@MUw z`89h~0B72A!#B>BVv-O6S0i2S((o|CKcf4St=uz<`bzua612VVLDP9QmY-yRqWA<{ z;vyBD9&u!3G4&xw9XnH%G`B4tg+`gkGXZbR)q!a1gQPyJ;rMx^9X>jpZPvi?cY;~G z>{~U}W>#^~NdkS@1`SBb-bXisn+ZDFaWIQ+>&GOe;InRa>45Vl8yMV<_!7~UJ!otG zED-H8|MTokHfxWiyj&be!WiBfsc8eMo!&?Jh|wxdJ%yq+a;d|0xLyQ7oCvy75M|_W zGKP)3b^k)s{)Uay!U>HBDrOJ>-{e_({)oM;n#D8~X(#sBMr!HaKuOT&ujLaE^la$J z)cC3W7!N;XL{sjB4Eha&gUR5Syi8p_4s5`Tl*oJcaaY5KJ$Gq3~=&{-j%|`R{5=g)uzpuqq<)M0;o%IJh$jl$Z$`;;CqoJO%O<(+jczP@XCA> zuSaAV1m(<(KVT%pEm7zIJUXz!uT$)O?NyDyOAUw1JLkW7tb7@dIZMN(*qwUXY0?xG(y7Y3ByZONR-b@jJ^q_1-$?Bdq~t}6Js0)GR&1D zN322FaJ}7fE%DfM_xI=Z36mc$J_m?TXfw~Y*kU&jixiAu?%46=({bRhLy?PUy7`+a z=uHwR8Ja}kIvuAU1auP(ocOAsK?r({K%OQBUk)1AWG|Vzp*$sJ04w#H9fR7Ay5w-c zhvcM65crH~njh;r2ys~=Lg}2hSZ+qo=_Q2IAx>=DHU-r`F zI)oS&6{~Y`y=fK7e;~I|(>h^7$$j#tkpWNV?LfPK;WVC39IU8zk{9t8#4zVJ00~ab zP>g~+6f^_E+*%oa5Gb&zq_S6lT#%E}s}l&`4L+BAXK_uA>LvJ|v?6QHfJlOwC;jud0G^t~mDDLEU>$ti{A28{iV`u3aK98+fr zPRPYgcI6P|%)rIB1#M zeCNjVPD0{shp2_3=6jL8Og(KCK|zTi0Z3SqkVE>F*9QJ@qK5+6KPP(7xDmYpVPvX8 z$EK>Dk#UzK5(VXp5%Qh;2mcTQAO9HVv8kxVTH}Fe=^&fWMdsI*M&0n9U|f&eu{f|B z9FAvzqS0l#227Bj!+x^N$njt2^&9PsepFJm5}(%zIGS{Woi@!a4z_|q^7{Jv)8pO{{W+noC8eLe+5ri5Ae2)LV1{<# zJrf9!<*w(XS1XkwGE3qJPNjlSR!aa8fzojd@Q(u(N~QU@ID$!3vKoeRb?f7R0rsY4 z&?9yI)GMuVpzc>6E;Ns7)$03ueJlpCk9{J+lj?xIDwMg-6Iss;`J79h`|vd^;dx~~ zu9x3R9Z*5rLPJH3q{l9YsrtN@+gslpDt)s%M4xi`b3?grI2W<5Ose@4@o^TRE+QXp zbpIo&;~i@`h!n^0yV(I;4~p$6PUIkkEXU^Mv;Jp@5x{&6Wjs8oM~J(^YLP)l9Q3lk zaKY`uNov|mL>uV!he^$_?2S7stEYeU8}nnB4sBq}82D5i*#mJOe6>>%vLh_tF@#H)?#r3wvo$=7>Hvmk`KnK<0n2!=$)vsd5A$x(#90lb(krA5*Ht+} zuPn*D*2nZuyg@#xNUZkZ`SW81b?5%+_}pNJ|MTrd^cVs^OuHA2k^ff>u>u&GW#hly zXf`<&)>bXdxzr+pYtDBPf3ec^5)GxwLywVilfhawK)hRcFnf9==F)M1uZY9>F$Hq< zP!zn%^l`k#3g>-{1AHoOu0_~-6N#aPD$vJ67FuVVnxb$Npcmw|1VuZgt7+deU`rjJ zfm-3~Oe91PnCCGY%OchLsRJB+`h)G~Lerhg7v+^F0;_c+i>i8`7F$IJomV3qzZVat z8)6fHl6mBwJW^@&{ngR8CN266b_3NeaUdtYJvVNpNg0jRyixU5?J|RYWU)y3frovv zvD$_tuRK%OdY&*RzC0gfs6U!qkqjarBub=_4)#yypL_2`^>-aOy3bM^3-sSA13Q0?R~-?eTdtUFe%q|p+IyNn!FG(@75=(N$Bn}F zqlg>+wN<7u6#5OtIDTDEd!%%_p7y$yJ(^JGx0qsvbd)Y)^2i!N=;X_eb?&DbU~yD! zQe41y`6q9wC$Etn7k3z^3cz9qeX%Rf_ESvlcRg7f!lQu7gDK|8!ijw{wrE;tqL zBc9WP8%?zZ)Nau4-s}_~gA`wzpfkQ|8pvn~%&R+3#6$F66LR&Ge+LCmp(2;eDsU&@ z&^K8~o$vqhm}# zzSu5N*C0{4iK5Q*g?}NWHq7UO%FJTOb=3C}S&vXv6zt(?vvTkW~CTF9_JoUQGPLe3|?NP{L8Kpy@jJk5L#_FHueV1a_5u z3+)g&DNeJg`DL%q>RtS%FXC3Qrkh_Qt8yzFp}l@0WMNQvqTANniFM;(rR{_*aEx*~ zuTi?AW#aDj$w^WFo-hB(K&X2qOd7S(3%sG{99ch*^`!2Gq+|?- zgF{f(D+!++K7-2EErUg&GuHkRx-m-9ZLE8l`ygJ9A;}6+1rNopL_N}q&7I7<>p`2I zd*PP+?>bIXHPiqm}TYCzYGbpb0Nf8%z21z3i2qyw782hL*r@L5CI%K7wea zFeqP6(C#F?(O?0jmDjoKY#9N>h^V69kB+*^1|74Y>UFhWyVJry%{@yu0<{kC598Tg zIyC!@q}}Xd0E{!g_Qm+cq~2OP2_3O6jSVhIpFatnVs1arg@hcWrf=!(FcJn{E6OdX4L$>xXUc9Py3lY<{D}jD7i-D#D{$AH~VwlA0B;Fqb-5 zrVmBsA$gA`F@aP2RBVio(mG@f1#XRXi?J(QRUeUgH3%ia;sG-y`$Nt1V>gF5T}hvc zUjry2Tl5PRWJTI=lO%!=m0AFL|KX_r8~z>g|6cA{?;6YD?QoNlu~%;<3A?o|tWX{4 z)X~|O+)FF^Hai9q>z>8=yNButwtw@6m#{HPJ)0Q1;}2hgU=c1FL^oa>yxTbi>jMTS1cgFyw-*e>Y#EQ z|Dr2ZwYIo)^vGYI=JsZom>kjZ8ZTj0BF$U!+Q95@9B4syWkH^HD1429V9&4mP6TxG zaTwjH=R?GBATg})&)#s>?0)sWHM<#UXtd8DrOuSDyH`GP>}dXSDkG(0YC+8h_oVqr znToRy%%-SvOQ_npiht~uyM&Znv9)!)foq1)1?-FM1(l+-8 zBOHtSCZ=w@xi@T)_zoMXmt)Z~Bd;kDtDNp7HC?nM;@0?oan(P}r_B7ii5{pOaM2Q{)-pvS|2&Ljqihn$hxb(*Lo~83V}T1?~t6W-PC&IbzL^ zrbNkka7nDx^qmj5y44==SIn^#xH$oQ;nPP3hr(7nCWNw##q%NDkhOlh&6?w6o<-Nb zJ>$kAREPb80ZL6ToDDqgr+Hyty`>dA4wbIi?{G_TyDbaVl(jduE-)7-9HcPAwL zo@(s_qwe0Gd}27OPk4QHkn)4}U|z^FLHKV%BH=&v@h`2@45YIs%uJm~3ObwD=1Xl% zW#$}#$kdJvsN_5lM@-SXu*ROyXT>f0XlDvVJXpOrw&HkyuhNnTT?)v-MHtXppAhys zCKT7DmGaP6YNX|5@&nzl=BDD4+_7ZE53}~i`&s0Y@{hx^c};44Ty=CMQ|u|NQ3aDG zE9zBCzu1YA!Z4SLsPZ)Pe@FmZIbI5syfzJBh>@a!7X zy^Ds$I>DrdC(m62oEcQH3A%WR~YoXU4CZ%W+PtjqgdZmt=MIUT<}Giv zDJ%;9mSR?6#N#~G8KI_Gv=)UBY`K!c5DtXf`c{))&lZeUj<}FuK07_dzfQD(ux@WW zVb;WzRx*6@4b(pK#-I3;^B5}nV0gqk0~fB;0(t79Y(u<%C8D>X;hM_pvROsfN&|`D zn)Ge*vw|yU66v9SmO&X5?AW6|Loqa@CN?;(MI35@3CA%=K8(ljU_~Psq%MshZ4AXH znKS)tQDXBqK-0K*(Rr~m)} diff --git a/vscode-sbt-scala/client/images/sbt-logo.svg b/vscode-sbt-scala/client/images/sbt-logo.svg deleted file mode 100644 index d028d0540..000000000 --- a/vscode-sbt-scala/client/images/sbt-logo.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - diff --git a/vscode-sbt-scala/client/language-configuration.json b/vscode-sbt-scala/client/language-configuration.json deleted file mode 100644 index aa2571000..000000000 --- a/vscode-sbt-scala/client/language-configuration.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "//", - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": [ "/*", "*/" ] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ], - // symbols that that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ] -} \ No newline at end of file diff --git a/vscode-sbt-scala/client/package-lock.json b/vscode-sbt-scala/client/package-lock.json deleted file mode 100644 index 75dc4fb56..000000000 --- a/vscode-sbt-scala/client/package-lock.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "vscode-sbt-scala", - "version": "0.2.4", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/vscode": { - "version": "1.34.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.34.0.tgz", - "integrity": "sha512-t81rGr6aFw8TMap7UJdikC5ilOtL0yNr/pkovyyTy31fZ4XJehrxLMRh8nJuoOF3+g4rG9ljmtQo7tm6wyoaYA==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "vscode-jsonrpc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz", - "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==" - }, - "vscode-languageclient": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-5.2.1.tgz", - "integrity": "sha512-7jrS/9WnV0ruqPamN1nE7qCxn0phkH5LjSgSp9h6qoJGoeAKzwKz/PF6M+iGA/aklx4GLZg1prddhEPQtuXI1Q==", - "requires": { - "semver": "^5.5.0", - "vscode-languageserver-protocol": "3.14.1" - } - }, - "vscode-languageserver-protocol": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz", - "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==", - "requires": { - "vscode-jsonrpc": "^4.0.0", - "vscode-languageserver-types": "3.14.0" - } - }, - "vscode-languageserver-types": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz", - "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==" - } - } -} diff --git a/vscode-sbt-scala/client/package.json b/vscode-sbt-scala/client/package.json deleted file mode 100644 index 15736ae67..000000000 --- a/vscode-sbt-scala/client/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "vscode-sbt-scala", - "displayName": "Scala (sbt)", - "version": "0.2.4", - "author": "Lightbend, Inc.", - "license": "BSD-3-Clause", - "publisher": "lightbend", - "repository": { - "type": "git", - "url": "https://github.com/sbt/sbt" - }, - "description": "Scala language support using sbt", - "icon": "images/sbt-logo-bgwhite-455x262.png", - "engines": { - "vscode": "^1.23.0" - }, - "categories": [ - "Languages" - ], - "contributes": { - "languages": [ - { - "id": "scala", - "aliases": [ - "Scala", - "scala" - ], - "extensions": [ - ".scala", - ".sbt" - ], - "configuration": "./language-configuration.json" - } - ], - "grammars": [ - { - "language": "scala", - "scopeName": "source.scala", - "path": "./syntaxes/Scala.tmLanguage" - } - ] - }, - "activationEvents": [ - "workspaceContains:build.sbt" - ], - "main": "./out/src/extension", - "scripts": {}, - "dependencies": { - "vscode-languageclient": "^5.2.1" - }, - "devDependencies": { - "@types/vscode": "^1.32.0" - } -} diff --git a/vscode-sbt-scala/client/src/extension.ts b/vscode-sbt-scala/client/src/extension.ts deleted file mode 100644 index 4ccebed75..000000000 --- a/vscode-sbt-scala/client/src/extension.ts +++ /dev/null @@ -1,129 +0,0 @@ -'use strict'; - -import * as path from 'path'; -import * as url from 'url'; -import * as net from 'net'; -let fs = require('fs'), - os = require('os'); -import * as vscode from 'vscode'; -import { ExtensionContext, workspace } from 'vscode'; // workspace, -import { - LanguageClient, - LanguageClientOptions, - RevealOutputChannelOn, - ServerOptions, - TransportKind -} from 'vscode-languageclient'; - -let terminal: vscode.Terminal = null; - -function delay(ms: number) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -export async function deactivate() { - if (terminal != null) { - terminal.sendText("exit"); - await delay(1000); - terminal.dispose(); - } -} - -export async function activate(context: ExtensionContext) { - // Start sbt - terminal = vscode.window.createTerminal(`sbt`); - terminal.show(); - terminal.sendText("sbt"); - // Wait for sbt server to start - let retries = 60; - while (retries > 0) { - retries--; - await delay(1000); - if (isServerUp()) { - break; - } - } - - // The server is implemented in node - let serverModule = context.asAbsolutePath(path.join('server', 'server.js')); - // The debug options for the server - // let debugOptions = { execArgv: ["--nolazy", "--debug=6009"] }; - - // If the extension is launched in debug mode then the debug server options are used - // Otherwise the run options are used - let serverOptions: ServerOptions = { - run : { module: serverModule, transport: TransportKind.stdio }, - debug: { module: serverModule, transport: TransportKind.stdio } - } - - // Options to control the language client - let clientOptions: LanguageClientOptions = { - documentSelector: [{ language: 'scala', scheme: 'file' }, { language: 'java', scheme: 'file' }], - revealOutputChannelOn: RevealOutputChannelOn.Never, - initializationOptions: () => { - return discoverToken(); - } - } - - // Don't start VS Code connection until sbt server is confirmed to be up and running. - function isServerUp(): boolean { - let isFileThere = fs.existsSync(path.join(workspace.rootPath, 'project', 'target', 'active.json')); - if (!isFileThere) { - return false; - } else { - let skt = new net.Socket(); - try { - connectSocket(skt); - } catch(e) { - return false; - } - skt.end(); - return true; - } - } - - function connectSocket(socket: net.Socket):  net.Socket { - let u = discoverUrl(); - // let socket = net.Socket(); - if (u.protocol == 'tcp:') { - socket.connect(+u.port, '127.0.0.1'); - } else if (u.protocol == 'local:' && os.platform() == 'win32') { - let pipePath = '\\\\.\\pipe\\' + u.hostname; - socket.connect(pipePath); - } else if (u.protocol == 'local:') { - socket.connect(u.path); - } else { - throw 'Unknown protocol ' + u.protocol; - } - return socket; - } - - // the port file is hardcoded to a particular location relative to the build. - function discoverUrl(): url.Url { - let pf = path.join(process.cwd(), 'project', 'target', 'active.json'); - let portfile = JSON.parse(fs.readFileSync(pf)); - return url.parse(portfile.uri); - } - - // the port file is hardcoded to a particular location relative to the build. - function discoverToken(): any { - let pf = path.join(workspace.rootPath, 'project', 'target', 'active.json'); - let portfile = JSON.parse(fs.readFileSync(pf)); - - // if tokenfilepath exists, return the token. - if (portfile.hasOwnProperty('tokenfilePath')) { - let tf = portfile.tokenfilePath; - let tokenfile = JSON.parse(fs.readFileSync(tf)); - return { - token: tokenfile.token - }; - } else { - return {}; - } - } - - // Create the language client and start the client. - let disposable = new LanguageClient('lspSbtScala', 'sbt Scala Language Server', serverOptions, clientOptions).start(); - - context.subscriptions.push(disposable); -} diff --git a/vscode-sbt-scala/client/syntaxes/Scala.tmLanguage b/vscode-sbt-scala/client/syntaxes/Scala.tmLanguage deleted file mode 100644 index aee49eaf0..000000000 --- a/vscode-sbt-scala/client/syntaxes/Scala.tmLanguage +++ /dev/null @@ -1,1262 +0,0 @@ - - - - - fileTypes - - scala - - firstLineMatch - ^#!/.*\b\w*scala\b - foldingStartMarker - /\*\*|\{\s*$ - foldingStopMarker - \*\*/|^\s*\} - keyEquivalent - ^~S - name - Scala - patterns - - - include - #code - - - repository - - block-comments - - begin - /\* - end - \*/ - name - comment.block.scala - patterns - - - include - #block-comments - - - match - (?x) - (?! /\*) - (?! \*/) - - - - - char-literal - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.character.begin.scala - - - end - ' - endCaptures - - 0 - - name - punctuation.definition.character.end.scala - - - name - constant.character.literal.scala - patterns - - - match - \\(?:[btnfr\\"']|[0-7]{1,3}|u[0-9A-Fa-f]{4}) - name - constant.character.escape.scala - - - match - \\. - name - invalid.illegal.unrecognized-character-escape.scala - - - match - [^']{2,} - name - invalid.illegal.character-literal-too-long - - - match - (?<!')[^'] - name - invalid.illegal.character-literal-too-long - - - - code - - patterns - - - include - #script-header - - - include - #storage-modifiers - - - include - #declarations - - - include - #inheritance - - - include - #imports - - - include - #comments - - - include - #strings - - - include - #initialization - - - include - #xml-literal - - - include - #keywords - - - include - #constants - - - include - #scala-symbol - - - include - #special-identifier - - - include - #char-literal - - - include - #empty-parentheses - - - include - #parameter-list - - - include - #qualifiedClassName - - - include - #meta-brackets - - - include - #meta-bounds - - - include - #meta-colons - - - - comments - - patterns - - - captures - - 0 - - name - punctuation.definition.comment.scala - - - match - /\*\*/ - name - comment.block.empty.scala - - - begin - ^\s*(/\*\*)(?!/) - beginCaptures - - 1 - - name - punctuation.definition.comment.scala - - - end - \*/ - endCaptures - - 0 - - name - punctuation.definition.comment.scala - - - name - comment.block.documentation.scala - patterns - - - captures - - 1 - - name - keyword.other.documentation.scaladoc.scala - - 2 - - name - variable.parameter.scala - - - match - (@param)\s+(\S+) - - - captures - - 1 - - name - keyword.other.documentation.scaladoc.scala - - 2 - - name - entity.name.class - - - match - (@(?:tparam|throws))\s+(\S+) - - - match - @(return|see|note|example|usecase|author|version|since|todo|deprecated|migration|define|inheritdoc)\b - name - keyword.other.documentation.scaladoc.scala - - - captures - - 1 - - name - punctuation.definition.documentation.link.scala - - 2 - - name - entity.other.documentation.link.scala - - 3 - - name - punctuation.definition.documentation.link.scala - - - match - (\[\[)([^\]]+)(\]\]) - - - - - begin - /\* - captures - - 0 - - name - punctuation.definition.comment.scala - - - end - \*/ - name - comment.block.scala - - - begin - (^[ \t]+)?(?=//) - beginCaptures - - 1 - - name - punctuation.whitespace.comment.leading.scala - - - end - (?!\G) - patterns - - - begin - // - beginCaptures - - 0 - - name - punctuation.definition.comment.scala - - - end - \n - name - comment.line.double-slash.scala - - - - - - constants - - patterns - - - match - \b(false|null|true|Nil|None)\b - name - constant.language.scala - - - match - \b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.[0-9]+)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?|[0-9]+)([LlFfDd]|UL|ul)?\b - name - constant.numeric.scala - - - match - \b(this|super|self)\b - name - variable.language.scala - - - match - \b(Unit|Boolean|Byte|Char|Short|Int|Float|Long|Double)\b - name - storage.type.primitive.scala - - - match - \b(String|Symbol)\b - name - storage.type.scala - - - - declarations - - patterns - - - captures - - 1 - - name - keyword.declaration.scala - - 2 - - name - entity.name.function.declaration - - - match - (?x) - \b(def)\s+ - (`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*(?:_[^\t .,;()\[\]{}'"`\w])(?=[(\t ])|[_$a-zA-Z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+) - - - captures - - 1 - - name - keyword.declaration.scala - - 2 - - name - keyword.declaration.scala - - 3 - - name - entity.name.class.declaration - - - match - (case)?\b(class|trait|object)\s+([^\s\{\(\[]+) - - - captures - - 1 - - name - keyword.declaration.scala - - 2 - - name - entity.name.type.declaration - - - match - \b(type)\s+(`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*(?:_[^\s])(?=[\t ])|[_$a-zA-Z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+) - - - captures - - 1 - - name - keyword.declaration.stable.scala - - 2 - - name - constant.other.declaration.scala - - - match - \b(val)\s+(?:([A-Z][_a-zA-Z0-9]*))\b - - - captures - - 1 - - name - keyword.declaration.stable.scala - - 2 - - name - keyword.declaration.volatile.scala - - 3 - - name - variable.other.declaration.scala - - - match - \b(?:(val)|(var))\s+(?:(`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*(?:_[^\t .,;()\[\]{}'"`\w])(?=[\t ])|[_$a-zA-Z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+)|(?=\()) - - - captures - - 1 - - name - keyword.other.scoping.scala - - 2 - - name - keyword.declaration.scala - - 3 - - name - entity.name.class.declaration - - - match - \b(package)\s+(object)\s+([^\s\{\(\[]+) - - - begin - \b(package)\s+ - beginCaptures - - 1 - - name - keyword.other.import.scala - - - end - (?<=[\n;]) - name - meta.package.scala - patterns - - - include - #comments - - - match - (`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*) - name - entity.name.package.scala - - - match - \. - name - punctuation.definition.package - - - - - - empty-parentheses - - captures - - 1 - - name - meta.bracket.scala - - - match - (\(\)) - name - meta.parentheses.scala - - imports - - begin - \b(import)\s+ - beginCaptures - - 1 - - name - keyword.other.import.scala - - - end - (?<=[\n;]) - name - meta.import.scala - patterns - - - include - #comments - - - match - (`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*) - name - entity.name.import.scala - - - match - \. - name - punctuation.definition.import - - - begin - { - beginCaptures - - 0 - - name - meta.bracket.scala - - - end - } - endCaptures - - 0 - - name - meta.bracket.scala - - - name - meta.import.selector.scala - patterns - - - captures - - 1 - - name - entity.name.import.renamed-from.scala - - 2 - - name - keyword.other.arrow.scala - - 3 - - name - entity.name.import.renamed-to.scala - - - match - (?x) \s* - (`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*) \s* - (=>) \s* - (`[^`]+`|[_$a-zA-Z][_$a-zA-Z0-9]*) \s* - - - - match - ([^\s.,}]+) - name - entity.name.import.scala - - - - - - inheritance - - patterns - - - captures - - 1 - - name - keyword.declaration.scala - - 2 - - name - entity.other.inherited-class.scala - - - match - (extends|with)\s+([^\s\{\(\[\]]+) - - - - initialization - - captures - - 1 - - name - keyword.declaration.scala - - 2 - - name - entity.name.class - - - match - \b(new)\s+([^\s,\{\}\(\)\[\]]+) - - keywords - - patterns - - - match - \b(return|throw)\b - name - keyword.control.flow.jump.scala - - - match - \b(classOf|isInstanceOf|asInstanceOf)\b - name - support.function.type-of.scala - - - match - \b(else|if|do|while|for|yield|match|case)\b - name - keyword.control.flow.scala - - - match - \b(catch|finally|try)\b - name - keyword.control.exception.scala - - - match - (==?|!=|<=|>=|<>|<|>) - name - keyword.operator.comparison.scala - - - match - (\-|\+|\*|/(?![/*])|%|~) - name - keyword.operator.arithmetic.scala - - - match - (!|&&|\|\|) - name - keyword.operator.logical.scala - - - match - (<-|←|->|→|=>|⇒|\?|\:+|@|\|)+ - name - keyword.operator.scala - - - - meta-bounds - - comment - For themes: Matching view bounds - match - <%|=:=|<:<|<%<|>:|<: - name - meta.bounds.scala - - meta-brackets - - comment - For themes: Brackets look nice when colored. - patterns - - - comment - The punctuation.section.*.begin is needed for return snippet in source bundle - match - \{ - name - punctuation.section.block.begin.scala - - - comment - The punctuation.section.*.end is needed for return snippet in source bundle - match - \} - name - punctuation.section.block.end.scala - - - match - {|}|\(|\)|\[|\] - name - meta.bracket.scala - - - - meta-colons - - comment - For themes: Matching type colons - patterns - - - match - (?<!:):(?!:) - name - meta.colon.scala - - - - parameter-list - - patterns - - - captures - - 1 - - name - variable.parameter.scala - - 2 - - name - meta.colon.scala - - - comment - We do not match param names that start with a Capitol letter - match - (?<=[^\._$a-zA-Z0-9])(`[^`]+`|[_$a-z][_$a-zA-Z0-9]*(?:_[^\s])(?=[\t ])|[_$a-z][_$a-zA-Z0-9]*|[-?~><^+*%:!#|/@\\]+)\s*(:)\s+ - - - - qualifiedClassName - - captures - - 1 - - name - entity.name.class - - - match - (\b([A-Z][\w]*)) - - scala-symbol - - match - '\w+(?=[^'\w]|$) - name - constant.other.symbol.scala - - script-header - - captures - - 1 - - name - string.unquoted.shebang.scala - - - match - ^#!(.*)$ - name - comment.block.shebang.scala - - special-identifier - - comment - - Match special scala style identifiers that can end with and underscore and - a a not letter such as blank_?. This way the symbol will not be colored - differently. - - match - \b[_$a-zA-Z][_$a-zA-Z0-9]*(?:_[^\t .,;()\[\]{}'"`\w]) - - storage-modifiers - - patterns - - - match - \b(private\[\S+\]|protected\[\S+\]|private|protected)\b - name - storage.modifier.access - - - match - \b(synchronized|@volatile|abstract|final|lazy|sealed|implicit|override|@transient|@native)\b - name - storage.modifier.other - - - - strings - - patterns - - - begin - """ - beginCaptures - - 0 - - name - punctuation.definition.string.begin.scala - - - end - """(?!") - endCaptures - - 0 - - name - punctuation.definition.string.end.scala - - - name - string.quoted.triple.scala - patterns - - - match - \\\\|\\u[0-9A-Fa-f]{4} - name - constant.character.escape.scala - - - - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.scala - - - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.scala - - - name - string.quoted.double.scala - patterns - - - match - \\(?:[btnfr\\"']|[0-7]{1,3}|u[0-9A-Fa-f]{4}) - name - constant.character.escape.scala - - - match - \\. - name - invalid.illegal.unrecognized-string-escape.scala - - - - - - xml-doublequotedString - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.xml - - - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.xml - - - name - string.quoted.double.xml - patterns - - - include - #xml-entity - - - - xml-embedded-content - - patterns - - - begin - { - captures - - 0 - - name - meta.bracket.scala - - - end - } - name - meta.source.embedded.scala - patterns - - - include - #code - - - - - captures - - 1 - - name - entity.other.attribute-name.namespace.xml - - 2 - - name - entity.other.attribute-name.xml - - 3 - - name - punctuation.separator.namespace.xml - - 4 - - name - entity.other.attribute-name.localname.xml - - - match - (?:([-_a-zA-Z0-9]+)((:)))?([_a-zA-Z-]+)= - - - include - #xml-doublequotedString - - - include - #xml-singlequotedString - - - - xml-entity - - captures - - 1 - - name - punctuation.definition.constant.xml - - 3 - - name - punctuation.definition.constant.xml - - - match - (&)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;) - name - constant.character.entity.xml - - xml-literal - - patterns - - - begin - (<)((?:([_a-zA-Z0-9][_a-zA-Z0-9]*)((:)))?([_a-zA-Z0-9][-_a-zA-Z0-9:]*))(?=(\s[^>]*)?></\2>) - beginCaptures - - 1 - - name - punctuation.definition.tag.xml - - 3 - - name - entity.name.tag.namespace.xml - - 4 - - name - entity.name.tag.xml - - 5 - - name - punctuation.separator.namespace.xml - - 6 - - name - entity.name.tag.localname.xml - - - comment - We do not allow a tag name to start with a - since this would - likely conflict with the <- operator. This is not very common - for tag names anyway. Also code such as -- if (val <val2 || val> val3) - will falsly be recognized as an xml tag. The solution is to put a - space on either side of the comparison operator - end - (>(<))/(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]*[_a-zA-Z0-9])(>) - endCaptures - - 1 - - name - punctuation.definition.tag.xml - - 2 - - name - meta.scope.between-tag-pair.xml - - 3 - - name - entity.name.tag.namespace.xml - - 4 - - name - entity.name.tag.xml - - 5 - - name - punctuation.separator.namespace.xml - - 6 - - name - entity.name.tag.localname.xml - - 7 - - name - punctuation.definition.tag.xml - - - name - meta.tag.no-content.xml - patterns - - - include - #xml-embedded-content - - - - - begin - (</?)(?:([_a-zA-Z0-9][-_a-zA-Z0-9]*)((:)))?([_a-zA-Z0-9][-_a-zA-Z0-9:]*)(?=[^>]*?>) - captures - - 1 - - name - punctuation.definition.tag.xml - - 2 - - name - entity.name.tag.namespace.xml - - 3 - - name - entity.name.tag.xml - - 4 - - name - punctuation.separator.namespace.xml - - 5 - - name - entity.name.tag.localname.xml - - - end - (/?>) - name - meta.tag.xml - patterns - - - include - #xml-embedded-content - - - - - include - #xml-entity - - - - xml-singlequotedString - - begin - ' - beginCaptures - - 0 - - name - punctuation.definition.string.begin.xml - - - end - ' - endCaptures - - 0 - - name - punctuation.definition.string.end.xml - - - name - string.quoted.single.xml - patterns - - - include - #xml-entity - - - - - scopeName - source.scala - uuid - 158C0929-299A-40C8-8D89-316BE0C446E8 - - diff --git a/vscode-sbt-scala/client/tsconfig.json b/vscode-sbt-scala/client/tsconfig.json deleted file mode 100644 index c10ad282c..000000000 --- a/vscode-sbt-scala/client/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "target": "es6", - "module": "commonjs", - "moduleResolution": "node", - "rootDir": ".", - "outDir": "out", - "lib": [ "es2016" ], - "sourceMap": true - }, - "exclude": [ - "node_modules", - "server" - ] -} \ No newline at end of file diff --git a/vscode-sbt-scala/package-lock.json b/vscode-sbt-scala/package-lock.json deleted file mode 100644 index f0c985121..000000000 --- a/vscode-sbt-scala/package-lock.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "vscode-sbt-scala", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "@types/node": { - "version": "7.0.69", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.69.tgz", - "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==", - "dev": true - }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - } - } -} diff --git a/vscode-sbt-scala/package.json b/vscode-sbt-scala/package.json deleted file mode 100644 index ded6ee6d6..000000000 --- a/vscode-sbt-scala/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "vscode-sbt-scala", - "displayName": "Scala (sbt)", - "version": "0.0.1", - "author": "Lightbend, Inc.", - "license": "BSD-3-Clause", - "publisher": "lightbend", - "description": "Scala language support for Visual Studio Code using sbt", - "repository": { - "type": "git", - "url": "https://github.com/sbt/sbt" - }, - "scripts": { - "postinstall": "cd server && npm install && cd ../client && npm install && cd ..", - "compile": "tsc -p client/tsconfig.json && cd server && npm run installServer && cd .. && tsc -p server/tsconfig.json", - "compile:client": "tsc -p client/tsconfig.json", - "watch:client": "tsc -w -p client/tsconfig.json", - "compile:server": "cd server && npm run installServer && cd .. && tsc -p server/tsconfig.json", - "watch:server": "cd server && npm run installServer && cd .. && tsc -w -p server/tsconfig.json" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^7.0.69", - "typescript": "^2.9.2" - } -} diff --git a/vscode-sbt-scala/server/package-lock.json b/vscode-sbt-scala/server/package-lock.json deleted file mode 100644 index bfe7026f9..000000000 --- a/vscode-sbt-scala/server/package-lock.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "vscode-sbt-scala", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "vscode-jsonrpc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz", - "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==" - }, - "vscode-languageserver": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz", - "integrity": "sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A==", - "requires": { - "vscode-languageserver-protocol": "3.14.1", - "vscode-uri": "^1.0.6" - } - }, - "vscode-languageserver-protocol": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz", - "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==", - "requires": { - "vscode-jsonrpc": "^4.0.0", - "vscode-languageserver-types": "3.14.0" - } - }, - "vscode-languageserver-types": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz", - "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==" - }, - "vscode-uri": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.6.tgz", - "integrity": "sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww==" - } - } -} diff --git a/vscode-sbt-scala/server/package.json b/vscode-sbt-scala/server/package.json deleted file mode 100644 index d37750e03..000000000 --- a/vscode-sbt-scala/server/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "vscode-sbt-scala", - "displayName": "Scala (sbt)", - "version": "0.0.1", - "author": "Lightbend, Inc.", - "license": "BSD-3-Clause", - "publisher": "lightbend", - "description": "Relay server to sbt server.", - "repository": { - "type": "git", - "url": "https://github.com/sbt/sbt" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "vscode-languageserver": "^5.2.1" - }, - "scripts": { - "installServer": "installServerIntoExtension ../client ./package.json ./tsconfig.json", - "compile": "installServerIntoExtension ../client ./package.json ./tsconfig.json && tsc -p .", - "watch": "installServerIntoExtension ../client ./package.json ./tsconfig.json && tsc -w -p ." - } -} diff --git a/vscode-sbt-scala/server/src/server.ts b/vscode-sbt-scala/server/src/server.ts deleted file mode 100644 index 8404c7b74..000000000 --- a/vscode-sbt-scala/server/src/server.ts +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -import * as path from 'path'; -import * as url from 'url'; -import * as net from 'net'; -let fs = require('fs'), - os = require('os'), - stdin = process.stdin, - stdout = process.stdout; - -let socket = new net.Socket(); -socket.on('data', (chunk: any) => { - // send it back to stdout - stdout.write(chunk); -}).on('end', () => { - stdin.pause(); -}); -connectSocket(socket); - -stdin.resume(); -stdin.on('data', (chunk: any) => { - socket.write(chunk); -}).on('end', () => { - socket.end(); -}); - -function connectSocket(socket: net.Socket): net.Socket { - let u = discoverUrl(); - // let socket = net.Socket(); - if (u.protocol == 'tcp:') { - socket.connect(+u.port, '127.0.0.1'); - } else if (u.protocol == 'local:' && os.platform() == 'win32') { - let pipePath = '\\\\.\\pipe\\' + u.hostname; - socket.connect(pipePath); - } else if (u.protocol == 'local:') { - socket.connect(u.path); - } else { - throw 'Unknown protocol ' + u.protocol; - } - return socket; -} - -// the port file is hardcoded to a particular location relative to the build. -function discoverUrl(): url.Url { - let pf = path.join(process.cwd(), 'project', 'target', 'active.json'); - let portfile = JSON.parse(fs.readFileSync(pf)); - return url.parse(portfile.uri); -} diff --git a/vscode-sbt-scala/server/tsconfig.json b/vscode-sbt-scala/server/tsconfig.json deleted file mode 100644 index 1ae7a021a..000000000 --- a/vscode-sbt-scala/server/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "target": "es6", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "lib" : [ "es2016" ], - "outDir": "../client/server" - }, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file From 74be55d0f69a3db5d4d859e1d98d87b0715aeaed Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sat, 24 Jun 2023 10:15:49 +0900 Subject: [PATCH 089/207] update scala versions in scripted test --- sbt-app/src/sbt-test/actions/cross-advanced/build.sbt | 6 +++--- sbt-app/src/sbt-test/actions/cross-advanced/test | 2 +- sbt-app/src/sbt-test/actions/cross-incremental/build.sbt | 4 ++-- sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt | 2 +- sbt-app/src/sbt-test/actions/cross-multi-parser/test | 4 ++-- sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt | 4 ++-- sbt-app/src/sbt-test/actions/cross-multiproject/test | 6 +++--- .../src/sbt-test/actions/cross-strict-aggregation/build.sbt | 2 +- sbt-app/src/sbt-test/actions/cross-strict-aggregation/test | 2 +- sbt-app/src/sbt-test/actions/doc-file-options/build.sbt | 2 +- sbt-app/src/sbt-test/actions/doc/build.sbt | 4 ++-- sbt-app/src/sbt-test/actions/doc/test | 2 +- sbt-app/src/sbt-test/actions/generator/build.sbt | 2 +- sbt-app/src/sbt-test/actions/multi-command/build.sbt | 2 +- sbt-app/src/sbt-test/actions/multi-command/test | 2 +- .../src/sbt-test/actions/remote-cache-semanticdb/build.sbt | 2 +- sbt-app/src/sbt-test/actions/remote-cache/build.sbt | 2 +- .../sbt-test/classloader-cache/akka-actor-system/build.sbt | 2 +- sbt-app/src/sbt-test/classloader-cache/jni/build.sbt | 2 +- .../sbt-test/classloader-cache/library-mismatch/build.sbt | 2 +- .../src/sbt-test/classloader-cache/runtime-layers/build.sbt | 2 +- sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt | 2 +- .../0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom | 2 +- .../0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom | 2 +- sbt-app/src/sbt-test/classloader-cache/spark/build.sbt | 2 +- sbt-app/src/sbt-test/classloader-cache/utest/build.sbt | 2 +- .../compiler-project/error-in-invalidated/build.sbt | 2 +- .../compiler-project/separate-analysis-per-scala/build.sbt | 4 ++-- .../src/sbt-test/console/project-compiler-bridge/build.sbt | 2 +- .../console/project-compiler-bridge/project/build.sbt | 2 +- .../src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt | 2 +- .../whatDependsOn-without-previous-initialization/build.sbt | 2 +- .../src/sbt-test/dependency-graph/whatDependsOn/build.sbt | 2 +- .../src/sbt-test/dependency-management/artifact/build.sbt | 2 +- .../dependency-management/cache-classifiers/multi.sbt | 2 +- .../cached-resolution-interproj/multi.sbt | 2 +- .../dependency-management/compiler-bridge-binary/build.sbt | 2 +- .../dependency-management/conflict-coursier/build.sbt | 2 +- .../src/sbt-test/dependency-management/cp-order/build.sbt | 2 +- .../sbt-test/dependency-management/credentials/build.sbt | 2 +- .../dependency-management/evicted-semver-spec/build.sbt | 2 +- .../sbt-test/dependency-management/global-plugins/build.sbt | 2 +- .../src/sbt-test/dependency-management/missingok/build.sbt | 2 +- .../sbt-test/dependency-management/snapshot-local/build.sbt | 2 +- .../dependency-management/snapshot-resolution/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/hydra/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt | 2 +- sbt-app/src/sbt-test/project/aggregate/projA/build.sbt | 2 +- .../src/sbt-test/project/cross-plugins-defaults/build.sbt | 4 ++-- sbt-app/src/sbt-test/project/flatten/build.sbt | 2 +- sbt-app/src/sbt-test/project/internal-tracking/build.sbt | 2 +- sbt-app/src/sbt-test/project/val-order/build.sbt | 2 +- sbt-app/src/sbt-test/source-dependencies/binary/build.sbt | 2 +- sbt-app/src/sbt-test/source-dependencies/constants/test | 2 +- sbt-app/src/sbt-test/source-dependencies/cross-source/test | 2 +- .../sbt-test/source-dependencies/macro-annotation/build.sbt | 2 +- .../source-dependencies/macro-arg-dep-nested/build.sbt | 2 +- .../macro-arg-dep-stackoverflow/build.sbt | 2 +- .../sbt-test/source-dependencies/macro-arg-dep/build.sbt | 2 +- sbt-app/src/sbt-test/source-dependencies/macro/build.sbt | 2 +- .../sbt-test/source-dependencies/pipelining-java/build.sbt | 2 +- .../src/sbt-test/source-dependencies/pipelining/build.sbt | 2 +- sbt-app/src/sbt-test/tests/arguments/build.sbt | 2 +- sbt-app/src/sbt-test/tests/do-not-discover/build.sbt | 2 +- sbt-app/src/sbt-test/tests/done/build.sbt | 2 +- sbt-app/src/sbt-test/tests/filter-runners/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork-async/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork-parallel/build.sbt | 2 +- .../tests/fork-test-group-parallel-custom-tags/build.sbt | 2 +- .../src/sbt-test/tests/fork-test-group-parallel/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork2/build.sbt | 2 +- sbt-app/src/sbt-test/tests/it/build.sbt | 2 +- sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt | 2 +- sbt-app/src/sbt-test/tests/munit/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-subproc/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-tests/build.sbt | 2 +- .../src/sbt-test/tests/one-class-multi-framework/build.sbt | 2 +- sbt-app/src/sbt-test/tests/order/build.sbt | 2 +- sbt-app/src/sbt-test/tests/resources/build.sbt | 2 +- sbt-app/src/sbt-test/tests/scalatest/build.sbt | 2 +- sbt-app/src/sbt-test/tests/serial/build.sbt | 2 +- sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt | 2 +- sbt-app/src/sbt-test/tests/single-runner/build.sbt | 2 +- sbt-app/src/sbt-test/tests/specs-run/build.sbt | 2 +- sbt-app/src/sbt-test/tests/t543/build.sbt | 2 +- sbt-app/src/sbt-test/tests/task/build.sbt | 2 +- sbt-app/src/sbt-test/tests/test-exclude/build.sbt | 2 +- sbt-app/src/sbt-test/tests/test-quick/build.sbt | 2 +- sbt-app/src/sbt-test/watch/commands/build.sbt | 2 +- 93 files changed, 103 insertions(+), 103 deletions(-) diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt index bc833fd93..c9ad52715 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt @@ -11,7 +11,7 @@ lazy val root = (project in file(".")) lazy val foo = project .settings( - crossScalaVersions := Seq(scala212, "2.13.1"), + crossScalaVersions := Seq(scala212, "2.13.11"), libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0", check := { @@ -43,7 +43,7 @@ lazy val bar = project lazy val baz = project .settings( - crossScalaVersions := Seq("2.13.1"), + crossScalaVersions := Seq("2.13.11"), check := { // This tests that +baz/check will respect bar's crossScalaVersions and not switch val x = (LocalProject("bar") / scalaVersion).value @@ -54,7 +54,7 @@ lazy val baz = project lazy val client = project .settings( - crossScalaVersions := Seq(scala212, "2.13.1"), + crossScalaVersions := Seq(scala212, "2.13.11"), check := (Compile / compile).value, compile2 := (Compile / compile).value, ) diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/test b/sbt-app/src/sbt-test/actions/cross-advanced/test index 4828b39b9..e413a129a 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/test +++ b/sbt-app/src/sbt-test/actions/cross-advanced/test @@ -17,7 +17,7 @@ ## test + with command or alias > clean ## for command cross building you do need crossScalaVerions on root -> set root/crossScalaVersions := Seq("2.12.18", "2.13.1") +> set root/crossScalaVersions := Seq("2.12.18", "2.13.11") > + build $ exists foo/target/scala-2.12 $ exists foo/target/scala-2.13 diff --git a/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt b/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt index b8ff210c9..5554632a2 100644 --- a/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt @@ -1,5 +1,5 @@ -scalaVersion := "2.12.12" -crossScalaVersions := List("2.12.12", "2.13.0") +scalaVersion := "2.12.18" +crossScalaVersions := List("2.12.18", "2.13.11") val setLastModified = taskKey[Unit]("Sets the last modified time for classfiles") setLastModified := { diff --git a/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt b/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt index 7fb4676d4..5b20f8f5f 100644 --- a/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt @@ -1 +1 @@ -crossScalaVersions := Seq[String]("2.11.12", "2.12.12") +crossScalaVersions := Seq[String]("2.11.12", "2.12.18") diff --git a/sbt-app/src/sbt-test/actions/cross-multi-parser/test b/sbt-app/src/sbt-test/actions/cross-multi-parser/test index e731a77d1..cd87f4b85 100644 --- a/sbt-app/src/sbt-test/actions/cross-multi-parser/test +++ b/sbt-app/src/sbt-test/actions/cross-multi-parser/test @@ -1,5 +1,5 @@ > ++2.11.12; compile -> ++ 2.12.12 ; compile; +> ++ 2.12.18 ; compile; -> ++ 2.12.12 ; compile +> ++ 2.12.18 ; compile diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt index 066ef1d1e..c4c532266 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt @@ -1,5 +1,5 @@ -lazy val scala212 = "2.12.12" -lazy val scala213 = "2.13.1" +lazy val scala212 = "2.12.18" +lazy val scala213 = "2.13.11" ThisBuild / crossScalaVersions := Seq(scala212, scala213) ThisBuild / scalaVersion := scala212 diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/test b/sbt-app/src/sbt-test/actions/cross-multiproject/test index b464e9cb3..c39be13ba 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/test +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/test @@ -13,7 +13,7 @@ $ exists lib/target/scala-2.13 # test safe switching > clean -> ++ 2.12.12 -v compile +> ++ 2.12.18 -v compile $ exists lib/target/scala-2.12 -$ exists lib/target/scala-2.13 $ exists sbt-foo/target/scala-2.12 @@ -29,14 +29,14 @@ $ exists sbt-foo/target/scala-2.12 # Test ++ leaves crossScalaVersions unchanged > clean -> ++2.12.12 +> ++2.12.18 > +extrasProj/compile $ exists extras/target/scala-2.13 $ exists extras/target/scala-2.12 # test safe switching > clean -> ++ 2.13.1 -v compile +> ++ 2.13.11 -v compile $ exists lib/target/scala-2.13 -$ exists lib/target/scala-2.12 # -$ exists sbt-foo/target/scala-2.12 diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt index edba44f2f..374a3d6ab 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt @@ -1,5 +1,5 @@ lazy val scala212 = "2.12.18" -lazy val scala213 = "2.13.1" +lazy val scala213 = "2.13.11" ThisBuild / scalaVersion := scala212 diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test index 996094f8e..8f64e9ce5 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test @@ -2,7 +2,7 @@ -> ++2.12.12 -> ++2.13.1 compile +> ++2.13.11 compile $ exists core/target/scala-2.13 -$ exists module/target/scala-2.13 diff --git a/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt b/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt index 2c90c5429..b79ed67a7 100644 --- a/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt +++ b/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt @@ -2,7 +2,7 @@ val newContents = "bbbbbbbbb" val rootContentFile = "root.txt" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/actions/doc/build.sbt b/sbt-app/src/sbt-test/actions/doc/build.sbt index 8f1b96ff9..3bfa108cd 100644 --- a/sbt-app/src/sbt-test/actions/doc/build.sbt +++ b/sbt-app/src/sbt-test/actions/doc/build.sbt @@ -5,8 +5,8 @@ import Parsers._ lazy val root = (project in file(".")) .settings( crossPaths := false, - crossScalaVersions := Seq("2.12.12", "2.13.3"), - scalaVersion := "2.12.12", + crossScalaVersions := Seq("2.12.18", "2.13.11"), + scalaVersion := "2.12.18", Compile / doc / scalacOptions += "-Xfatal-warnings", commands += Command.command("excludeB") { s => val impl = """val src = (sources in Compile).value; src.filterNot(_.getName.contains("B"))""" diff --git a/sbt-app/src/sbt-test/actions/doc/test b/sbt-app/src/sbt-test/actions/doc/test index 14318f4e5..7b8c7ccd5 100644 --- a/sbt-app/src/sbt-test/actions/doc/test +++ b/sbt-app/src/sbt-test/actions/doc/test @@ -35,7 +35,7 @@ $ exists target/api/pkg/J.html $ absent target/api/index.js > setDocExtension scala -> ++2.13.3 +> ++2.13.11 > clean $ absent target/api/A$.html > doc diff --git a/sbt-app/src/sbt-test/actions/generator/build.sbt b/sbt-app/src/sbt-test/actions/generator/build.sbt index d9139f3a0..af23bebf7 100644 --- a/sbt-app/src/sbt-test/actions/generator/build.sbt +++ b/sbt-app/src/sbt-test/actions/generator/build.sbt @@ -1,6 +1,6 @@ val buildInfo = taskKey[Seq[File]]("generates the build info") -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/actions/multi-command/build.sbt b/sbt-app/src/sbt-test/actions/multi-command/build.sbt index e3dba3ba2..08909f558 100644 --- a/sbt-app/src/sbt-test/actions/multi-command/build.sbt +++ b/sbt-app/src/sbt-test/actions/multi-command/build.sbt @@ -19,4 +19,4 @@ val dynamicTask = taskKey[Unit]("dynamic input task") dynamicTask := { println("not yet et") } -crossScalaVersions := "2.11.12" :: "2.12.12" :: Nil +crossScalaVersions := "2.11.12" :: "2.12.18" :: Nil diff --git a/sbt-app/src/sbt-test/actions/multi-command/test b/sbt-app/src/sbt-test/actions/multi-command/test index 568d028fb..dc657b553 100644 --- a/sbt-app/src/sbt-test/actions/multi-command/test +++ b/sbt-app/src/sbt-test/actions/multi-command/test @@ -37,4 +37,4 @@ > ++ 2.11.12 compile; setStringValue bar; checkStringValue bar -> ++2.12.12 compile; setStringValue foo; checkStringValue foo +> ++2.12.18 compile; setStringValue foo; checkStringValue foo diff --git a/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt b/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt index 374410229..501054f78 100644 --- a/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt +++ b/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt @@ -1,6 +1,6 @@ name := "my-project" -scalaVersion := "2.12.12" +scalaVersion := "2.12.18" semanticdbIncludeInJar := true diff --git a/sbt-app/src/sbt-test/actions/remote-cache/build.sbt b/sbt-app/src/sbt-test/actions/remote-cache/build.sbt index 920bc2e0c..e4e2c175b 100644 --- a/sbt-app/src/sbt-test/actions/remote-cache/build.sbt +++ b/sbt-app/src/sbt-test/actions/remote-cache/build.sbt @@ -8,7 +8,7 @@ lazy val CustomArtifact = config("custom-artifact") val recordPreviousIterations = taskKey[Unit]("Record previous iterations.") val checkIterations = inputKey[Unit]("Verifies the accumulated number of iterations of incremental compilation.") -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / pushRemoteCacheTo := Some( MavenCache("local-cache", (ThisBuild / baseDirectory).value / "r") ) diff --git a/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt b/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt index 889490e92..7ddb5c706 100644 --- a/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt @@ -2,7 +2,7 @@ ThisBuild / turbo := true val akkaTest = (project in file(".")).settings( name := "akka-test", - scalaVersion := "2.12.12", + scalaVersion := "2.12.18", libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.5.16", "com.lihaoyi" %% "utest" % "0.6.6" % "test" 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 9bd266eb7..7015d24ed 100644 --- a/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt @@ -13,7 +13,7 @@ def wrap(task: InputKey[Unit]): Def.Initialize[Task[Unit]] = ThisBuild / turbo := true val root = (project in file(".")).settings( - scalaVersion := "2.12.12", + scalaVersion := "2.12.18", javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-h", sourceDirectory.value.toPath.resolve("main/native/include").toString), libraryDependencies += "com.lihaoyi" %% "utest" % "0.6.6" % "test", diff --git a/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt b/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt index b0fe1aa10..4c0050eb4 100644 --- a/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt @@ -2,7 +2,7 @@ ThisBuild / turbo := true val snapshot = (project in file(".")).settings( name := "mismatched-libraries", - scalaVersion := "2.12.12", + scalaVersion := "2.12.18", libraryDependencies ++= Seq("com.lihaoyi" %% "utest" % "0.6.6" % "test"), testFrameworks := Seq(TestFramework("utest.runner.Framework")), resolvers += "Local Maven" at file("libraries/ivy").toURI.toURL.toString, diff --git a/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt b/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt index 45c966d82..8410b25ed 100644 --- a/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt @@ -1,6 +1,6 @@ val layeringStrategyTest = (project in file(".")).settings( name := "layering-strategy-test", - scalaVersion := "2.12.12", + scalaVersion := "2.12.18", organization := "sbt", libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.5.16", ) 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 1a921e076..d0b5cdfeb 100644 --- a/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt @@ -9,7 +9,7 @@ ThisBuild / useCoursier := false val snapshot = (project in file(".")).settings( name := "akka-test", - scalaVersion := "2.12.12", + scalaVersion := "2.12.18", libraryDependencies ++= Seq( "com.lihaoyi" %% "utest" % "0.6.6" % "test" ), diff --git a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom index d5fedc71b..39146c260 100644 --- a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom +++ b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom @@ -14,7 +14,7 @@ org.scala-lang scala-library - 2.12.12 + 2.12.18 diff --git a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom index d5fedc71b..39146c260 100644 --- a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom +++ b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom @@ -14,7 +14,7 @@ org.scala-lang scala-library - 2.12.12 + 2.12.18 diff --git a/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt b/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt index af76b9d35..88af78b3c 100644 --- a/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt @@ -2,7 +2,7 @@ name := "Simple Project" version := "1.0" -scalaVersion := "2.12.12" +scalaVersion := "2.12.18" libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.3" diff --git a/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt b/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt index 5745fe973..6762ba858 100644 --- a/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt @@ -2,7 +2,7 @@ ThisBuild / turbo := true val utestTest = (project in file(".")).settings( name := "utest-test", - scalaVersion := "2.12.12", + scalaVersion := "2.12.18", libraryDependencies ++= Seq( "com.lihaoyi" %% "utest" % "0.6.6" % "test" ), diff --git a/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt b/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt index c9260beeb..fbf51533b 100644 --- a/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")). settings( diff --git a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt index 804a1206d..6b4c2e3ba 100644 --- a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt @@ -1,5 +1,5 @@ -lazy val scala212 = "2.12.12" -lazy val scala213 = "2.13.1" +lazy val scala212 = "2.12.18" +lazy val scala213 = "2.13.11" ThisBuild / scalaVersion := scala212 lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt b/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt index 3c4ba1908..35363129b 100644 --- a/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt +++ b/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.13.1" +scalaVersion := "2.13.11" // Send some bogus initial command so that it doesn't get stuck. // The task itself will still succeed. diff --git a/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt b/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt index 366c27de7..2405c81d5 100644 --- a/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt +++ b/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt @@ -1 +1 @@ -scalaVersion := "2.12.12" +scalaVersion := "2.12.18" diff --git a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt index aa4780397..698b97b4e 100644 --- a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt @@ -1,5 +1,5 @@ ThisBuild / version := "0.1.0-SNAPSHOT" -ThisBuild / scalaVersion := "2.13.5" +ThisBuild / scalaVersion := "2.13.11" name := "asciiGraphWidthSpecs" diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt index 4826145e5..a7bcd4c9f 100644 --- a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt @@ -1,5 +1,5 @@ ThisBuild / version := "0.1.0-SNAPSHOT" -ThisBuild / scalaVersion := "2.13.5" +ThisBuild / scalaVersion := "2.13.11" name := "whatDependsOn" diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt index 4826145e5..a7bcd4c9f 100644 --- a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt @@ -1,5 +1,5 @@ ThisBuild / version := "0.1.0-SNAPSHOT" -ThisBuild / scalaVersion := "2.13.5" +ThisBuild / scalaVersion := "2.13.11" name := "whatDependsOn" diff --git a/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt b/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt index e4ffeae52..a2be213fe 100644 --- a/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt @@ -6,7 +6,7 @@ lazy val check = taskKey[Unit]("") lazy val checkArtifact = taskKey[Unit]("") ThisBuild / useCoursier := false -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / version := "0.1.0-SNAPSHOT" ThisBuild / organization := "com.example" ThisBuild / organizationName := "example" diff --git a/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt index 69771b0b8..910baa6b0 100644 --- a/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt @@ -1,6 +1,6 @@ import xsbti.AppConfiguration -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" // TTL of Coursier is 24h ThisBuild / useCoursier := false diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt index e5b6ea9d3..8c978bd97 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt @@ -3,7 +3,7 @@ lazy val check = taskKey[Unit]("Runs the check") val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val junit = "junit" % "junit" % "4.13.1" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" def commonSettings: Seq[Def.Setting[_]] = diff --git a/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt b/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt index 5f6646644..ef4e1834c 100644 --- a/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val check = taskKey[Unit]("") diff --git a/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt b/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt index c03c939e6..fed0b72ff 100644 --- a/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies ++= List( "org.webjars.npm" % "randomatic" % "1.1.7", "org.webjars.npm" % "is-odd" % "2.0.0", diff --git a/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt b/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt index 3ea183127..e075e4fd0 100644 --- a/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.13.1" +scalaVersion := "2.13.11" csrConfiguration := csrConfiguration.value.withCache(target.value / "coursier-cache") libraryDependencies += "com.typesafe.play" %% "play-test" % "2.8.0-RC1" % Test // worked around in 2.8.0 diff --git a/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt b/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt index 81394881e..867786f77 100644 --- a/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.0" +ThisBuild / scalaVersion := "2.13.11" ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" ivyPaths := IvyPaths(baseDirectory.value, Some(target.value / "ivy-cache")) diff --git a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt index 9460b811d..073028662 100644 --- a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt @@ -1,7 +1,7 @@ import xsbti.AppConfiguration // ThisBuild / useCoursier := false ThisBuild / organization := "com.example" -ThisBuild / scalaVersion := "2.13.3" +ThisBuild / scalaVersion := "2.13.11" ThisBuild / versionScheme := Some("semver-spec") ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" diff --git a/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt b/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt index 366c27de7..2405c81d5 100644 --- a/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt @@ -1 +1 @@ -scalaVersion := "2.12.12" +scalaVersion := "2.12.18" diff --git a/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt b/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt index 51257fd6e..8b24e0d5e 100644 --- a/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.2" +ThisBuild / scalaVersion := "2.13.11" libraryDependencies ++= Seq( "com.chuusai" %% "shapeless" % "2.3.3", // non-existing diff --git a/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt b/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt index 6d5248abf..607bbacc1 100644 --- a/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt @@ -1,5 +1,5 @@ ThisBuild / organization := "com.example" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" def customIvyPaths: Seq[Def.Setting[_]] = Seq( diff --git a/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt b/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt index 862e728fc..4b9b31945 100644 --- a/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt @@ -1,5 +1,5 @@ ThisBuild / organization := "com.example" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" // TTL is 24h so we can't detect the change ThisBuild / useCoursier := false diff --git a/sbt-app/src/sbt-test/plugins/hydra/build.sbt b/sbt-app/src/sbt-test/plugins/hydra/build.sbt index 2324a2515..4fbd558b6 100644 --- a/sbt-app/src/sbt-test/plugins/hydra/build.sbt +++ b/sbt-app/src/sbt-test/plugins/hydra/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val check = taskKey[Unit]("") diff --git a/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt b/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt index 8f8aa3c80..6203106e2 100644 --- a/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt +++ b/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" name := "hello" enablePlugins(JavaAppPackaging) diff --git a/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt b/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt index cb6b82872..be91e40d7 100644 --- a/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt +++ b/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt @@ -1,3 +1,3 @@ name := "projA" -scalaVersion := "2.12.12" +scalaVersion := "2.12.18" diff --git a/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt b/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt index 2179dcf9e..7f712f97e 100644 --- a/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt +++ b/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt @@ -1,7 +1,7 @@ val baseSbt = "1." -val buildCrossList = List("2.10.7", "2.11.12", "2.12.12") -scalaVersion in ThisBuild := "2.12.12" +val buildCrossList = List("2.10.7", "2.11.12", "2.12.18") +scalaVersion in ThisBuild := "2.12.18" crossScalaVersions in ThisBuild := buildCrossList addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.7.0") diff --git a/sbt-app/src/sbt-test/project/flatten/build.sbt b/sbt-app/src/sbt-test/project/flatten/build.sbt index 5e39482e1..96b4f560b 100644 --- a/sbt-app/src/sbt-test/project/flatten/build.sbt +++ b/sbt-app/src/sbt-test/project/flatten/build.sbt @@ -1,6 +1,6 @@ val unpackage = TaskKey[Unit]("unpackage") -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/project/internal-tracking/build.sbt b/sbt-app/src/sbt-test/project/internal-tracking/build.sbt index 0d567f22e..bbc127ca0 100644 --- a/sbt-app/src/sbt-test/project/internal-tracking/build.sbt +++ b/sbt-app/src/sbt-test/project/internal-tracking/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / trackInternalDependencies := TrackLevel.NoTracking lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/project/val-order/build.sbt b/sbt-app/src/sbt-test/project/val-order/build.sbt index d34d36cdc..43de68746 100644 --- a/sbt-app/src/sbt-test/project/val-order/build.sbt +++ b/sbt-app/src/sbt-test/project/val-order/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.1" +ThisBuild / scalaVersion := "2.13.11" ThisBuild / version := "0.1.0-SNAPSHOT" lazy val check = taskKey[Unit]("") diff --git a/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt b/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt index 9298a3b66..61b35df9c 100644 --- a/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val dep = project diff --git a/sbt-app/src/sbt-test/source-dependencies/constants/test b/sbt-app/src/sbt-test/source-dependencies/constants/test index 8672882ba..d1b542f86 100644 --- a/sbt-app/src/sbt-test/source-dependencies/constants/test +++ b/sbt-app/src/sbt-test/source-dependencies/constants/test @@ -8,7 +8,7 @@ $ copy-file changes/A2.scala A.scala > run 2 > clean -> ++2.13.6! +> ++2.13.11! $ copy-file changes/A1.scala A.scala > run 1 diff --git a/sbt-app/src/sbt-test/source-dependencies/cross-source/test b/sbt-app/src/sbt-test/source-dependencies/cross-source/test index d0d770085..b491e62d3 100644 --- a/sbt-app/src/sbt-test/source-dependencies/cross-source/test +++ b/sbt-app/src/sbt-test/source-dependencies/cross-source/test @@ -1,3 +1,3 @@ # A.scala needs B.scala, it would be in source list -> ++2.12.12! +> ++2.12.18! > compile diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt index ae85d25a6..a3c6c66d8 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val paradiseVersion = "2.1.1" val commonSettings = Seq( diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt index 71627ff7c..da3c591b8 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt index 71627ff7c..da3c591b8 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt index 71627ff7c..da3c591b8 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt index 71627ff7c..da3c591b8 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt b/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt index a5b9eef0d..220f54838 100644 --- a/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.3" +ThisBuild / scalaVersion := "2.13.11" ThisBuild / usePipelining := true lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt b/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt index 36db86700..e35910cc1 100644 --- a/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.3" +ThisBuild / scalaVersion := "2.13.11" ThisBuild / usePipelining := true lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/tests/arguments/build.sbt b/sbt-app/src/sbt-test/tests/arguments/build.sbt index 34877ddf4..c7cce3910 100644 --- a/sbt-app/src/sbt-test/tests/arguments/build.sbt +++ b/sbt-app/src/sbt-test/tests/arguments/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val foo = settingKey[Seq[String]]("foo") val checkFoo = inputKey[Unit]("check contents of foo") diff --git a/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt b/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt index 4a2b5826a..967047a91 100644 --- a/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt +++ b/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/done/build.sbt b/sbt-app/src/sbt-test/tests/done/build.sbt index 4a2b5826a..967047a91 100644 --- a/sbt-app/src/sbt-test/tests/done/build.sbt +++ b/sbt-app/src/sbt-test/tests/done/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/filter-runners/build.sbt b/sbt-app/src/sbt-test/tests/filter-runners/build.sbt index c24c76ba9..f9efce690 100644 --- a/sbt-app/src/sbt-test/tests/filter-runners/build.sbt +++ b/sbt-app/src/sbt-test/tests/filter-runners/build.sbt @@ -1,7 +1,7 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.2.2" val munit = "org.scalameta" %% "munit" % "0.7.22" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += scalatest % Test libraryDependencies += munit % Test diff --git a/sbt-app/src/sbt-test/tests/fork-async/build.sbt b/sbt-app/src/sbt-test/tests/fork-async/build.sbt index bd0bb8041..b761ffb50 100644 --- a/sbt-app/src/sbt-test/tests/fork-async/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-async/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt b/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt index 2d60ab369..55d88c1a2 100644 --- a/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt @@ -1,7 +1,7 @@ import Tests._ import Defaults._ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val check = taskKey[Unit]("Check that tests are executed in parallel") lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt b/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt index f6eacaa6d..c148dc813 100644 --- a/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt @@ -1,5 +1,5 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val TestATypeTag = Tags.Tag("TestA") val TestBTypeTag = Tags.Tag("TestB") diff --git a/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt b/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt index bf225760b..4ff639b35 100644 --- a/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt @@ -1,5 +1,5 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" Global / concurrentRestrictions := Seq(Tags.limitAll(4)) libraryDependencies += specs % Test diff --git a/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt b/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt index 2eba9d278..50ccf8d4b 100644 --- a/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += "org.scala-sbt" % "test-interface" % "1.0" diff --git a/sbt-app/src/sbt-test/tests/fork/build.sbt b/sbt-app/src/sbt-test/tests/fork/build.sbt index 77c74e51b..8cef6ee26 100644 --- a/sbt-app/src/sbt-test/tests/fork/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork/build.sbt @@ -11,7 +11,7 @@ val scalaxml = "org.scala-lang.modules" %% "scala-xml" % "1.1.1" def groupId(idx: Int) = "group_" + (idx + 1) def groupPrefix(idx: Int) = groupId(idx) + "_file_" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / organization := "org.example" lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/tests/fork2/build.sbt b/sbt-app/src/sbt-test/tests/fork2/build.sbt index e0e873c69..11a9108de 100644 --- a/sbt-app/src/sbt-test/tests/fork2/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork2/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" fork := true libraryDependencies += scalatest % Test diff --git a/sbt-app/src/sbt-test/tests/it/build.sbt b/sbt-app/src/sbt-test/tests/it/build.sbt index fd96cc57a..283ac3132 100644 --- a/sbt-app/src/sbt-test/tests/it/build.sbt +++ b/sbt-app/src/sbt-test/tests/it/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" val specs = "org.specs2" %% "specs2-core" % "4.3.4" diff --git a/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt b/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt index 8fae2d48f..378c6fe97 100644 --- a/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt +++ b/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt @@ -14,7 +14,7 @@ val nestedSuitesReportFile = "target/test-reports/TEST-my.scalatest.MyNestedSuit val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val junitinterface = "com.novocode" % "junit-interface" % "0.11" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")). settings( diff --git a/sbt-app/src/sbt-test/tests/munit/build.sbt b/sbt-app/src/sbt-test/tests/munit/build.sbt index 53b13bf93..e002165e6 100644 --- a/sbt-app/src/sbt-test/tests/munit/build.sbt +++ b/sbt-app/src/sbt-test/tests/munit/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val munit = "org.scalameta" %% "munit" % "0.7.22" diff --git a/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt b/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt index bd76bb20c..d4bbf800f 100644 --- a/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt b/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt index 21b809d76..e7c35f471 100644 --- a/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt b/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt index dc50503e9..514bb7f05 100644 --- a/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt @@ -1,7 +1,7 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val scalaxml = "org.scala-lang.modules" %% "scala-xml" % "1.1.1" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/nested-tests/build.sbt b/sbt-app/src/sbt-test/tests/nested-tests/build.sbt index d4737f0f5..65eb9b874 100644 --- a/sbt-app/src/sbt-test/tests/nested-tests/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-tests/build.sbt @@ -1,6 +1,6 @@ val scalcheck = "org.scalacheck" %% "scalacheck" % "1.14.0" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / version := "0.0.1" ThisBuild / organization := "org.catastrophe" diff --git a/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt b/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt index 27b51b848..c4bc7adca 100644 --- a/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt +++ b/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt @@ -1,5 +1,5 @@ val specsJunit = "org.specs2" %% "specs2-junit" % "4.3.4" val junitinterface = "com.novocode" % "junit-interface" % "0.11" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += junitinterface % Test libraryDependencies += specsJunit % Test diff --git a/sbt-app/src/sbt-test/tests/order/build.sbt b/sbt-app/src/sbt-test/tests/order/build.sbt index 53ce38e0e..2dcb57b05 100644 --- a/sbt-app/src/sbt-test/tests/order/build.sbt +++ b/sbt-app/src/sbt-test/tests/order/build.sbt @@ -1,5 +1,5 @@ val scalcheck = "org.scalacheck" %% "scalacheck" % "1.14.0" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" Test / parallelExecution := false libraryDependencies += scalcheck % Test diff --git a/sbt-app/src/sbt-test/tests/resources/build.sbt b/sbt-app/src/sbt-test/tests/resources/build.sbt index 858e7a1c2..e4c5dd616 100644 --- a/sbt-app/src/sbt-test/tests/resources/build.sbt +++ b/sbt-app/src/sbt-test/tests/resources/build.sbt @@ -1,3 +1,3 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += specs % Test diff --git a/sbt-app/src/sbt-test/tests/scalatest/build.sbt b/sbt-app/src/sbt-test/tests/scalatest/build.sbt index 1f501a862..44d5653a0 100644 --- a/sbt-app/src/sbt-test/tests/scalatest/build.sbt +++ b/sbt-app/src/sbt-test/tests/scalatest/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.1" +ThisBuild / scalaVersion := "2.13.11" ThisBuild / version := "0.1.0-SNAPSHOT" ThisBuild / organization := "com.example" ThisBuild / organizationName := "example" diff --git a/sbt-app/src/sbt-test/tests/serial/build.sbt b/sbt-app/src/sbt-test/tests/serial/build.sbt index 11e892129..a5a0baf71 100644 --- a/sbt-app/src/sbt-test/tests/serial/build.sbt +++ b/sbt-app/src/sbt-test/tests/serial/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / organization := "com.example" ThisBuild / version := "0.0.1-SNAPSHOT" diff --git a/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt b/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt index 516692e12..69a28f048 100644 --- a/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt +++ b/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt @@ -1,3 +1,3 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += scalatest diff --git a/sbt-app/src/sbt-test/tests/single-runner/build.sbt b/sbt-app/src/sbt-test/tests/single-runner/build.sbt index be394850b..bc028ed12 100644 --- a/sbt-app/src/sbt-test/tests/single-runner/build.sbt +++ b/sbt-app/src/sbt-test/tests/single-runner/build.sbt @@ -1,4 +1,4 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += scalatest Test / testOptions += Tests.Argument("-C", "custom.CustomReporter") diff --git a/sbt-app/src/sbt-test/tests/specs-run/build.sbt b/sbt-app/src/sbt-test/tests/specs-run/build.sbt index 07a4350f6..ddc7a9055 100644 --- a/sbt-app/src/sbt-test/tests/specs-run/build.sbt +++ b/sbt-app/src/sbt-test/tests/specs-run/build.sbt @@ -1,4 +1,4 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += specs % Test diff --git a/sbt-app/src/sbt-test/tests/t543/build.sbt b/sbt-app/src/sbt-test/tests/t543/build.sbt index 982d2822b..3ed2bb943 100644 --- a/sbt-app/src/sbt-test/tests/t543/build.sbt +++ b/sbt-app/src/sbt-test/tests/t543/build.sbt @@ -7,7 +7,7 @@ val check = TaskKey[Unit]("check", "Check correct error has been returned.") val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val scalaxml = "org.scala-lang.modules" %% "scala-xml" % "1.1.1" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")). settings( diff --git a/sbt-app/src/sbt-test/tests/task/build.sbt b/sbt-app/src/sbt-test/tests/task/build.sbt index be394850b..bc028ed12 100644 --- a/sbt-app/src/sbt-test/tests/task/build.sbt +++ b/sbt-app/src/sbt-test/tests/task/build.sbt @@ -1,4 +1,4 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" libraryDependencies += scalatest Test / testOptions += Tests.Argument("-C", "custom.CustomReporter") diff --git a/sbt-app/src/sbt-test/tests/test-exclude/build.sbt b/sbt-app/src/sbt-test/tests/test-exclude/build.sbt index 9fd396d27..d4d182588 100644 --- a/sbt-app/src/sbt-test/tests/test-exclude/build.sbt +++ b/sbt-app/src/sbt-test/tests/test-exclude/build.sbt @@ -1,5 +1,5 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/test-quick/build.sbt b/sbt-app/src/sbt-test/tests/test-quick/build.sbt index 9fd396d27..d4d182588 100644 --- a/sbt-app/src/sbt-test/tests/test-quick/build.sbt +++ b/sbt-app/src/sbt-test/tests/test-quick/build.sbt @@ -1,5 +1,5 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/watch/commands/build.sbt b/sbt-app/src/sbt-test/watch/commands/build.sbt index 1ac4e953a..662c5cc9a 100644 --- a/sbt-app/src/sbt-test/watch/commands/build.sbt +++ b/sbt-app/src/sbt-test/watch/commands/build.sbt @@ -53,4 +53,4 @@ expectFailure / watchOnFileInputEvent := { (_, e) => } -crossScalaVersions := Seq("2.11.12", "2.12.12") +crossScalaVersions := Seq("2.11.12", "2.12.18") From 2edb4dcbb6adb87d2c1ddbc80f049ca09129b921 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sat, 24 Jun 2023 20:05:52 +0900 Subject: [PATCH 090/207] fix typo --- internal/util-collection/src/test/scala/SettingsTest.scala | 2 +- .../src/main/scala/sbt/internal/util/EscHelpers.scala | 2 +- main-command/src/main/scala/sbt/BasicKeys.scala | 2 +- .../src/main/scala/sbt/internal/server/Server.scala | 2 +- .../src/main/scala/sbt/internal/server/ServerHandler.scala | 2 +- main/src/main/scala/sbt/BackgroundJobService.scala | 2 +- main/src/main/scala/sbt/InteractionService.scala | 2 +- main/src/main/scala/sbt/UpperStateOps.scala | 4 ++-- main/src/main/scala/sbt/internal/SessionSettings.scala | 6 +++--- main/src/main/scala/sbt/nio/FileChanges.scala | 2 +- main/src/main/scala/sbt/nio/Settings.scala | 2 +- main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala | 2 +- notes/1.1.0.markdown | 2 +- .../sbt/internal/bsp/ScalaTestClassesParams.scala | 2 +- protocol/src/main/contraband/bsp.contra | 2 +- run/src/main/scala/sbt/Fork.scala | 2 +- server-test/src/test/scala/testpkg/BuildServerTest.scala | 4 ++-- 17 files changed, 21 insertions(+), 21 deletions(-) diff --git a/internal/util-collection/src/test/scala/SettingsTest.scala b/internal/util-collection/src/test/scala/SettingsTest.scala index 72d37ddab..00cf122fb 100644 --- a/internal/util-collection/src/test/scala/SettingsTest.scala +++ b/internal/util-collection/src/test/scala/SettingsTest.scala @@ -70,7 +70,7 @@ object SettingsTest extends Properties("settings") { ).toSeq { - // Note: This causes a cycle refernec error, quite frequently. + // Note: This causes a cycle reference error, quite frequently. checkKey(last, Some(nr - 1), evaluate(setting(chk, value(0)) +: derivedSettings)) :| "Not derived?" } && { checkKey(last, None, evaluate(derivedSettings)) :| "Should not be derived" 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 4fe3060a8..3ffa1bd6c 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 @@ -32,7 +32,7 @@ object EscHelpers { * * The CSI (control sequence instruction) codes start with ESC + '['. This is for testing the second character. * - * There is an additional CSI (one character) that we could test for, but is not frequnetly used, and we don't + * There is an additional CSI (one character) that we could test for, but is not frequently used, and we don't * check for it. * * cf. http://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes diff --git a/main-command/src/main/scala/sbt/BasicKeys.scala b/main-command/src/main/scala/sbt/BasicKeys.scala index fd7b75d17..f01b1f6a4 100644 --- a/main-command/src/main/scala/sbt/BasicKeys.scala +++ b/main-command/src/main/scala/sbt/BasicKeys.scala @@ -145,7 +145,7 @@ object BasicKeys { ) private[sbt] val detachStdio = AttributeKey[Boolean]( "detach-stdio", - "Toggles wheter or not to close system in, out and error when the server starts.", + "Toggles whether or not to close system in, out and error when the server starts.", 1000 ) } diff --git a/main-command/src/main/scala/sbt/internal/server/Server.scala b/main-command/src/main/scala/sbt/internal/server/Server.scala index 83aeb6b31..272929899 100644 --- a/main-command/src/main/scala/sbt/internal/server/Server.scala +++ b/main-command/src/main/scala/sbt/internal/server/Server.scala @@ -188,7 +188,7 @@ private[sbt] object Server { IO.write(tokenfile, CompactPrinter(jsonToken), IO.utf8, true) } - /** Set the persmission of the file such that the only the owner can read/write it. */ + /** Set the permission of the file such that the only the owner can read/write it. */ private[this] def ownerOnly(file: File): Unit = { def acl(owner: UserPrincipal) = { val builder = AclEntry.newBuilder diff --git a/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala b/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala index 7f78de2d4..b503e503c 100644 --- a/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala +++ b/main-command/src/main/scala/sbt/internal/server/ServerHandler.scala @@ -31,7 +31,7 @@ object ServerHandler { lazy val fallback: ServerHandler = ServerHandler({ handler => ServerIntent( onRequest = { case x => handler.log.debug(s"Unhandled request received: ${x.method}: $x") }, - onResponse = { case x => handler.log.debug(s"Unhandled responce received") }, + onResponse = { case x => handler.log.debug(s"Unhandled response received") }, onNotification = { case x => handler.log.debug(s"Unhandled notification received: ${x.method}: $x") }, diff --git a/main/src/main/scala/sbt/BackgroundJobService.scala b/main/src/main/scala/sbt/BackgroundJobService.scala index 65ebe7a08..6dc8deb81 100644 --- a/main/src/main/scala/sbt/BackgroundJobService.scala +++ b/main/src/main/scala/sbt/BackgroundJobService.scala @@ -45,7 +45,7 @@ abstract class BackgroundJobService extends Closeable { start(logger, file)._2.apply() } - /** Same as shutown. */ + /** Same as shutdown. */ def close(): Unit /** Shuts down all background jobs. */ diff --git a/main/src/main/scala/sbt/InteractionService.scala b/main/src/main/scala/sbt/InteractionService.scala index 24fa62104..61edd7a34 100644 --- a/main/src/main/scala/sbt/InteractionService.scala +++ b/main/src/main/scala/sbt/InteractionService.scala @@ -9,7 +9,7 @@ package sbt /** - * InteractionService provides an abstration over standard input. + * InteractionService provides an abstraction over standard input. * In the future this could be used to ask for inputs from * other forms of sbt clients such as thin clients and IDEs. */ diff --git a/main/src/main/scala/sbt/UpperStateOps.scala b/main/src/main/scala/sbt/UpperStateOps.scala index d0da94305..93c8b3944 100644 --- a/main/src/main/scala/sbt/UpperStateOps.scala +++ b/main/src/main/scala/sbt/UpperStateOps.scala @@ -19,12 +19,12 @@ trait UpperStateOps extends Any { /** * ProjectRef to the current project of the state session that can be change using - * `project` commmand. + * `project` command. */ def currentRef: ProjectRef /** - * Current project of the state session that can be change using `project` commmand. + * Current project of the state session that can be change using `project` command. */ def currentProject: ResolvedProject diff --git a/main/src/main/scala/sbt/internal/SessionSettings.scala b/main/src/main/scala/sbt/internal/SessionSettings.scala index 9b5d4e1f5..a8abd1ccc 100755 --- a/main/src/main/scala/sbt/internal/SessionSettings.scala +++ b/main/src/main/scala/sbt/internal/SessionSettings.scala @@ -47,9 +47,9 @@ final case class SessionSettings( ) /** - * Modifiy the current state. + * Modify the current state. * - * @param build The buid with which we scope new settings. + * @param build The build with which we scope new settings. * @param project The project reference with which we scope new settings. * @param eval The mechanism to compile new settings. * @return A new SessionSettings object @@ -298,7 +298,7 @@ list, list-all Prints a numbered list of session settings defined. The numbers may be used to remove individual settings or ranges of settings using 'remove'. For 'list', only the settings for the current project are printed. - For 'list-all', all settings in all projets are printed. + For 'list-all', all settings in all projects are printed. remove diff --git a/main/src/main/scala/sbt/nio/FileChanges.scala b/main/src/main/scala/sbt/nio/FileChanges.scala index d07240403..a35139f26 100644 --- a/main/src/main/scala/sbt/nio/FileChanges.scala +++ b/main/src/main/scala/sbt/nio/FileChanges.scala @@ -23,7 +23,7 @@ import java.nio.file.Path * @param modified the files that have been modified. This should be empty when no previous list of * files is available. * @param unmodified the files that have no changes. This should be empty when no previous list of - * files is availab.e + * files is available */ final case class FileChanges( created: Seq[Path], diff --git a/main/src/main/scala/sbt/nio/Settings.scala b/main/src/main/scala/sbt/nio/Settings.scala index 610272786..06fd0fddd 100644 --- a/main/src/main/scala/sbt/nio/Settings.scala +++ b/main/src/main/scala/sbt/nio/Settings.scala @@ -260,7 +260,7 @@ private[sbt] object Settings { * Provides an automatically generated clean method for a task that provides fileOutputs. * * @param taskKey the task for which we add a custom clean implementation - * @return a task specificic clean implementation + * @return a task specific clean implementation */ @nowarn private[sbt] def cleanImpl[T: JsonFormat: ToSeqPath](taskKey: TaskKey[T]): Def.Setting[_] = { diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala b/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala index 4d775a6ff..71ea74c5c 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala @@ -46,7 +46,7 @@ abstract class DependencyTreeKeys { "The boxes of nodes are painted with colors. Otherwise they're black." ) val dependencyDotNodeLabel = settingKey[(String, String, String) => String]( - "Returns a formated string of a dependency. Takes organization, name and version as parameters" + "Returns a formatted string of a dependency. Takes organization, name and version as parameters" ) val dependencyDotHeader = settingKey[String]( "The header of the dot file. (e.g. to set your preferred node shapes)" diff --git a/notes/1.1.0.markdown b/notes/1.1.0.markdown index 723c20c27..b7b951a56 100644 --- a/notes/1.1.0.markdown +++ b/notes/1.1.0.markdown @@ -44,7 +44,7 @@ - Adds a check for a change in sbt version before `reload`. [#1055][1055]/[#3673][3673] by [@RomanIakovlev][@RomanIakovlev] - Adds a new setting `insideCI`, which indicates that sbt is likely running in an Continuous Integration environment. [#3672][3672] by [@RomanIakovlev][@RomanIakovlev] - Adds `nameOption` to `Command` trait. [#3671][3671] by [@miklos-martin][@miklos-martin] -- Adds POSIX persmission operations in IO, such as `IO.chmod(..)`. [io#76][io76] by [@eed3si9n][@eed3si9n] +- Adds POSIX permission operations in IO, such as `IO.chmod(..)`. [io#76][io76] by [@eed3si9n][@eed3si9n] - Treat sbt 1 modules using Semantic Versioning in the eviction warning. [lm#188][lm188] by [@eed3si9n][@eed3si9n] - Uses kind-projector in the code. [#3650][3650] by [@dwijnand][@dwijnand] - Make `displayOnly` etc methods strict in `Completions`. [#3763][3763] by [@xuwei-k][@xuwei-k] diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesParams.scala index d7c4b9a39..c925139f2 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesParams.scala @@ -7,7 +7,7 @@ package sbt.internal.bsp /** * Scala Test Class Request * The build target scala test options request is sent from the client to the server - * to query for the list of fully qualified names of test clases in a given list of targets. + * to query for the list of fully qualified names of test classes in a given list of targets. * @param originId An optional number uniquely identifying a client request. */ final class ScalaTestClassesParams private ( diff --git a/protocol/src/main/contraband/bsp.contra b/protocol/src/main/contraband/bsp.contra index e0f2fd36f..033143005 100644 --- a/protocol/src/main/contraband/bsp.contra +++ b/protocol/src/main/contraband/bsp.contra @@ -715,7 +715,7 @@ type ScalaTestParams { ## Scala Test Class Request ## The build target scala test options request is sent from the client to the server -## to query for the list of fully qualified names of test clases in a given list of targets. +## to query for the list of fully qualified names of test classes in a given list of targets. type ScalaTestClassesParams { targets: [sbt.internal.bsp.BuildTargetIdentifier] diff --git a/run/src/main/scala/sbt/Fork.scala b/run/src/main/scala/sbt/Fork.scala index 1bdf0127f..3335f53f3 100644 --- a/run/src/main/scala/sbt/Fork.scala +++ b/run/src/main/scala/sbt/Fork.scala @@ -155,7 +155,7 @@ object Fork { /** Use an arguments file if: * - we are on jdk >= 9 - * - sbt.argfile is unset or not falsy + * - sbt.argsfile is unset or not falsy * - the command line length would exceed MaxConcatenatedOptionLength */ private def shouldUseArgumentsFile(options: Seq[String]): Boolean = diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index 84edd316a..c694f1334 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -257,7 +257,7 @@ object BuildServerTest extends AbstractServerTest { s.contains(""""severity":2""") && s.contains("""missing type arguments for generic class java.util.List""") }, - "should send publishDiagnostics with serverity 2 for Hello.java" + "should send publishDiagnostics with severity 2 for Hello.java" ) assert( @@ -267,7 +267,7 @@ object BuildServerTest extends AbstractServerTest { s.contains(""""severity":1""") && s.contains("""incompatible types: int cannot be converted to java.lang.String""") }, - "should send publishDiagnostics with serverity 1 for Hello.java" + "should send publishDiagnostics with severity 1 for Hello.java" ) } From 3de0c927549139ac22486d8fbf491948c54cf779 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sun, 25 Jun 2023 08:04:00 +0900 Subject: [PATCH 091/207] fix scaladoc warnings --- .../main/scala/sbt/internal/Continuous.scala | 2 +- .../internal/server/BuildServerProtocol.scala | 19 ++++++++++++------- .../scala/sbt/ConcurrentRestrictions.scala | 1 - 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/main/src/main/scala/sbt/internal/Continuous.scala b/main/src/main/scala/sbt/internal/Continuous.scala index 4366cd053..b78f167d2 100644 --- a/main/src/main/scala/sbt/internal/Continuous.scala +++ b/main/src/main/scala/sbt/internal/Continuous.scala @@ -970,7 +970,7 @@ private[sbt] object Continuous extends DeprecatedContinuous { * input task. * * @param command the name of the command/task to run with each iteration - * @param inputs the transitive task inputs (see [[SettingsGraph]]) + * @param dynamicInputs the transitive task inputs (see [[SettingsGraph]]) * @param watchSettings the [[WatchSettings]] instance for the task */ private final class Config private[internal] ( diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 0f53ad216..50ce2e1b9 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -1024,17 +1024,22 @@ object BuildServerProtocol { /** * Additional information about compilation status for given build target. - * - * @param hasAnyProblems keeps track of problems in given file so BSP reporter - * can omit unnecessary diagnostics updates. - * @param compiledAtLeastOnce keeps track of those projects that were compiled at - * least once so that we can decide to enable fresh reporting for projects that - * are compiled for the first time. - * see: https://github.com/scalacenter/bloop/issues/726 */ private[server] final class BspCompileState { + + /** + * keeps track of problems in given file so BSP reporter + * can omit unnecessary diagnostics updates + */ val hasAnyProblems: java.util.Set[Path] = java.util.concurrent.ConcurrentHashMap.newKeySet[Path] + + /** + * keeps track of those projects that were compiled at + * least once so that we can decide to enable fresh reporting for projects that + * are compiled for the first time. + * see: https://github.com/scalacenter/bloop/issues/726 + */ val compiledAtLeastOnce: AtomicBoolean = new AtomicBoolean(false) } } diff --git a/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala b/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala index 30659e8bc..b6cd6fbaa 100644 --- a/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala +++ b/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala @@ -70,7 +70,6 @@ object ConcurrentRestrictions { /** * A ConcurrentRestrictions instance that places no restrictions on concurrently executing tasks. - * @param zero the constant placeholder used for t */ def unrestricted[A]: ConcurrentRestrictions[A] = new ConcurrentRestrictions[A] { From c7ec22cff82c7866ee5eaada6c751085e9ed68e5 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sun, 25 Jun 2023 08:23:09 +0900 Subject: [PATCH 092/207] avoid deprecated `java.net.URL` constructor - https://bugs.openjdk.org/browse/JDK-8295949 - https://github.com/openjdk/jdk/commit/4338f527aa81350e3636dcfbcd2eb17ddaad3914 --- main/src/main/java/sbt/internal/XMainConfiguration.java | 3 ++- main/src/main/scala/sbt/internal/APIMappings.scala | 3 ++- main/src/main/scala/sbt/internal/InstallSbtn.scala | 6 +++--- sbt-app/src/main/scala/package.scala | 2 +- .../sbt-test/dependency-management/cache-update/build.sbt | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/main/src/main/java/sbt/internal/XMainConfiguration.java b/main/src/main/java/sbt/internal/XMainConfiguration.java index 50e84c08c..6a70f2edf 100644 --- a/main/src/main/java/sbt/internal/XMainConfiguration.java +++ b/main/src/main/java/sbt/internal/XMainConfiguration.java @@ -12,6 +12,7 @@ import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.URI; import java.net.URL; import xsbti.*; @@ -72,7 +73,7 @@ public class XMainConfiguration { URL url = baseLoader.getResource(className); String path = url.toString().replaceAll(className.concat("$"), ""); URL[] urlArray = new URL[1]; - urlArray[0] = new URL(path); + urlArray[0] = new URI(path).toURL(); ClassLoader topLoader = configuration.provider().scalaProvider().launcher().topLoader(); // This loader doesn't have the scala library in it so it's critical that none of the code // in this file use the scala library. diff --git a/main/src/main/scala/sbt/internal/APIMappings.scala b/main/src/main/scala/sbt/internal/APIMappings.scala index 18291c643..64fe2849d 100644 --- a/main/src/main/scala/sbt/internal/APIMappings.scala +++ b/main/src/main/scala/sbt/internal/APIMappings.scala @@ -17,6 +17,7 @@ import sbt.librarymanagement.ModuleID import sbt.internal.util.Attributed import sbt.util.Logger +import java.net.URI private[sbt] object APIMappings { def extract(cp: Seq[Attributed[File]], log: Logger): Seq[(File, URL)] = @@ -38,7 +39,7 @@ private[sbt] object APIMappings { } yield (entry, u) private[this] def parseURL(s: String, forEntry: File, log: Logger): Option[URL] = - try Some(new URL(s)) + try Some(new URI(s).toURL) catch { case e: MalformedURLException => log.warn(s"Invalid API base URL '$s' for classpath entry '$forEntry': ${e.toString}") diff --git a/main/src/main/scala/sbt/internal/InstallSbtn.scala b/main/src/main/scala/sbt/internal/InstallSbtn.scala index 151fa2a28..827826992 100644 --- a/main/src/main/scala/sbt/internal/InstallSbtn.scala +++ b/main/src/main/scala/sbt/internal/InstallSbtn.scala @@ -13,7 +13,7 @@ import Def._ import Keys.{ sbtVersion, state, terminal } import java.io.{ File, FileInputStream, FileOutputStream, InputStream, IOException } -import java.net.URL +import java.net.URI import java.nio.file.{ Files, Path } import java.util.zip.ZipInputStream import sbt.io.IO @@ -95,7 +95,7 @@ private[sbt] object InstallSbtn { } private[this] def downloadRelease(term: Terminal, version: String, location: Path): Unit = { val zip = s"https://github.com/sbt/sbt/releases/download/v$version/sbt-$version.zip" - val url = new URL(zip) + val url = new URI(zip).toURL term.printStream.println(s"downloading $zip to $location") transfer(url.openStream(), location) } @@ -133,7 +133,7 @@ private[sbt] object InstallSbtn { private[this] def downloadCompletion(completion: String, version: String, target: Path): Unit = { Files.createDirectories(target.getParent) val comp = s"https://raw.githubusercontent.com/sbt/sbt/v$version/client/completions/$completion" - transfer(new URL(comp).openStream, target) + transfer(new URI(comp).toURL.openStream, target) } private[this] def setupShell( shell: String, diff --git a/sbt-app/src/main/scala/package.scala b/sbt-app/src/main/scala/package.scala index 0bb7f7f24..b05d0a305 100644 --- a/sbt-app/src/main/scala/package.scala +++ b/sbt-app/src/main/scala/package.scala @@ -32,7 +32,7 @@ package object sbt // IO def uri(s: String): URI = new URI(s) def file(s: String): File = new File(s) - def url(s: String): URL = new URL(s) + def url(s: String): URL = new URI(s).toURL implicit def fileToRichFile(file: File): sbt.io.RichFile = new sbt.io.RichFile(file) implicit def filesToFinder(cc: Traversable[File]): sbt.io.PathFinder = sbt.io.PathFinder.strict(cc) diff --git a/sbt-app/src/sbt-test/dependency-management/cache-update/build.sbt b/sbt-app/src/sbt-test/dependency-management/cache-update/build.sbt index 47d24a502..4e14962ef 100644 --- a/sbt-app/src/sbt-test/dependency-management/cache-update/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cache-update/build.sbt @@ -20,7 +20,7 @@ lazy val root = (project in file(".")) ), version := "0.3.1-SNAPSHOT", description := "An HTTP client for Scala with Async Http Client underneath.", - licenses := Seq("Apache 2" -> new URL("http://www.apache.org/licenses/LICENSE-2.0.txt")), + licenses := Seq("Apache 2" -> url("http://www.apache.org/licenses/LICENSE-2.0.txt")), )), ivyPaths := IvyPaths( (baseDirectory in ThisBuild).value, From fddbb942a7286ce4fc0a2912965b4c45bee4148f Mon Sep 17 00:00:00 2001 From: kenji yoshida <6b656e6a69@gmail.com> Date: Sun, 25 Jun 2023 08:43:14 +0900 Subject: [PATCH 093/207] fix dependency-graph.yml branch setting --- .github/workflows/dependency-graph.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependency-graph.yml b/.github/workflows/dependency-graph.yml index 0ab49c9b3..391176fb3 100644 --- a/.github/workflows/dependency-graph.yml +++ b/.github/workflows/dependency-graph.yml @@ -2,7 +2,7 @@ name: Submit Dependency Graph on: push: - branches: [1.7.x] # default branch of the project + branches: [1.9.x] # default branch of the project permissions: {} jobs: submit-graph: From 6c032b8283e5fc3d88256be10a0a8b1e851800c0 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sun, 25 Jun 2023 08:53:49 +0900 Subject: [PATCH 094/207] some trivial refactoring - remove unused type params - use `withFilter` if possible - use `collectFirst` instead of `collect` and `headOption` - use `length` instead of `size` if `Array` or `String` - use `foreach` instead of `map` --- .../src/test/scala/sbt/complete/FileExamplesTest.scala | 6 +++--- .../src/main/scala/sbt/internal/util/StackTrace.scala | 2 +- main-actions/src/main/scala/sbt/Package.scala | 2 +- main-actions/src/main/scala/sbt/Sync.scala | 2 +- main-actions/src/main/scala/sbt/TestResultLogger.scala | 2 +- .../scala/sbt/internal/util/ReadJsonFromInputStream.scala | 2 +- main/src/main/scala/sbt/Cross.scala | 2 +- main/src/main/scala/sbt/Defaults.scala | 2 +- main/src/main/scala/sbt/Extracted.scala | 2 +- main/src/main/scala/sbt/Main.scala | 2 +- main/src/main/scala/sbt/ScopeFilter.scala | 4 ++-- .../main/scala/sbt/coursierint/CoursierArtifactsTasks.scala | 3 ++- main/src/main/scala/sbt/internal/Clean.scala | 2 +- main/src/main/scala/sbt/internal/CommandExchange.scala | 2 +- main/src/main/scala/sbt/internal/Load.scala | 2 +- main/src/main/scala/sbt/internal/PluginsDebug.scala | 2 +- main/src/main/scala/sbt/internal/graph/rendering/DOT.scala | 2 +- .../scala/sbt/internal/graph/rendering/Statistics.scala | 2 +- main/src/main/scala/sbt/internal/parser/SbtParser.scala | 2 +- .../src/main/scala/sbt/plugins/DependencyTreeSettings.scala | 2 +- tasks-standard/src/main/scala/sbt/std/TaskExtra.scala | 2 +- 21 files changed, 25 insertions(+), 24 deletions(-) diff --git a/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala b/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala index c32269bde..c946f2405 100644 --- a/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala +++ b/internal/util-complete/src/test/scala/sbt/complete/FileExamplesTest.scala @@ -83,7 +83,7 @@ class FileExamplesTest extends UnitSpec { def prefixedPathsOnly: List[String] = allRelativizedPaths - .filter(_ startsWith withCompletionPrefix) + .withFilter(_ startsWith withCompletionPrefix) .map(_ substring withCompletionPrefix.length) def createSampleDirStructure(tempDir: File): Unit = { @@ -92,8 +92,8 @@ class FileExamplesTest extends UnitSpec { nestedFiles = toChildFiles(childDirectories(1), List("farfile1", "barfile2")) nestedDirectories = toChildFiles(childDirectories(1), List("fardir1", "bardir2")) - (childDirectories ++ nestedDirectories).map(_.mkdirs()) - (childFiles ++ nestedFiles).map(_.createNewFile()) + (childDirectories ++ nestedDirectories).foreach(_.mkdirs()) + (childFiles ++ nestedFiles).foreach(_.createNewFile()) baseDir = tempDir } diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala b/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala index 1e0940efb..d47ca4678 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/StackTrace.scala @@ -53,7 +53,7 @@ object StackTrace { val els = t.getStackTrace() var i = 0 - while ((i < els.size) && include(els(i))) { + while ((i < els.length) && include(els(i))) { appendElement(els(i)) i += 1 } diff --git a/main-actions/src/main/scala/sbt/Package.scala b/main-actions/src/main/scala/sbt/Package.scala index a3b944b79..fbff588a0 100644 --- a/main-actions/src/main/scala/sbt/Package.scala +++ b/main-actions/src/main/scala/sbt/Package.scala @@ -76,7 +76,7 @@ object Package { .orElse(Some(default2010Timestamp)) def timeFromConfiguration(config: Configuration): Option[Long] = - (config.options.collect { case t: FixedTimestamp => t }).headOption match { + config.options.collectFirst { case t: FixedTimestamp => t } match { case Some(FixedTimestamp(value)) => value case _ => defaultTimestamp } diff --git a/main-actions/src/main/scala/sbt/Sync.scala b/main-actions/src/main/scala/sbt/Sync.scala index c1e180227..516efc3b6 100644 --- a/main-actions/src/main/scala/sbt/Sync.scala +++ b/main-actions/src/main/scala/sbt/Sync.scala @@ -97,7 +97,7 @@ object Sync { def noDuplicateTargets(relation: Relation[File, File]): Unit = { val dups = relation.reverseMap - .filter { case (_, srcs) => srcs.size >= 2 && srcs.exists(!_.isDirectory) } + .withFilter { case (_, srcs) => srcs.size >= 2 && srcs.exists(!_.isDirectory) } .map { case (target, srcs) => "\n\t" + target + "\nfrom\n\t" + srcs.mkString("\n\t\t") } if (dups.nonEmpty) sys.error("Duplicate mappings:" + dups.mkString) diff --git a/main-actions/src/main/scala/sbt/TestResultLogger.scala b/main-actions/src/main/scala/sbt/TestResultLogger.scala index b018c203a..c824ab790 100644 --- a/main-actions/src/main/scala/sbt/TestResultLogger.scala +++ b/main-actions/src/main/scala/sbt/TestResultLogger.scala @@ -164,7 +164,7 @@ object TestResultLogger { "Canceled" -> canceledCount, "Pending" -> pendingCount ) - val extra = otherCounts.filter(_._2 > 0).map { case (label, count) => s", $label $count" } + val extra = otherCounts.withFilter(_._2 > 0).map { case (label, count) => s", $label $count" } val postfix = base + extra.mkString results.overall match { diff --git a/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala b/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala index 11b7e07cf..12c8f0122 100644 --- a/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala +++ b/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala @@ -33,7 +33,7 @@ private[sbt] object ReadJsonFromInputStream { */ var headerBuffer = new Array[Byte](128) def expandHeaderBuffer(): Unit = { - val newHeaderBuffer = new Array[Byte](headerBuffer.size * 2) + val newHeaderBuffer = new Array[Byte](headerBuffer.length * 2) headerBuffer.view.zipWithIndex.foreach { case (b, i) => newHeaderBuffer(i) = b } headerBuffer = newHeaderBuffer } diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 64ff77293..8ab221140 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -185,7 +185,7 @@ object Cross { case (v, keys) => val projects = keys.flatMap(project) keys.toSeq.flatMap { k => - project(k).filter(projects.contains).flatMap { p => + project(k).withFilter(projects.contains).flatMap { p => 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 diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 6d0da9315..9c729be03 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -4204,7 +4204,7 @@ object Classpaths { if (module.organization == scalaOrg) { val jarName = module.name + ".jar" val replaceWith = scalaJars(module.revision).toVector - .filter(_.getName == jarName) + .withFilter(_.getName == jarName) .map(f => (Artifact(f.getName.stripSuffix(".jar")), f)) if (replaceWith.isEmpty) arts else replaceWith } else diff --git a/main/src/main/scala/sbt/Extracted.scala b/main/src/main/scala/sbt/Extracted.scala index 2b4992dac..0a3662816 100644 --- a/main/src/main/scala/sbt/Extracted.scala +++ b/main/src/main/scala/sbt/Extracted.scala @@ -46,7 +46,7 @@ final case class Extracted( structure.data.get(inCurrent(key.scope), key.key) @nowarn - private[this] def inCurrent[T](scope: Scope): Scope = + private[this] def inCurrent(scope: Scope): Scope = if (scope.project == This) scope in currentRef else scope /** diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 49d9700f4..48d24b3e5 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -478,7 +478,7 @@ object BuiltinCommands { )(s: State): Parser[(Int, Option[String])] = verbosityParser ~ selectedParser(s, keepKeys).? def selectedParser(s: State, keepKeys: AttributeKey[_] => Boolean): Parser[String] = - singleArgument(allTaskAndSettingKeys(s).filter(keepKeys).map(_.label).toSet) + singleArgument(allTaskAndSettingKeys(s).withFilter(keepKeys).map(_.label).toSet) def verbosityParser: Parser[Int] = success(1) | ((Space ~ "-") ~> ( 'v'.id.+.map(_.size + 1) | diff --git a/main/src/main/scala/sbt/ScopeFilter.scala b/main/src/main/scala/sbt/ScopeFilter.scala index fe0cbff51..1811aa921 100644 --- a/main/src/main/scala/sbt/ScopeFilter.scala +++ b/main/src/main/scala/sbt/ScopeFilter.scala @@ -72,7 +72,7 @@ object ScopeFilter { * static inspections will not show them. */ def all(sfilter: => ScopeFilter): Initialize[Seq[T]] = Def.bind(getData) { data => - data.allScopes.toSeq.filter(sfilter(data)).map(s => Project.inScope(s, i)).join + data.allScopes.toSeq.withFilter(sfilter(data)).map(s => Project.inScope(s, i)).join } } final class TaskKeyAll[T] private[sbt] (i: Initialize[Task[T]]) { @@ -83,7 +83,7 @@ object ScopeFilter { */ def all(sfilter: => ScopeFilter): Initialize[Task[Seq[T]]] = Def.bind(getData) { data => import std.TaskExtra._ - data.allScopes.toSeq.filter(sfilter(data)).map(s => Project.inScope(s, i)).join(_.join) + data.allScopes.toSeq.withFilter(sfilter(data)).map(s => Project.inScope(s, i)).join(_.join) } } diff --git a/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala index c249f4e05..880ee2b7e 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierArtifactsTasks.scala @@ -126,7 +126,8 @@ object CoursierArtifactsTasks { // it puts it in all of them. See for example what happens to // the standalone JAR artifact of the coursier cli module. def allConfigsIfEmpty(configs: Iterable[ConfigRef]): Iterable[ConfigRef] = - if (configs.isEmpty) ivyConfs.filter(_.isPublic).map(c => ConfigRef(c.name)) else configs + if (configs.isEmpty) ivyConfs.withFilter(_.isPublic).map(c => ConfigRef(c.name)) + else configs val extraSbtArtifactsPublication = for { artifact <- extraSbtArtifacts diff --git a/main/src/main/scala/sbt/internal/Clean.scala b/main/src/main/scala/sbt/internal/Clean.scala index 30776d3e8..93a7ac78f 100644 --- a/main/src/main/scala/sbt/internal/Clean.scala +++ b/main/src/main/scala/sbt/internal/Clean.scala @@ -93,7 +93,7 @@ private[sbt] object Clean { val delete = cleanDelete(scope).value val targetDir = (scope / target).?.value.map(_.toPath) - targetDir.filter(_ => full).foreach(deleteContents(_, excludeFilter, view, delete)) + targetDir.withFilter(_ => full).foreach(deleteContents(_, excludeFilter, view, delete)) (scope / cleanFiles).?.value.getOrElse(Nil).foreach { x => if (x.isDirectory) deleteContents(x.toPath, excludeFilter, view, delete) else delete(x.toPath) diff --git a/main/src/main/scala/sbt/internal/CommandExchange.scala b/main/src/main/scala/sbt/internal/CommandExchange.scala index 870bbe6c2..876532663 100644 --- a/main/src/main/scala/sbt/internal/CommandExchange.scala +++ b/main/src/main/scala/sbt/internal/CommandExchange.scala @@ -162,7 +162,7 @@ private[sbt] final class CommandExchange { commandQueue.removeIf { e => e.source.map(_.channelName) == Some(c.name) && e.commandLine != Shutdown } - currentExec.filter(_.source.map(_.channelName) == Some(c.name)).foreach { e => + currentExec.withFilter(_.source.map(_.channelName) == Some(c.name)).foreach { e => Util.ignoreResult(NetworkChannel.cancel(e.execId, e.execId.getOrElse("0"), force = false)) } try commandQueue.put(Exec(s"${ContinuousCommands.stopWatch} ${c.name}", None)) diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 6b566d2c4..3a3da3810 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -1049,7 +1049,7 @@ private[sbt] object Load { // Filter the AutoPlugin settings we included based on which ones are // intended in the AddSettings.AutoPlugins filter. def autoPluginSettings(f: AutoPlugins) = - projectPlugins.filter(f.include).flatMap(_.projectSettings) + projectPlugins.withFilter(f.include).flatMap(_.projectSettings) // Grab all the settings we already loaded from sbt files def settings(files: Seq[File]): Seq[Setting[_]] = { if (files.nonEmpty) diff --git a/main/src/main/scala/sbt/internal/PluginsDebug.scala b/main/src/main/scala/sbt/internal/PluginsDebug.scala index e039a7d01..fffba1622 100644 --- a/main/src/main/scala/sbt/internal/PluginsDebug.scala +++ b/main/src/main/scala/sbt/internal/PluginsDebug.scala @@ -184,7 +184,7 @@ private[sbt] object PluginsDebug { ) lazy val debug = PluginsDebug(context.available) if (!pluginsThisBuild.contains(plugin)) { - val availableInBuilds: List[URI] = perBuild.toList.filter(_._2(plugin)).map(_._1) + val availableInBuilds: List[URI] = perBuild.toList.withFilter(_._2(plugin)).map(_._1) val s1 = s"Plugin ${plugin.label} is only available in builds:" val s2 = availableInBuilds.mkString("\n\t") val s3 = diff --git a/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala b/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala index 172bc6bcd..3a3db79c8 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala @@ -53,7 +53,7 @@ object DOT { // add extra edges from evicted to evicted-by module val evictedByEdges: Seq[Edge] = graph.nodes - .filter(_.isEvicted) + .withFilter(_.isEvicted) .map(m => Edge(m.id, m.id.copy(version = m.evictedByVersion.get))) // remove edges to new evicted-by module which is now replaced by a chain diff --git a/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala b/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala index 7b24dd30e..e569b916d 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala @@ -29,7 +29,7 @@ object Statistics { val directDependencies = graph.dependencyMap(moduleId).filterNot(_.isEvicted).map(_.id) val dependencyStats = directDependencies.map(statsFor).flatMap(_.transitiveStatsWithSelf).toMap - val selfSize = graph.module(moduleId).flatMap(_.jarFile).filter(_.exists).map(_.length) + val selfSize = graph.module(moduleId).flatMap(_.jarFile).withFilter(_.exists).map(_.length) val numDirectDependencies = directDependencies.size val numTransitiveDependencies = dependencyStats.size val transitiveSize = selfSize.getOrElse(0L) + dependencyStats diff --git a/main/src/main/scala/sbt/internal/parser/SbtParser.scala b/main/src/main/scala/sbt/internal/parser/SbtParser.scala index c755bc411..eb7bed7cb 100644 --- a/main/src/main/scala/sbt/internal/parser/SbtParser.scala +++ b/main/src/main/scala/sbt/internal/parser/SbtParser.scala @@ -257,7 +257,7 @@ private[sbt] case class SbtParser(file: File, lines: Seq[String]) extends Parsed !(c contains "=") case _ => false } - parsedTrees.filter(isBadValDef).foreach { badTree => + parsedTrees.withFilter(isBadValDef).foreach { badTree => // Issue errors val positionLine = badTree.pos.line throw new MessageOnlyException( diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala index 69f6aa1aa..01e72e9ef 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala @@ -137,7 +137,7 @@ object DependencyTreeSettings { versionFilter match { case Some(version) => GraphModuleId(org, name, version) :: Nil case None => - graph.nodes.filter(m => m.id.organization == org && m.id.name == name).map(_.id) + graph.nodes.withFilter(m => m.id.organization == org && m.id.name == name).map(_.id) } val graphWidth = asciiGraphWidth.value val output = diff --git a/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala b/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala index 7bbb2edba..39a03e653 100644 --- a/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala +++ b/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala @@ -239,7 +239,7 @@ trait TaskExtra extends TaskExtra0 { def lines: Task[List[String]] = lines0(None) def lines(sid: String): Task[List[String]] = lines0(Some(sid)) - private def lines0[T](sid: Option[String]): Task[List[String]] = + private def lines0(sid: Option[String]): Task[List[String]] = streams map { s => IO.readLines(s.readText(key(in), sid)) } From 952db253a2667c158ea745fbcab8833c1999e6d7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 25 Jun 2023 19:18:43 -0400 Subject: [PATCH 095/207] Bump toolkit versions --- main/src/main/scala/sbt/TemplateCommandUtil.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 755550460..0ca40b3d8 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -274,9 +274,9 @@ private[sbt] object TemplateCommandUtil { System.err.println("Local template not found for: " + arguments.mkString(" ")) } - private final val defaultScalaV = "3.2.2" + private final val defaultScalaV = "3.3.0" private def scalaToolkitTemplate(): Unit = { - val defaultScalaToolkitV = "0.1.7" + val defaultScalaToolkitV = "0.2.0" val scalaV = ask("Scala version", defaultScalaV) val toolkitV = ask("Scala Toolkit version", defaultScalaToolkitV) val content = s""" @@ -294,7 +294,7 @@ libraryDependencies += (toolkitTest % Test) } private def typelevelToolkitTemplate(): Unit = { - val defaultTypelevelToolkitV = "0.0.11" + val defaultTypelevelToolkitV = "0.1.3" val scalaV = ask("Scala version", defaultScalaV) val toolkitV = ask("Typelevel Toolkit version", defaultTypelevelToolkitV) val content = s""" From 24066d6c5b88342d0b462f6d5685f48d3ce54ed0 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 25 Jun 2023 19:23:34 -0400 Subject: [PATCH 096/207] IO 1.9.1 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index f27154224..8d4403a72 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,7 +12,7 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.9.0") + private val ioVersion = nightlyVersion.getOrElse("1.9.1") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0") val zincVersion = nightlyVersion.getOrElse("1.9.1") From 271307d32659178d9427885b41cbb2520de55140 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 25 Jun 2023 23:01:45 -0400 Subject: [PATCH 097/207] Zinc 1.9.2 --- project/Dependencies.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 8d4403a72..f1246e62c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,8 +14,8 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.9.1") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.0") - val zincVersion = nightlyVersion.getOrElse("1.9.1") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.1") + val zincVersion = nightlyVersion.getOrElse("1.9.2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 4b0b929838c7525cbacd790c2111997d80a5c72e Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 26 Jun 2023 00:13:03 -0400 Subject: [PATCH 098/207] sbt 1.9.1 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 7ddb3efbc..0b3321b63 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.9.0-SNAPSHOT" + val v = "1.9.2-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index b6b6c0736..bbfa2161b 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.0" +declare builtin_sbt_version="1.9.1" declare -a residual_args declare -a java_args declare -a scalac_args From de203280299faeddefc8479f98091f3e95275518 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 Jul 2023 18:31:55 -0400 Subject: [PATCH 099/207] Let ++ fall back to a bincompat Scala version Fixes https://github.com/sbt/sbt/issues/7327 **Problem** In builds with mixed Scala patch versions (like scalameta), it's possible for a core subproject to be set to the lastest 2.12.x, but the compiler plugin component is cross published to 2.12.0 etc. `++ 2.12.0` in this case does not work since sbt 1.7.x onwards requires the queried Scala version to be listed in `crossScalaVersions`. **Solution** This implements sbt 1.6.x-like fallback mechanism, but instead of using the queried version (e.g. 2.12.0) it will set the Scala version to one of listed versions that is binary compatible. --- main/src/main/scala/sbt/Cross.scala | 19 +++++++++++++++++-- project/build.properties | 2 +- .../actions/cross-strict-aggregation/test | 4 +++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 8ab221140..8494ebb76 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -20,7 +20,7 @@ import sbt.internal.util.MessageOnlyException import sbt.internal.util.complete.DefaultParsers._ import sbt.internal.util.complete.{ DefaultParsers, Parser } import sbt.io.IO -import sbt.librarymanagement.{ SemanticSelector, VersionNumber } +import sbt.librarymanagement.{ CrossVersion, SemanticSelector, VersionNumber } /** * Cross implements the Scala cross building commands: @@ -340,8 +340,23 @@ object Cross { case (project, scalaVersions) => val selector = SemanticSelector(version) scalaVersions.filter(v => selector.matches(VersionNumber(v))) match { - case Nil => (project, None, scalaVersions) case Seq(version) => (project, Some(version), scalaVersions) + case Nil => + // The Scala version queried via ++, like ++2.13.1 was not found. + // However, it's possible to keep the build going by falling back to a + // binary-compatible Scala version if available. + // In sbt 1.6.x (prior to https://github.com/sbt/sbt/pull/6946), we use to + // use the queried ++2.13.1 version as the fallback, which was wrong and unsafe. + // Instead this picks an actual Scala version listed in `crossScalaVersion`. + val svOpt = scalaVersions.find( + CrossVersion.isScalaBinaryCompatibleWith(newVersion = version, _) + ) + svOpt.foreach { sv => + state.log.info( + s"Falling back ${project.project} to listed $sv instead of unlisted $version" + ) + } + (project, svOpt, scalaVersions) case multiple => sys.error( s"Multiple crossScalaVersions matched query '$version': ${multiple.mkString(", ")}" diff --git a/project/build.properties b/project/build.properties index 40b3b8e7b..3c0b78a7c 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.9.0 +sbt.version=1.9.1 diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test index 8f64e9ce5..c52d1275a 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test @@ -1,6 +1,8 @@ -> ++2.12.0-magic --> ++2.12.12 +> ++2.12.12 + +> clean > ++2.13.11 compile From 5f6eb1b2ec9665c49b53ae0afc4d9c854b31741c Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 Jul 2023 22:06:17 -0400 Subject: [PATCH 100/207] sbt 1.9.2 --- sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt b/sbt index bbfa2161b..fee64cf6d 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.1" +declare builtin_sbt_version="1.9.2" declare -a residual_args declare -a java_args declare -a scalac_args From 4111a8fd2a3fc6082afa312ecaee0ebe2fab6d4b Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 10 Jul 2023 16:18:12 +0200 Subject: [PATCH 101/207] Add the aarch64 binaries for macOS to the sbtn mappings --- launcher-package/build.sbt | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index 870c1a02a..66eade64d 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -71,10 +71,12 @@ val exportRepoUsingCoursier = taskKey[File]("export Maven style repository") val exportRepoCsrDirectory = settingKey[File]("") val x86MacPlatform = "x86_64-apple-darwin" +val aarch64MacPlatform = "aarch64-apple-darwin" val x86LinuxPlatform = "x86_64-pc-linux" val aarch64LinuxPlatform = "aarch64-pc-linux" val x86WindowsPlatform = "x86_64-pc-win32" val x86MacImageName = s"sbtn-$x86MacPlatform" +val aarch64MacImageName = s"sbtn-$aarch64MacPlatform" val x86LinuxImageName = s"sbtn-$x86LinuxPlatform" val aarch64LinuxImageName = s"sbtn-$aarch64LinuxPlatform" val x86WindowsImageName = s"sbtn-$x86WindowsPlatform.exe" @@ -126,26 +128,38 @@ val root = (project in file(".")). sbtnJarsMappings := { val baseUrl = sbtnJarsBaseUrl.value val v = sbtnVersion.value - val macosImageTar = s"sbtn-$x86MacPlatform-$v.tar.gz" + val macosX86ImageTar = s"sbtn-$x86MacPlatform-$v.tar.gz" + val macosAarch64ImageTar = s"sbtn-$aarch64MacPlatform-$v.tar.gz" val linuxX86ImageTar = s"sbtn-$x86LinuxPlatform-$v.tar.gz" val linuxAarch64ImageTar = s"sbtn-$aarch64LinuxPlatform-$v.tar.gz" val windowsImageZip = s"sbtn-$x86WindowsPlatform-$v.zip" val t = target.value - val macosTar = t / macosImageTar + val macosX86Tar = t / macosX86ImageTar + val macosAarch64Tar = t / macosAarch64ImageTar val linuxX86Tar = t / linuxX86ImageTar val linuxAarch64Tar = t / linuxAarch64ImageTar val windowsZip = t / windowsImageZip import dispatch.classic._ - if(!macosTar.exists && !isWindows && sbtIncludeSbtn) { - IO.touch(macosTar) - val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(macosTar)) - try Http(url(s"$baseUrl/v$v/$macosImageTar") >>> writer) + if(!macosX86Tar.exists && !isWindows && sbtIncludeSbtn) { + IO.touch(macosX86Tar) + val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(macosX86Tar)) + try Http(url(s"$baseUrl/v$v/$macosX86ImageTar") >>> writer) finally writer.close() val platformDir = t / x86MacPlatform IO.createDirectory(platformDir) - s"tar zxvf $macosTar --directory $platformDir".! + s"tar zxvf $macosX86Tar --directory $platformDir".! IO.move(platformDir / "sbtn", t / x86MacImageName) } + if(!macosAarch64Tar.exists && !isWindows && sbtIncludeSbtn) { + IO.touch(macosAarch64Tar) + val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(macosAarch64Tar)) + try Http(url(s"$baseUrl/v$v/$macosAarch64ImageTar") >>> writer) + finally writer.close() + val platformDir = t / aarch64MacPlatform + IO.createDirectory(platformDir) + s"tar zxvf $macosAarch64Tar --directory $platformDir".! + IO.move(platformDir / "sbtn", t / aarch64MacImageName) + } if(!linuxX86Tar.exists && !isWindows && sbtIncludeSbtn) { IO.touch(linuxX86Tar) val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(linuxX86Tar)) @@ -179,6 +193,7 @@ val root = (project in file(".")). else if (isWindows) Seq(t / x86WindowsImageName -> s"bin/$x86WindowsImageName") else Seq(t / x86MacImageName -> s"bin/$x86MacImageName", + t / aarch64MacImageName -> s"bin/$aarch64MacImageName", t / x86LinuxImageName -> s"bin/$x86LinuxImageName", t / aarch64LinuxImageName -> s"bin/$aarch64LinuxImageName", t / x86WindowsImageName -> s"bin/$x86WindowsImageName") From d5cde986540e11aac78a80cb2733d8e5fe065678 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 23 Jul 2023 00:59:44 -0400 Subject: [PATCH 102/207] Revert "Add timeout to scripted statements" This reverts commit 155526fb116794a3e348dbf7d629deeeb4a9b84a. --- .../sbt/scriptedtest/BatchScriptRunner.scala | 52 +++++++------------ .../sbt/scriptedtest/ScriptedTests.scala | 9 +--- 2 files changed, 22 insertions(+), 39 deletions(-) diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala index 8c0a4df86..da7d9bb82 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala @@ -9,10 +9,8 @@ package sbt package scriptedtest -import java.util.concurrent.{ Executors, TimeUnit, TimeoutException } - import scala.collection.mutable -import scala.concurrent.duration._ + import sbt.internal.scripted._ private[sbt] object BatchScriptRunner { @@ -20,9 +18,8 @@ private[sbt] object BatchScriptRunner { } /** Defines an alternative script runner that allows batch execution. */ -private[sbt] class BatchScriptRunner extends ScriptRunner with AutoCloseable { +private[sbt] class BatchScriptRunner extends ScriptRunner { import BatchScriptRunner.States - private[this] val service = Executors.newCachedThreadPool() /** Defines a method to run batched execution. * @@ -44,35 +41,26 @@ private[sbt] class BatchScriptRunner extends ScriptRunner with AutoCloseable { } } - private val timeout = 5.minutes def processStatement(handler: StatementHandler, statement: Statement, states: States): Unit = { val state = states(handler).asInstanceOf[handler.State] - val nextStateFuture = service.submit( - () => - try Right(handler(statement.command, statement.arguments, state)) - catch { case e: Exception => Left(e) } - ) - try { - nextStateFuture.get(timeout.toMillis, TimeUnit.MILLISECONDS) match { - case Left(err) => - if (statement.successExpected) { - err match { - case t: TestFailed => - throw new TestException(statement, "Command failed: " + t.getMessage, null) - case _ => throw new TestException(statement, "Command failed", err) - } - } else - () - case Right(s) => - if (statement.successExpected) - states(handler) = s - else - throw new TestException(statement, "Command succeeded but failure was expected", null) - } - } catch { - case e: TimeoutException => throw new TestException(statement, "Command timed out", e) + val nextState = + try Right(handler(statement.command, statement.arguments, state)) + catch { case e: Exception => Left(e) } + nextState match { + case Left(err) => + if (statement.successExpected) { + err match { + case t: TestFailed => + throw new TestException(statement, "Command failed: " + t.getMessage, null) + case _ => throw new TestException(statement, "Command failed", err) + } + } else + () + case Right(s) => + if (statement.successExpected) + states(handler) = s + else + throw new TestException(statement, "Command succeeded but failure was expected", null) } } - - override def close(): Unit = service.shutdown() } 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 803b14610..a85d6eaa6 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -69,8 +69,7 @@ final class ScriptedTests( val handlers = createScriptedHandlers(testDirectory, buffer, prop) val runner = new BatchScriptRunner val states = new mutable.HashMap[StatementHandler, StatementHandler#State]() - try commonRunTest(label, testDirectory, prescripted, handlers, runner, states, buffer) - finally runner.close() + commonRunTest(label, testDirectory, prescripted, handlers, runner, states, buffer) } runOrHandleDisabled(label, testDirectory, singleTestRunner, buffer) } @@ -260,10 +259,7 @@ final class ScriptedTests( } try runBatchTests - finally { - runner.cleanUpHandlers(seqHandlers, states) - runner.close() - } + finally runner.cleanUpHandlers(seqHandlers, states) } private def runOrHandleDisabled( @@ -316,7 +312,6 @@ final class ScriptedTests( case null | _: SocketException => log.error(s" Cause of test exception: ${t.getMessage}") case _ => if (!pending) t.printStackTrace() } - log.play() } if (pending) None else Some(label) } From 4c96f45b20d0fb50aa91f777e6728823a5d1d046 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 23 Jul 2023 01:01:23 -0400 Subject: [PATCH 103/207] Keep the close method --- .../src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala index da7d9bb82..28161edb7 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala @@ -18,7 +18,7 @@ private[sbt] object BatchScriptRunner { } /** Defines an alternative script runner that allows batch execution. */ -private[sbt] class BatchScriptRunner extends ScriptRunner { +private[sbt] class BatchScriptRunner extends ScriptRunner with AutoCloseable { import BatchScriptRunner.States /** Defines a method to run batched execution. @@ -63,4 +63,6 @@ private[sbt] class BatchScriptRunner extends ScriptRunner { throw new TestException(statement, "Command succeeded but failure was expected", null) } } + + override def close(): Unit = () } From 797b9da93eba02b1c350dd3965100a3668595fd6 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 23 Jul 2023 13:11:45 -0400 Subject: [PATCH 104/207] Zinc 1.9.3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index f1246e62c..c37ed8e5b 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.9.1") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.1") - val zincVersion = nightlyVersion.getOrElse("1.9.2") + val zincVersion = nightlyVersion.getOrElse("1.9.3") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From e1ffc2af08f59464e6a4063026337708d390610a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 24 Jul 2023 01:38:07 -0400 Subject: [PATCH 105/207] sbt 1.9.3 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 0b3321b63..ce6a0f709 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.9.2-SNAPSHOT" + val v = "1.9.4-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index fee64cf6d..a1e5f6c91 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.2" +declare builtin_sbt_version="1.9.3" declare -a residual_args declare -a java_args declare -a scalac_args From 897e2552e4f860b83e37d097c382a89734da88ac Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 2 Aug 2023 10:25:27 +0200 Subject: [PATCH 106/207] Maintain order of internal deps --- .../main/scala/sbt/internal/server/BuildServerProtocol.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 50ce2e1b9..e54a0139b 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -43,6 +43,7 @@ import scala.util.control.NonFatal import scala.util.{ Failure, Success, Try } import scala.annotation.nowarn import sbt.testing.Framework +import scala.collection.immutable.ListSet object BuildServerProtocol { import sbt.internal.bsp.codec.JsonProtocol._ @@ -903,7 +904,8 @@ object BuildServerProtocol { allDependencies .groupBy(_._1) .mapValues { deps => - deps.flatMap { case (_, configs) => configs }.toSet + // We use a list set to maintain the order of configs + ListSet(deps.flatMap { case (_, configs) => configs }: _*) } .toSeq } From f8a041f47e6c8e26dde6dcb6a2a0037c49369b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Art=C5=ABras=20=C5=A0lajus?= Date: Wed, 2 Aug 2023 16:30:40 +0300 Subject: [PATCH 107/207] Update sbt launcher script Fix `sbt_script` lookup by replacing all spaces with `%20` (not only the first one) in the path. --- sbt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sbt b/sbt index a1e5f6c91..e7697e190 100755 --- a/sbt +++ b/sbt @@ -320,7 +320,8 @@ addSbtScriptProperty () { : else sbt_script=$0 - sbt_script=${sbt_script/ /%20} + # Use // to replace all spaces with %20. + sbt_script=${sbt_script// /%20} addJava "-Dsbt.script=$sbt_script" fi } From 82ae293e3fcac7f3faa3a611fa38ccf062a216d6 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Fri, 7 Jul 2023 10:59:19 +0200 Subject: [PATCH 108/207] Add a new CommandProgress API. In addition to ExecuteProgress, this new interface allows builds and plugins to receive events when commands start and finish, including the State before and after each command. It also makes cancellation visible to clients by making the Cancelled type top-level. --- main-command/src/main/scala/sbt/Command.scala | 3 +- main/src/main/scala/sbt/CommandProgress.scala | 27 ++++++ main/src/main/scala/sbt/Defaults.scala | 1 + main/src/main/scala/sbt/EvaluateTask.scala | 7 +- main/src/main/scala/sbt/Keys.scala | 2 + main/src/main/scala/sbt/MainLoop.scala | 89 +++++++++++++------ 6 files changed, 102 insertions(+), 27 deletions(-) create mode 100644 main/src/main/scala/sbt/CommandProgress.scala diff --git a/main-command/src/main/scala/sbt/Command.scala b/main-command/src/main/scala/sbt/Command.scala index f4a1ebc6f..3ef6ae3f2 100644 --- a/main-command/src/main/scala/sbt/Command.scala +++ b/main-command/src/main/scala/sbt/Command.scala @@ -184,12 +184,13 @@ object Command { } ) - def process(command: String, state: State): State = { + def process(command: String, state: State, onParseError: String => Unit = _ => ()): State = { (if (command.contains(";")) parse(command, state.combinedParser) else parse(command, state.nonMultiParser)) match { case Right(s) => s() // apply command. command side effects happen here case Left(errMsg) => state.log error errMsg + onParseError(errMsg) state.fail } } diff --git a/main/src/main/scala/sbt/CommandProgress.scala b/main/src/main/scala/sbt/CommandProgress.scala new file mode 100644 index 000000000..5b353d972 --- /dev/null +++ b/main/src/main/scala/sbt/CommandProgress.scala @@ -0,0 +1,27 @@ +package sbt + +/** + * Tracks command execution progress. In addition to ExecuteProgress, this interface + * adds command start and end events, and gives access to the sbt.State at the beginning + * and end of each command. + */ +trait CommandProgress extends ExecuteProgress[Task] { + + /** + * Called before a command starts processing. The command has not yet been parsed. + * + * @param cmd The command string + * @param state The sbt.State before the command starts executing. + */ + def beforeCommand(cmd: String, state: State): Unit + + /** + * Called after a command finished execution. + * + * @param cmd The command string. + * @param result Left in case of an error. If the command cannot be parsed, it will be + * signalled as a ParseException with a detailed message. If the command + * was cancelled by the user, as sbt.Cancelled. + */ + def afterCommand(cmd: String, result: Either[Throwable, State]): Unit +} diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index e7a601c30..8a4a1abcb 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -341,6 +341,7 @@ object Defaults extends BuildCommon { val rs = EvaluateTask.taskTimingProgress.toVector ++ EvaluateTask.taskTraceEvent.toVector rs map { Keys.TaskProgress(_) } }, + commandProgress := Seq(), // progressState is deprecated SettingKey[Option[ProgressState]]("progressState") := None, Previous.cache := new Previous( diff --git a/main/src/main/scala/sbt/EvaluateTask.scala b/main/src/main/scala/sbt/EvaluateTask.scala index 29749cfde..dfeaf9f18 100644 --- a/main/src/main/scala/sbt/EvaluateTask.scala +++ b/main/src/main/scala/sbt/EvaluateTask.scala @@ -289,7 +289,12 @@ object EvaluateTask { extracted, structure ) - val reporters = maker.map(_.progress) ++ state.get(Keys.taskProgress) ++ + val reporters = maker.map(_.progress) ++ state.get(Keys.taskProgress) ++ getSetting( + Keys.commandProgress, + Seq(), + extracted, + structure + ) ++ (if (SysProp.taskTimings) new TaskTimings(reportOnShutdown = false, state.globalLogging.full) :: Nil else Nil) diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 0fb3c3bdc..e320f7147 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -600,6 +600,7 @@ object Keys { def apply(progress: ExecuteProgress[Task]): TaskProgress = new TaskProgress(progress) } private[sbt] val currentTaskProgress = AttributeKey[TaskProgress]("current-task-progress") + private[sbt] val currentCommandProgress = AttributeKey[Seq[CommandProgress]]("current-command-progress") private[sbt] val taskProgress = AttributeKey[sbt.internal.TaskProgress]("active-task-progress") val useSuperShell = settingKey[Boolean]("Enables (true) or disables the super shell.") val superShellMaxTasks = settingKey[Int]("The max number of tasks to display in the supershell progress report") @@ -613,6 +614,7 @@ object Keys { private[sbt] val postProgressReports = settingKey[Unit]("Internally used to modify logger.").withRank(DTask) @deprecated("No longer used", "1.3.0") private[sbt] val executeProgress = settingKey[State => TaskProgress]("Experimental task execution listener.").withRank(DTask) + val commandProgress = settingKey[Seq[CommandProgress]]("Command progress listeners receive events when commands start and end, in addition to task progress events.") val lintUnused = inputKey[Unit]("Check for keys unused by other settings and tasks.") val lintIncludeFilter = settingKey[String => Boolean]("Filters key names that should be included in the lint check.") val lintExcludeFilter = settingKey[String => Boolean]("Filters key names that should be excluded in the lint check.") diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index 3c7a800a6..cf02ae2b4 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -11,17 +11,16 @@ package sbt import java.io.PrintWriter import java.util.concurrent.RejectedExecutionException import java.util.Properties - -import sbt.BasicCommandStrings.{ StashOnFailure, networkExecPrefix } +import sbt.BasicCommandStrings.{StashOnFailure, networkExecPrefix} import sbt.internal.ShutdownHooks import sbt.internal.langserver.ErrorCodes import sbt.internal.protocol.JsonRpcResponseError import sbt.internal.nio.CheckBuildSources.CheckBuildSourcesKey -import sbt.internal.util.{ ErrorHandling, GlobalLogBacking, Prompt, Terminal => ITerminal } -import sbt.internal.{ ShutdownHooks, TaskProgress } -import sbt.io.{ IO, Using } +import sbt.internal.util.{AttributeKey, ErrorHandling, GlobalLogBacking, Prompt, Terminal => ITerminal} +import sbt.internal.{ShutdownHooks, TaskProgress} +import sbt.io.{IO, Using} import sbt.protocol._ -import sbt.util.{ Logger, LoggerContext } +import sbt.util.{Logger, LoggerContext} import scala.annotation.tailrec import scala.concurrent.duration._ @@ -29,6 +28,8 @@ import scala.util.control.NonFatal import sbt.internal.FastTrackCommands import sbt.internal.SysProp +import java.text.ParseException + object MainLoop { /** Entry point to run the remaining commands in State with managed global logging.*/ @@ -212,16 +213,29 @@ object MainLoop { ) try { def process(): State = { - val progressState = state.get(sbt.Keys.currentTaskProgress) match { - case Some(_) => state - case _ => - if (state.get(Keys.stateBuildStructure).isDefined) { - val extracted = Project.extract(state) - val progress = EvaluateTask.executeProgress(extracted, extracted.structure, state) - state.put(sbt.Keys.currentTaskProgress, new Keys.TaskProgress(progress)) - } else state + def getOrSet[T](state: State, key: AttributeKey[T], value: Extracted => T): State = { + state.get(key) match { + case Some(_) => state + case _ => + if (state.get(Keys.stateBuildStructure).isDefined) { + val extracted = Project.extract(state) + state.put(key, value(extracted)) + } else state + } } - exchange.setState(progressState) + val progressState = getOrSet( + state, + sbt.Keys.currentTaskProgress, + extracted => + new Keys.TaskProgress( + EvaluateTask.executeProgress(extracted, extracted.structure, state) + ) + ) + + val cmdProgressState = + getOrSet(progressState, sbt.Keys.currentCommandProgress, _.get(Keys.commandProgress)) + + exchange.setState(cmdProgressState) exchange.setExec(Some(exec)) val (restoreTerminal, termState) = channelName.flatMap(exchange.channelForName) match { case Some(c) => @@ -231,9 +245,13 @@ object MainLoop { (() => { ITerminal.set(prevTerminal) c.terminal.flush() - }) -> progressState.put(Keys.terminalKey, Terminal(c.terminal)) - case _ => (() => ()) -> progressState.put(Keys.terminalKey, Terminal(ITerminal.get)) + }) -> cmdProgressState.put(Keys.terminalKey, Terminal(c.terminal)) + case _ => (() => ()) -> cmdProgressState.put(Keys.terminalKey, Terminal(ITerminal.get)) } + + val currentCmdProgress = + cmdProgressState.get(sbt.Keys.currentCommandProgress).getOrElse(Nil) + currentCmdProgress.foreach(_.beforeCommand(exec.commandLine, progressState)) /* * FastTrackCommands.evaluate can be significantly faster than Command.process because * it avoids an expensive parsing step for internal commands that are easy to parse. @@ -241,16 +259,29 @@ object MainLoop { * but slower. */ val newState = try { - FastTrackCommands + var errorMsg: Option[String] = None + val res = FastTrackCommands .evaluate(termState, exec.commandLine) - .getOrElse(Command.process(exec.commandLine, termState)) + .getOrElse(Command.process(exec.commandLine, termState, m => errorMsg = Some(m))) + errorMsg match { + case Some(msg) => + currentCmdProgress.foreach( + _.afterCommand(exec.commandLine, Left(new ParseException(msg, 0))) + ) + case None => currentCmdProgress.foreach(_.afterCommand(exec.commandLine, Right(res))) + } + res } catch { case _: RejectedExecutionException => - // No stack trace since this is just to notify the user which command they cancelled - object Cancelled extends Throwable(exec.commandLine, null, true, false) { - override def toString: String = s"Cancelled: ${exec.commandLine}" - } - throw Cancelled + val cancelled = new Cancelled(exec.commandLine) + currentCmdProgress + .foreach(_.afterCommand(exec.commandLine, Left(cancelled))) + throw cancelled + + case e: Throwable => + currentCmdProgress + .foreach(_.afterCommand(exec.commandLine, Left(e))) + throw e } finally { // Flush the terminal output after command evaluation to ensure that all output // is displayed in the thin client before we report the command status. Also @@ -270,7 +301,10 @@ object MainLoop { } exchange.setExec(None) newState.get(sbt.Keys.currentTaskProgress).foreach(_.progress.stop()) - newState.remove(sbt.Keys.currentTaskProgress).remove(Keys.terminalKey) + newState + .remove(sbt.Keys.currentTaskProgress) + .remove(Keys.terminalKey) + .remove(Keys.currentCommandProgress) } state.get(CheckBuildSourcesKey) match { case Some(cbs) => @@ -341,3 +375,8 @@ object MainLoop { ExitCode(ErrorCodes.UnknownError) } else ExitCode.Success } + +// No stack trace since this is just to notify the user which command they cancelled +class Cancelled(cmdLine: String) extends Throwable(cmdLine, null, true, false) { + override def toString: String = s"Cancelled: $cmdLine" +} From 0f53349ce93181f70d381df9972dbcd2daad5384 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Tue, 8 Aug 2023 09:54:09 +0200 Subject: [PATCH 109/207] Add method overload to keep binary compatibility --- main-command/src/main/scala/sbt/Command.scala | 4 +++- main/src/main/scala/sbt/MainLoop.scala | 16 +++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/main-command/src/main/scala/sbt/Command.scala b/main-command/src/main/scala/sbt/Command.scala index 3ef6ae3f2..15db781c9 100644 --- a/main-command/src/main/scala/sbt/Command.scala +++ b/main-command/src/main/scala/sbt/Command.scala @@ -184,7 +184,9 @@ object Command { } ) - def process(command: String, state: State, onParseError: String => Unit = _ => ()): State = { + // overload instead of default parameter to keep binary compatibility + def process(command: String, state: State): State = process(command, state, _ => ()) + def process(command: String, state: State, onParseError: String => Unit): State = { (if (command.contains(";")) parse(command, state.combinedParser) else parse(command, state.nonMultiParser)) match { case Right(s) => s() // apply command. command side effects happen here diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index cf02ae2b4..4b293b550 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -11,16 +11,22 @@ package sbt import java.io.PrintWriter import java.util.concurrent.RejectedExecutionException import java.util.Properties -import sbt.BasicCommandStrings.{StashOnFailure, networkExecPrefix} +import sbt.BasicCommandStrings.{ StashOnFailure, networkExecPrefix } import sbt.internal.ShutdownHooks import sbt.internal.langserver.ErrorCodes import sbt.internal.protocol.JsonRpcResponseError import sbt.internal.nio.CheckBuildSources.CheckBuildSourcesKey -import sbt.internal.util.{AttributeKey, ErrorHandling, GlobalLogBacking, Prompt, Terminal => ITerminal} -import sbt.internal.{ShutdownHooks, TaskProgress} -import sbt.io.{IO, Using} +import sbt.internal.util.{ + AttributeKey, + ErrorHandling, + GlobalLogBacking, + Prompt, + Terminal => ITerminal +} +import sbt.internal.{ ShutdownHooks, TaskProgress } +import sbt.io.{ IO, Using } import sbt.protocol._ -import sbt.util.{Logger, LoggerContext} +import sbt.util.{ Logger, LoggerContext } import scala.annotation.tailrec import scala.concurrent.duration._ From 193dba708f400ba1f3fad597de785a1ede7490e7 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Tue, 8 Aug 2023 10:14:48 +0200 Subject: [PATCH 110/207] Add missing header. --- main/src/main/scala/sbt/CommandProgress.scala | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/main/src/main/scala/sbt/CommandProgress.scala b/main/src/main/scala/sbt/CommandProgress.scala index 5b353d972..757cd0a60 100644 --- a/main/src/main/scala/sbt/CommandProgress.scala +++ b/main/src/main/scala/sbt/CommandProgress.scala @@ -1,3 +1,11 @@ +/* + * sbt + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + package sbt /** From 51a774b081473feafe13db910d4ae906eb7839ce Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Tue, 8 Aug 2023 11:29:32 +0200 Subject: [PATCH 111/207] Fix failing test case --- main/src/main/scala/sbt/MainLoop.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index 4b293b550..cbee12e42 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -239,7 +239,11 @@ object MainLoop { ) val cmdProgressState = - getOrSet(progressState, sbt.Keys.currentCommandProgress, _.get(Keys.commandProgress)) + getOrSet( + progressState, + sbt.Keys.currentCommandProgress, + _.getOpt(Keys.commandProgress).getOrElse(Seq()) + ) exchange.setState(cmdProgressState) exchange.setExec(Some(exec)) From 5515619eccd99fde0722f658abb13396f271bbb0 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 10 Aug 2023 16:11:28 +0200 Subject: [PATCH 112/207] Implement buildTarget/javacOptions --- main/src/main/scala/sbt/EvaluateTask.scala | 6 +- main/src/main/scala/sbt/Keys.scala | 16 ++- main/src/main/scala/sbt/internal/Load.scala | 12 +- .../internal/server/BuildServerProtocol.scala | 90 ++++++++---- main/src/test/scala/PluginCommandTest.scala | 2 +- .../sbt/internal/bsp/JavacOptionsItem.scala | 57 ++++++++ .../sbt/internal/bsp/JavacOptionsParams.scala | 37 +++++ .../sbt/internal/bsp/JavacOptionsResult.scala | 32 +++++ .../bsp/codec/JavacOptionsItemFormats.scala | 33 +++++ .../bsp/codec/JavacOptionsParamsFormats.scala | 27 ++++ .../bsp/codec/JavacOptionsResultFormats.scala | 27 ++++ .../sbt/internal/bsp/codec/JsonProtocol.scala | 5 +- protocol/src/main/contraband/bsp.contra | 80 +++++++---- .../test/scala/testpkg/BuildServerTest.scala | 128 ++++++++++-------- 14 files changed, 423 insertions(+), 129 deletions(-) create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsItem.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsParams.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsResult.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsItemFormats.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsParamsFormats.scala create mode 100644 protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsResultFormats.scala diff --git a/main/src/main/scala/sbt/EvaluateTask.scala b/main/src/main/scala/sbt/EvaluateTask.scala index 29749cfde..eea3b357a 100644 --- a/main/src/main/scala/sbt/EvaluateTask.scala +++ b/main/src/main/scala/sbt/EvaluateTask.scala @@ -148,18 +148,20 @@ final case class PluginData( resolvers: Option[Vector[Resolver]], report: Option[UpdateReport], scalacOptions: Seq[String], + javacOptions: Seq[String], unmanagedSourceDirectories: Seq[File], unmanagedSources: Seq[File], managedSourceDirectories: Seq[File], managedSources: Seq[File], + classDirectory: Option[File], buildTarget: Option[BuildTargetIdentifier] ) { val classpath: Seq[Attributed[File]] = definitionClasspath ++ dependencyClasspath } object PluginData { - private[sbt] def apply(dependencyClasspath: Def.Classpath): PluginData = - PluginData(dependencyClasspath, Nil, None, None, Nil, Nil, Nil, Nil, Nil, None) + private[sbt] def apply(depClasspath: Def.Classpath): PluginData = + PluginData(depClasspath, Nil, None, None, Nil, Nil, Nil, Nil, Nil, Nil, None, None) } object EvaluateTask { diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 0fb3c3bdc..3720a3693 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -419,19 +419,21 @@ object Keys { val bspBuildTargetOutputPathsItem = taskKey[OutputPathsItem]("").withRank(DTask) val bspBuildTargetCompile = inputKey[Unit]("").withRank(DTask) val bspBuildTargetCompileItem = taskKey[Int]("").withRank(DTask) - val bspBuildTargetTest = inputKey[Unit]("Corresponds to buildTarget/test request").withRank(DTask) - val bspBuildTargetRun = inputKey[Unit]("Corresponds to buildTarget/run request").withRank(DTask) - val bspBuildTargetCleanCache = inputKey[Unit]("Corresponds to buildTarget/cleanCache request").withRank(DTask) + val bspBuildTargetTest = inputKey[Unit]("Implementation of buildTarget/test").withRank(DTask) + val bspBuildTargetRun = inputKey[Unit]("Implementation of buildTarget/run").withRank(DTask) + val bspBuildTargetCleanCache = inputKey[Unit]("Implementation of buildTarget/cleanCache").withRank(DTask) val bspBuildTargetScalacOptions = inputKey[Unit]("").withRank(DTask) val bspBuildTargetScalacOptionsItem = taskKey[ScalacOptionsItem]("").withRank(DTask) + val bspBuildTargetJavacOptions = inputKey[Unit]("Implementation of buildTarget/javacOptions").withRank(DTask) + val bspBuildTargetJavacOptionsItem = taskKey[JavacOptionsItem]("Item of buildTarget/javacOptions").withRank(DTask) - val bspBuildTargetJVMRunEnvironment = inputKey[Unit]("Corresponds to the buildTarget/jvmRunEnvironment request").withRank(DTask) - val bspBuildTargetJVMTestEnvironment = inputKey[Unit]("Corresponds to the buildTarget/jvmTestEnvironment request").withRank(DTask) + val bspBuildTargetJVMRunEnvironment = inputKey[Unit]("Implementation of buildTarget/jvmRunEnvironment").withRank(DTask) + val bspBuildTargetJVMTestEnvironment = inputKey[Unit]("Implementation of buildTarget/jvmTestEnvironment").withRank(DTask) val bspBuildTargetJvmEnvironmentItem = taskKey[JvmEnvironmentItem]("Computes JVM environment item").withRank(DTask) - val bspScalaTestClasses = inputKey[Unit]("Corresponds to buildTarget/scalaTestClasses request").withRank(DTask) + val bspScalaTestClasses = inputKey[Unit]("Implementation of buildTarget/scalaTestClasses").withRank(DTask) val bspScalaTestClassesItem = taskKey[Seq[ScalaTestClassesItem]]("").withRank(DTask) - val bspScalaMainClasses = inputKey[Unit]("Corresponds to buildTarget/scalaMainClasses request").withRank(DTask) + val bspScalaMainClasses = inputKey[Unit]("Implementation of buildTarget/scalaMainClasses").withRank(DTask) val bspScalaMainClassesItem = taskKey[ScalaMainClassesItem]("").withRank(DTask) val bspReporter = taskKey[BuildServerReporter]("").withRank(DTask) diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 3a3da3810..b00e0a911 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -1176,21 +1176,25 @@ private[sbt] object Load { val prod = (Configurations.Runtime / exportedProducts).value val cp = (Configurations.Runtime / fullClasspath).value val opts = (Configurations.Compile / scalacOptions).value + val javaOpts = (Configurations.Compile / javacOptions).value val unmanagedSrcDirs = (Configurations.Compile / unmanagedSourceDirectories).value val unmanagedSrcs = (Configurations.Compile / unmanagedSources).value val managedSrcDirs = (Configurations.Compile / managedSourceDirectories).value val managedSrcs = (Configurations.Compile / managedSources).value val buildTarget = (Configurations.Compile / bspTargetIdentifier).value + val clsDir = (Configurations.Compile / classDirectory).value PluginData( removeEntries(cp, prod), prod, Some(fullResolvers.value.toVector), Some(update.value), opts, + javaOpts, unmanagedSrcDirs, unmanagedSrcs, managedSrcDirs, managedSrcs, + Some(clsDir), Some(buildTarget) ) }, @@ -1244,11 +1248,7 @@ private[sbt] object Load { } def noPlugins(dir: File, config: LoadBuildConfiguration): LoadedPlugins = - loadPluginDefinition( - dir, - config, - PluginData(config.globalPluginClasspath, Nil, None, None, Nil, Nil, Nil, Nil, Nil, None) - ) + loadPluginDefinition(dir, config, PluginData(config.globalPluginClasspath)) def buildPlugins(dir: File, s: State, config: LoadBuildConfiguration): LoadedPlugins = loadPluginDefinition(dir, config, buildPluginDefinition(dir, s, config)) @@ -1444,6 +1444,8 @@ final case class LoadBuildConfiguration( Nil, Nil, Nil, + Nil, + None, None ) case None => PluginData(globalPluginClasspath) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index e54a0139b..2d89185d5 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -201,24 +201,12 @@ object BuildServerProtocol { }.evaluated, bspBuildTargetCleanCache / aggregate := false, bspBuildTargetScalacOptions := bspInputTask { (state, _, workspace, filter) => - val builds = workspace.builds Def.task { val items = bspBuildTargetScalacOptionsItem.result.all(filter).value val appProvider = appConfiguration.value.provider() val sbtJars = appProvider.mainClasspath() - val buildItems = builds.map { - build => - val plugins: LoadedPlugins = build._2.unit.plugins - val scalacOptions = plugins.pluginData.scalacOptions - val pluginClassPath = plugins.classpath - val classpath = (pluginClassPath ++ sbtJars).map(_.toURI).toVector - val item = ScalacOptionsItem( - build._1, - scalacOptions.toVector, - classpath, - new File(build._2.localBase, "project/target").toURI - ) - Value(item) + val buildItems = workspace.builds.map { + case (targetId, build) => Value(scalacOptionsBuildItem(sbtJars, targetId, build)) } val successfulItems = anyOrThrow(items ++ buildItems) val result = ScalacOptionsResult(successfulItems.toVector) @@ -226,6 +214,20 @@ object BuildServerProtocol { } }.evaluated, bspBuildTargetScalacOptions / aggregate := false, + bspBuildTargetJavacOptions := bspInputTask { (state, _, workspace, filter) => + Def.task { + val items = bspBuildTargetJavacOptionsItem.result.all(filter).value + val appProvider = appConfiguration.value.provider() + val sbtJars = appProvider.mainClasspath() + val buildItems = workspace.builds.map { + case (targetId, build) => Value(javacOptionsBuildItem(sbtJars, targetId, build)) + } + val successfulItems = anyOrThrow(items ++ buildItems) + val result = JavacOptionsResult(successfulItems.toVector) + state.respondEvent(result) + } + }.evaluated, + bspBuildTargetJavacOptions / aggregate := false, bspScalaTestClasses := bspInputTask { (state, _, workspace, filter) => workspace.warnIfBuildsNonEmpty(Method.ScalaTestClasses, state.log) Def.task { @@ -286,7 +288,20 @@ object BuildServerProtocol { }, bspBuildTargetCompileItem := bspCompileTask.value, bspBuildTargetRun := bspRunTask.evaluated, - bspBuildTargetScalacOptionsItem := scalacOptionsTask.value, + bspBuildTargetScalacOptionsItem := { + val target = Keys.bspTargetIdentifier.value + val scalacOptions = Keys.scalacOptions.value.toVector + val classDirectory = Keys.classDirectory.value + val classpath = classpathTask.value + ScalacOptionsItem(target, scalacOptions, classpath, classDirectory.toURI) + }, + bspBuildTargetJavacOptionsItem := { + val target = Keys.bspTargetIdentifier.value + val javacOptions = Keys.javacOptions.value.toVector + val classDirectory = Keys.classDirectory.value + val classpath = classpathTask.value + JavacOptionsItem(target, javacOptions, classpath, classDirectory.toURI) + }, bspBuildTargetJVMRunEnvironment := bspInputTask { (state, _, _, filter) => Def.task { val items = bspBuildTargetJvmEnvironmentItem.result.all(filter).value @@ -328,7 +343,7 @@ object BuildServerProtocol { } } ) - private object Method { + private[sbt] object Method { final val Initialize = "build/initialize" final val BuildTargets = "workspace/buildTargets" final val Reload = "workspace/reload" @@ -665,6 +680,34 @@ object BuildServerProtocol { ) } + private def scalacOptionsBuildItem( + sbtJars: Seq[File], + targetId: BuildTargetIdentifier, + build: LoadedBuildUnit + ): ScalacOptionsItem = { + val plugins: LoadedPlugins = build.unit.plugins + val scalacOptions = plugins.pluginData.scalacOptions.toVector + val pluginClassPath = plugins.classpath + val classpath = (pluginClassPath ++ sbtJars).map(_.toURI).toVector + val classDirectory = plugins.pluginData.classDirectory.map(_.toURI) + val item = ScalacOptionsItem(targetId, scalacOptions, classpath, classDirectory) + item + } + + private def javacOptionsBuildItem( + sbtJars: Seq[File], + targetId: BuildTargetIdentifier, + build: LoadedBuildUnit + ): JavacOptionsItem = { + val plugins: LoadedPlugins = build.unit.plugins + val javacOptions = plugins.pluginData.javacOptions.toVector + val pluginClassPath = plugins.classpath + val classpath = (pluginClassPath ++ sbtJars).map(_.toURI).toVector + val classDirectory = plugins.pluginData.classDirectory.map(_.toURI) + val item = JavacOptionsItem(targetId, javacOptions, classpath, classDirectory) + item + } + private def bspInputTask[T]( taskImpl: ( State, @@ -697,26 +740,17 @@ object BuildServerProtocol { ) } - private def scalacOptionsTask: Def.Initialize[Task[ScalacOptionsItem]] = Def.taskDyn { - val target = Keys.bspTargetIdentifier.value - val scalacOptions = Keys.scalacOptions.value - val classDirectory = Keys.classDirectory.value + private lazy val classpathTask: Def.Initialize[Task[Vector[URI]]] = Def.taskDyn { val externalDependencyClasspath = Keys.externalDependencyClasspath.value - val internalDependencyClasspath = for { (ref, configs) <- bspInternalDependencyConfigurations.value config <- configs } yield ref / config / Keys.classDirectory - Def.task { val classpath = internalDependencyClasspath.join.value.distinct ++ externalDependencyClasspath.map(_.data) - ScalacOptionsItem( - target, - scalacOptions.toVector, - classpath.map(_.toURI).toVector, - classDirectory.toURI - ) + + classpath.map(_.toURI).toVector } } diff --git a/main/src/test/scala/PluginCommandTest.scala b/main/src/test/scala/PluginCommandTest.scala index b0fa5662b..d49950a6b 100644 --- a/main/src/test/scala/PluginCommandTest.scala +++ b/main/src/test/scala/PluginCommandTest.scala @@ -115,7 +115,7 @@ object FakeState { Nil ) - val pluginData = PluginData(Nil, Nil, None, None, Nil, Nil, Nil, Nil, Nil, None) + val pluginData = PluginData(Nil, Nil, None, None, Nil, Nil, Nil, Nil, Nil, Nil, None, None) val builds: DetectedModules[BuildDef] = new DetectedModules[BuildDef](Nil) val detectedAutoPlugins: Seq[DetectedAutoPlugin] = diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsItem.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsItem.scala new file mode 100644 index 000000000..30157dfb5 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsItem.scala @@ -0,0 +1,57 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** + * @param options Additional arguments to the compiler. + For example, -deprecation. + * @param classpath The dependency classpath for this target, must be + identical to what is passed as arguments to + the -classpath flag in the command line interface + of scalac. + * @param classDirectory The output directory for classfiles produced by this target + */ +final class JavacOptionsItem private ( + val target: sbt.internal.bsp.BuildTargetIdentifier, + val options: Vector[String], + val classpath: Vector[java.net.URI], + val classDirectory: Option[java.net.URI]) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: JavacOptionsItem => (this.target == x.target) && (this.options == x.options) && (this.classpath == x.classpath) && (this.classDirectory == x.classDirectory) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.JavacOptionsItem".##) + target.##) + options.##) + classpath.##) + classDirectory.##) + } + override def toString: String = { + "JavacOptionsItem(" + target + ", " + options + ", " + classpath + ", " + classDirectory + ")" + } + private[this] def copy(target: sbt.internal.bsp.BuildTargetIdentifier = target, options: Vector[String] = options, classpath: Vector[java.net.URI] = classpath, classDirectory: Option[java.net.URI] = classDirectory): JavacOptionsItem = { + new JavacOptionsItem(target, options, classpath, classDirectory) + } + def withTarget(target: sbt.internal.bsp.BuildTargetIdentifier): JavacOptionsItem = { + copy(target = target) + } + def withOptions(options: Vector[String]): JavacOptionsItem = { + copy(options = options) + } + def withClasspath(classpath: Vector[java.net.URI]): JavacOptionsItem = { + copy(classpath = classpath) + } + def withClassDirectory(classDirectory: Option[java.net.URI]): JavacOptionsItem = { + copy(classDirectory = classDirectory) + } + def withClassDirectory(classDirectory: java.net.URI): JavacOptionsItem = { + copy(classDirectory = Option(classDirectory)) + } +} +object JavacOptionsItem { + + def apply(target: sbt.internal.bsp.BuildTargetIdentifier, options: Vector[String], classpath: Vector[java.net.URI], classDirectory: Option[java.net.URI]): JavacOptionsItem = new JavacOptionsItem(target, options, classpath, classDirectory) + def apply(target: sbt.internal.bsp.BuildTargetIdentifier, options: Vector[String], classpath: Vector[java.net.URI], classDirectory: java.net.URI): JavacOptionsItem = new JavacOptionsItem(target, options, classpath, Option(classDirectory)) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsParams.scala new file mode 100644 index 000000000..4cc1ebbe2 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsParams.scala @@ -0,0 +1,37 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** + * Javac options + * The build target javac options request is sent from the client to the server + * to query for the list of compiler options necessary to compile in a given list of targets. + */ +final class JavacOptionsParams private ( + val targets: Vector[sbt.internal.bsp.BuildTargetIdentifier]) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: JavacOptionsParams => (this.targets == x.targets) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (17 + "sbt.internal.bsp.JavacOptionsParams".##) + targets.##) + } + override def toString: String = { + "JavacOptionsParams(" + targets + ")" + } + private[this] def copy(targets: Vector[sbt.internal.bsp.BuildTargetIdentifier] = targets): JavacOptionsParams = { + new JavacOptionsParams(targets) + } + def withTargets(targets: Vector[sbt.internal.bsp.BuildTargetIdentifier]): JavacOptionsParams = { + copy(targets = targets) + } +} +object JavacOptionsParams { + + def apply(targets: Vector[sbt.internal.bsp.BuildTargetIdentifier]): JavacOptionsParams = new JavacOptionsParams(targets) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsResult.scala new file mode 100644 index 000000000..fb89063b4 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/JavacOptionsResult.scala @@ -0,0 +1,32 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +final class JavacOptionsResult private ( + val items: Vector[sbt.internal.bsp.JavacOptionsItem]) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: JavacOptionsResult => (this.items == x.items) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (17 + "sbt.internal.bsp.JavacOptionsResult".##) + items.##) + } + override def toString: String = { + "JavacOptionsResult(" + items + ")" + } + private[this] def copy(items: Vector[sbt.internal.bsp.JavacOptionsItem] = items): JavacOptionsResult = { + new JavacOptionsResult(items) + } + def withItems(items: Vector[sbt.internal.bsp.JavacOptionsItem]): JavacOptionsResult = { + copy(items = items) + } +} +object JavacOptionsResult { + + def apply(items: Vector[sbt.internal.bsp.JavacOptionsItem]): JavacOptionsResult = new JavacOptionsResult(items) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsItemFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsItemFormats.scala new file mode 100644 index 000000000..2605a99dc --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsItemFormats.scala @@ -0,0 +1,33 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait JavacOptionsItemFormats { self: sbt.internal.bsp.codec.BuildTargetIdentifierFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val JavacOptionsItemFormat: JsonFormat[sbt.internal.bsp.JavacOptionsItem] = new JsonFormat[sbt.internal.bsp.JavacOptionsItem] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.JavacOptionsItem = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val target = unbuilder.readField[sbt.internal.bsp.BuildTargetIdentifier]("target") + val options = unbuilder.readField[Vector[String]]("options") + val classpath = unbuilder.readField[Vector[java.net.URI]]("classpath") + val classDirectory = unbuilder.readField[Option[java.net.URI]]("classDirectory") + unbuilder.endObject() + sbt.internal.bsp.JavacOptionsItem(target, options, classpath, classDirectory) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.JavacOptionsItem, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("target", obj.target) + builder.addField("options", obj.options) + builder.addField("classpath", obj.classpath) + builder.addField("classDirectory", obj.classDirectory) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsParamsFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsParamsFormats.scala new file mode 100644 index 000000000..91bd41177 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsParamsFormats.scala @@ -0,0 +1,27 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait JavacOptionsParamsFormats { self: sbt.internal.bsp.codec.BuildTargetIdentifierFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val JavacOptionsParamsFormat: JsonFormat[sbt.internal.bsp.JavacOptionsParams] = new JsonFormat[sbt.internal.bsp.JavacOptionsParams] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.JavacOptionsParams = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val targets = unbuilder.readField[Vector[sbt.internal.bsp.BuildTargetIdentifier]]("targets") + unbuilder.endObject() + sbt.internal.bsp.JavacOptionsParams(targets) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.JavacOptionsParams, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("targets", obj.targets) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsResultFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsResultFormats.scala new file mode 100644 index 000000000..ee381306a --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JavacOptionsResultFormats.scala @@ -0,0 +1,27 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp.codec +import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } +trait JavacOptionsResultFormats { self: sbt.internal.bsp.codec.JavacOptionsItemFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val JavacOptionsResultFormat: JsonFormat[sbt.internal.bsp.JavacOptionsResult] = new JsonFormat[sbt.internal.bsp.JavacOptionsResult] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.JavacOptionsResult = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val items = unbuilder.readField[Vector[sbt.internal.bsp.JavacOptionsItem]]("items") + unbuilder.endObject() + sbt.internal.bsp.JavacOptionsResult(items) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.JavacOptionsResult, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("items", obj.items) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala index 3a3ff0906..f6cae48d8 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/JsonProtocol.scala @@ -56,10 +56,13 @@ trait JsonProtocol extends sjsonnew.BasicJsonProtocol with sbt.internal.bsp.codec.RunParamsFormats with sbt.internal.bsp.codec.RunResultFormats with sbt.internal.bsp.codec.ScalaBuildTargetFormats - with sbt.internal.bsp.codec.SbtBuildTargetFormats with sbt.internal.bsp.codec.ScalacOptionsParamsFormats with sbt.internal.bsp.codec.ScalacOptionsItemFormats with sbt.internal.bsp.codec.ScalacOptionsResultFormats + with sbt.internal.bsp.codec.JavacOptionsParamsFormats + with sbt.internal.bsp.codec.JavacOptionsItemFormats + with sbt.internal.bsp.codec.JavacOptionsResultFormats + with sbt.internal.bsp.codec.SbtBuildTargetFormats with sbt.internal.bsp.codec.BspConnectionDetailsFormats with sbt.internal.bsp.codec.MetalsMetadataFormats with sbt.internal.bsp.codec.ScalaTestClassesItemFormats diff --git a/protocol/src/main/contraband/bsp.contra b/protocol/src/main/contraband/bsp.contra index 033143005..dd621786a 100644 --- a/protocol/src/main/contraband/bsp.contra +++ b/protocol/src/main/contraband/bsp.contra @@ -625,31 +625,6 @@ type ScalaBuildTarget { jars: [String]! } -# sbt Extension - -## Contains sbt-specific metadata for providing editor support for sbt build files. -## This metadata is embedded in the data: Option[Json] field of the BuildTarget definition -## when the dataKind field contains "sbt". -type SbtBuildTarget { - ## The sbt version. Useful to support version-dependent syntax. - sbtVersion: String! - - ## A sequence of Scala imports that are automatically imported in the sbt build files. - autoImports: [String]! - - ## The Scala build target describing the scala - ## version and scala jars used by this sbt version. - scalaBuildTarget: sbt.internal.bsp.ScalaBuildTarget! - - ## An optional parent if the target has an sbt meta project. - parent: sbt.internal.bsp.BuildTargetIdentifier - - ## The inverse of parent, list of targets that have this build target - ## defined as their parent. It can contain normal project targets or - ## sbt build targets if this target represents an sbt meta-meta build. - children: [sbt.internal.bsp.BuildTargetIdentifier]! -} - ## Scalac options ## The build target scalac options request is sent from the client to the server ## to query for the list of compiler options necessary to compile in a given list of targets. @@ -678,6 +653,61 @@ type ScalacOptionsItem { classDirectory: java.net.URI } +# Java Extension + +## Javac options +## The build target javac options request is sent from the client to the server +## to query for the list of compiler options necessary to compile in a given list of targets. +type JavacOptionsParams { + targets: [sbt.internal.bsp.BuildTargetIdentifier] +} + +type JavacOptionsResult { + items: [sbt.internal.bsp.JavacOptionsItem] +} + +type JavacOptionsItem { + target: sbt.internal.bsp.BuildTargetIdentifier! + + ## Additional arguments to the compiler. + ## For example, -deprecation. + options: [String] + + ## The dependency classpath for this target, must be + ## identical to what is passed as arguments to + ## the -classpath flag in the command line interface + ## of scalac. + classpath: [java.net.URI] + + ## The output directory for classfiles produced by this target + classDirectory: java.net.URI +} + +# sbt Extension + +## Contains sbt-specific metadata for providing editor support for sbt build files. +## This metadata is embedded in the data: Option[Json] field of the BuildTarget definition +## when the dataKind field contains "sbt". +type SbtBuildTarget { + ## The sbt version. Useful to support version-dependent syntax. + sbtVersion: String! + + ## A sequence of Scala imports that are automatically imported in the sbt build files. + autoImports: [String]! + + ## The Scala build target describing the scala + ## version and scala jars used by this sbt version. + scalaBuildTarget: sbt.internal.bsp.ScalaBuildTarget! + + ## An optional parent if the target has an sbt meta project. + parent: sbt.internal.bsp.BuildTargetIdentifier + + ## The inverse of parent, list of targets that have this build target + ## defined as their parent. It can contain normal project targets or + ## sbt build targets if this target represents an sbt meta-meta build. + children: [sbt.internal.bsp.BuildTargetIdentifier]! +} + ## https://build-server-protocol.github.io/docs/server-discovery.html type BspConnectionDetails { ## The name of the build tool diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index c694f1334..e5c73168f 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -32,8 +32,7 @@ object BuildServerTest extends AbstractServerTest { private def nextId(): Int = idGen.getAndIncrement() test("build/initialize") { _ => - val id = nextId() - initializeRequest(id) + val id = initializeRequest() assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"${id}"""") && (s contains """"resourcesProvider":true""") && @@ -42,10 +41,7 @@ object BuildServerTest extends AbstractServerTest { } test("workspace/buildTargets") { _ => - svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "${nextId()}", "method": "workspace/buildTargets", "params": {} }""" - ) - assert(processing("workspace/buildTargets")) + sendRequest("workspace/buildTargets") val result = svr.waitFor[WorkspaceBuildTargetsResult](10.seconds) val utilTarget = result.targets.find(_.displayName.contains("util")).get assert(utilTarget.id.uri.toString.endsWith("#util/Compile")) @@ -58,16 +54,14 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/sources") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") - svr.sendJsonRpc(buildTargetSources(Seq(buildTarget, badBuildTarget))) - assert(processing("buildTarget/sources")) + buildTargetSources(Seq(buildTarget, badBuildTarget)) val s = svr.waitFor[SourcesResult](10.seconds) val sources = s.items.head.sources.map(_.uri) assert(sources.contains(new File(svr.baseDirectory, "util/src/main/scala").toURI)) } test("buildTarget/sources: base sources") { _ => val buildTarget = buildTargetUri("buildserver", "Compile") - svr.sendJsonRpc(buildTargetSources(Seq(buildTarget))) - assert(processing("buildTarget/sources")) + buildTargetSources(Seq(buildTarget)) val s = svr.waitFor[SourcesResult](10.seconds) val sources = s.items.head.sources val expectedSource = SourceItem( @@ -80,8 +74,7 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/sources: sbt") { _ => val x = new URI(s"${svr.baseDirectory.getAbsoluteFile.toURI}#buildserver-build") - svr.sendJsonRpc(buildTargetSources(Seq(x))) - assert(processing("buildTarget/sources")) + buildTargetSources(Seq(x)) val s = svr.waitFor[SourcesResult](10.seconds) val sources = s.items.head.sources.map(_.uri).sorted val expectedSources = Vector( @@ -99,17 +92,13 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/compile") { _ => val buildTarget = buildTargetUri("util", "Compile") - - compile(buildTarget, id = nextId()) - - assert(processing("buildTarget/compile")) + compile(buildTarget) val res = svr.waitFor[BspCompileResult](10.seconds) assert(res.statusCode == StatusCode.Success) } test("buildTarget/compile - reports compilation progress") { _ => val buildTarget = buildTargetUri("runAndTest", "Compile") - compile(buildTarget) // This doesn't always come back in 10s on CI. @@ -271,18 +260,19 @@ object BuildServerTest extends AbstractServerTest { ) } - test("buildTarget/scalacOptions") { _ => + test("buildTarget/scalacOptions, buildTarget/javacOptions") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") - val id = nextId() - svr.sendJsonRpc( - s"""{ "jsonrpc": "2.0", "id": "$id", "method": "buildTarget/scalacOptions", "params": { - | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] - |} }""".stripMargin - ) - assert(processing("buildTarget/scalacOptions")) + val id1 = scalacOptions(Seq(buildTarget, badBuildTarget)) + assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && + (s contains s""""id":"$id1"""") && + (s contains "scala-library-2.13.11.jar") + }) + + val id2 = javacOptions(Seq(buildTarget, badBuildTarget)) + assert(svr.waitForString(10.seconds) { s => + (s contains s""""id":"$id2"""") && (s contains "scala-library-2.13.11.jar") }) } @@ -306,7 +296,7 @@ object BuildServerTest extends AbstractServerTest { | "targets": [{ "uri": "$buildTarget" }] |} }""".stripMargin ) - assert(processing("buildTarget/cleanCache")) + assertProcessing("buildTarget/cleanCache") val res = svr.waitFor[CleanCacheResult](10.seconds) assert(res.cleaned) assert(targetDir.list().isEmpty) @@ -316,7 +306,7 @@ object BuildServerTest extends AbstractServerTest { svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "${nextId()}", "method": "workspace/buildTargets", "params": {} }""" ) - assert(processing("workspace/buildTargets")) + assertProcessing("workspace/buildTargets") val result = svr.waitFor[WorkspaceBuildTargetsResult](10.seconds) val allTargets = result.targets.map(_.id.uri) @@ -327,7 +317,7 @@ object BuildServerTest extends AbstractServerTest { | ] |} }""".stripMargin ) - assert(processing("buildTarget/cleanCache")) + assertProcessing("buildTarget/cleanCache") val res = svr.waitFor[CleanCacheResult](10.seconds) assert(res.cleaned) } @@ -337,7 +327,7 @@ object BuildServerTest extends AbstractServerTest { svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "$id", "method": "workspace/reload"}""" ) - assert(processing("workspace/reload")) + assertProcessing("workspace/reload") assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && (s contains """"result":null""") @@ -355,9 +345,8 @@ object BuildServerTest extends AbstractServerTest { |) |""".stripMargin ) - val id = nextId() + val id = reloadWorkspace() // reload - reloadWorkspace(id) assert( svr.waitForString(10.seconds) { s => s.contains(s""""buildTarget":{"uri":"$metaBuildTarget"}""") && @@ -405,7 +394,7 @@ object BuildServerTest extends AbstractServerTest { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) - assert(processing("buildTarget/scalaMainClasses")) + assertProcessing("buildTarget/scalaMainClasses") assert(svr.waitForString(30.seconds) { s => (s contains s""""id":"$id"""") && (s contains """"class":"main.Main"""") @@ -422,7 +411,7 @@ object BuildServerTest extends AbstractServerTest { | "data": { "class": "main.Main" } |} }""".stripMargin ) - assert(processing("buildTarget/run")) + assertProcessing("buildTarget/run") assert(svr.waitForString(10.seconds) { s => (s contains "build/logMessage") && (s contains """"message":"Hello World!"""") @@ -443,7 +432,7 @@ object BuildServerTest extends AbstractServerTest { | "params": { "targets": [{ "uri": "$buildTarget" }] } |}""".stripMargin ) - assert(processing("buildTarget/jvmRunEnvironment")) + assertProcessing("buildTarget/jvmRunEnvironment") assert { svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && @@ -465,7 +454,7 @@ object BuildServerTest extends AbstractServerTest { | "params": { "targets": [{ "uri": "$buildTarget" }] } |}""".stripMargin ) - assert(processing("buildTarget/jvmTestEnvironment")) + assertProcessing("buildTarget/jvmTestEnvironment") assert { svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && @@ -487,7 +476,7 @@ object BuildServerTest extends AbstractServerTest { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) - assert(processing("buildTarget/scalaTestClasses")) + assertProcessing("buildTarget/scalaTestClasses") assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && (s contains """"tests.FailingTest"""") && @@ -504,7 +493,7 @@ object BuildServerTest extends AbstractServerTest { | "targets": [{ "uri": "$buildTarget" }] |} }""".stripMargin ) - assert(processing("buildTarget/test")) + assertProcessing("buildTarget/test") assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && (s contains """"statusCode":2""") @@ -528,7 +517,7 @@ object BuildServerTest extends AbstractServerTest { | } |} }""".stripMargin ) - assert(processing("buildTarget/test")) + assertProcessing("buildTarget/test") assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && (s contains """"statusCode":1""") @@ -557,8 +546,7 @@ object BuildServerTest extends AbstractServerTest { test("buildTarget/compile: respond error") { _ => val buildTarget = buildTargetUri("respondError", "Compile") - val id = nextId() - compile(buildTarget, id) + val id = compile(buildTarget) assert(svr.waitForString(10.seconds) { s => s.contains(s""""id":"$id"""") && s.contains(""""error"""") && @@ -576,7 +564,7 @@ object BuildServerTest extends AbstractServerTest { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) - assert(processing("buildTarget/resources")) + assertProcessing("buildTarget/resources") assert(svr.waitForString(10.seconds) { s => (s contains s""""id":"$id"""") && (s contains "util/src/main/resources/") }) @@ -590,7 +578,7 @@ object BuildServerTest extends AbstractServerTest { | "targets": [{ "uri": "$buildTarget" }, { "uri": "$badBuildTarget" }] |} }""".stripMargin ) - assert(processing("buildTarget/outputPaths")) + assertProcessing("buildTarget/outputPaths") val actualResult = svr.waitFor[OutputPathsResult](10.seconds) val expectedResult = OutputPathsResult( items = Vector( @@ -608,7 +596,7 @@ object BuildServerTest extends AbstractServerTest { assert(actualResult == expectedResult) } - private def initializeRequest(id: Int): Unit = { + private def initializeRequest(): Int = { val params = InitializeBuildParams( "test client", "1.0.0", @@ -617,35 +605,55 @@ object BuildServerTest extends AbstractServerTest { BuildClientCapabilities(Vector("scala")), None ) - svr.sendJsonRpc(request(id, "build/initialize", params)) + sendRequest("build/initialize", params) } - private def processing(method: String, debug: Boolean = false): Boolean = { - svr.waitForString(10.seconds) { msg => + private def assertProcessing(method: String, debug: Boolean = false): Unit = { + assert(svr.waitForString(10.seconds) { msg => if (debug) println(msg) - msg.contains("build/logMessage") && - msg.contains(s""""message":"Processing $method"""") - } + msg.contains("build/logMessage") && msg.contains(s""""message":"Processing $method"""") + }) } - private def reloadWorkspace(id: Int = nextId()): Unit = - svr.sendJsonRpc(s"""{ "jsonrpc": "2.0", "id": "$id", "method": "workspace/reload"}""") + private def reloadWorkspace(): Int = + sendRequest("workspace/reload") - private def compile(buildTarget: URI, id: Int = nextId()): Unit = { + private def compile(buildTarget: URI): Int = { val params = CompileParams(targets = Vector(BuildTargetIdentifier(buildTarget)), None, Vector.empty) - svr.sendJsonRpc(request(id, "buildTarget/compile", params)) + sendRequest("buildTarget/compile", params) } - private def buildTargetSources(buildTargets: Seq[URI], id: Int = nextId()): String = { + private def scalacOptions(buildTargets: Seq[URI]): Int = { val targets = buildTargets.map(BuildTargetIdentifier.apply).toVector - request(id, "buildTarget/sources", SourcesParams(targets)) + sendRequest("buildTarget/scalacOptions", ScalacOptionsParams(targets)) } - private def request[T: JsonWriter](id: Int, method: String, params: T): String = { - val request = JsonRpcRequestMessage("2.0", id.toString, method, Converter.toJson(params).get) - val json = Converter.toJson(request).get - CompactPrinter(json) + private def javacOptions(buildTargets: Seq[URI]): Int = { + val targets = buildTargets.map(BuildTargetIdentifier.apply).toVector + sendRequest("buildTarget/scalacOptions", ScalacOptionsParams(targets)) + } + + private def buildTargetSources(buildTargets: Seq[URI]): Int = { + val targets = buildTargets.map(BuildTargetIdentifier.apply).toVector + sendRequest("buildTarget/sources", SourcesParams(targets)) + } + + private def sendRequest(method: String): Int = { + val id = nextId() + val msg = JsonRpcRequestMessage("2.0", id.toString, method, None) + val json = Converter.toJson(msg).get + svr.sendJsonRpc(CompactPrinter(json)) + id + } + + private def sendRequest[T: JsonWriter](method: String, params: T): Int = { + val id = nextId() + val msg = JsonRpcRequestMessage("2.0", id.toString, method, Converter.toJson(params).get) + val json = Converter.toJson(msg).get + svr.sendJsonRpc(CompactPrinter(json)) + assertProcessing(method) + id } private def buildTargetUri(project: String, config: String): URI = From 18353f1ca8ab3b441f5154991645be666e3edfd5 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Fri, 11 Aug 2023 16:08:11 +0200 Subject: [PATCH 113/207] Reviewer's suggestions. --- build.sbt | 8 +- main/src/main/scala/sbt/CommandProgress.scala | 35 -------- main/src/main/scala/sbt/EvaluateTask.scala | 35 ++++---- .../src/main/scala/sbt/ExecuteProgress2.scala | 79 +++++++++++++++++++ main/src/main/scala/sbt/Keys.scala | 5 +- main/src/main/scala/sbt/MainLoop.scala | 19 ++--- 6 files changed, 109 insertions(+), 72 deletions(-) delete mode 100644 main/src/main/scala/sbt/CommandProgress.scala create mode 100644 main/src/main/scala/sbt/ExecuteProgress2.scala diff --git a/build.sbt b/build.sbt index ce6a0f709..3edd3c254 100644 --- a/build.sbt +++ b/build.sbt @@ -176,6 +176,8 @@ def mimaSettingsSince(versions: Seq[String]): Seq[Def.Setting[_]] = Def settings exclude[DirectMissingMethodProblem]("sbt.PluginData.apply"), exclude[DirectMissingMethodProblem]("sbt.PluginData.copy"), exclude[DirectMissingMethodProblem]("sbt.PluginData.this"), + exclude[IncompatibleResultTypeProblem]("sbt.EvaluateTask.executeProgress"), + exclude[DirectMissingMethodProblem]("sbt.Keys.currentTaskProgress") ), ) @@ -188,11 +190,11 @@ lazy val sbtRoot: Project = (project in file(".")) minimalSettings, onLoadMessage := { val version = sys.props("java.specification.version") - """ __ __ + """ __ __ | _____/ /_ / /_ | / ___/ __ \/ __/ - | (__ ) /_/ / /_ - | /____/_.___/\__/ + | (__ ) /_/ / /_ + | /____/_.___/\__/ |Welcome to the build for sbt. |""".stripMargin + (if (version != "1.8") diff --git a/main/src/main/scala/sbt/CommandProgress.scala b/main/src/main/scala/sbt/CommandProgress.scala deleted file mode 100644 index 757cd0a60..000000000 --- a/main/src/main/scala/sbt/CommandProgress.scala +++ /dev/null @@ -1,35 +0,0 @@ -/* - * sbt - * Copyright 2023, Scala center - * Copyright 2011 - 2022, Lightbend, Inc. - * Copyright 2008 - 2010, Mark Harrah - * Licensed under Apache License 2.0 (see LICENSE) - */ - -package sbt - -/** - * Tracks command execution progress. In addition to ExecuteProgress, this interface - * adds command start and end events, and gives access to the sbt.State at the beginning - * and end of each command. - */ -trait CommandProgress extends ExecuteProgress[Task] { - - /** - * Called before a command starts processing. The command has not yet been parsed. - * - * @param cmd The command string - * @param state The sbt.State before the command starts executing. - */ - def beforeCommand(cmd: String, state: State): Unit - - /** - * Called after a command finished execution. - * - * @param cmd The command string. - * @param result Left in case of an error. If the command cannot be parsed, it will be - * signalled as a ParseException with a detailed message. If the command - * was cancelled by the user, as sbt.Cancelled. - */ - def afterCommand(cmd: String, result: Either[Throwable, State]): Unit -} diff --git a/main/src/main/scala/sbt/EvaluateTask.scala b/main/src/main/scala/sbt/EvaluateTask.scala index dfeaf9f18..4c3477062 100644 --- a/main/src/main/scala/sbt/EvaluateTask.scala +++ b/main/src/main/scala/sbt/EvaluateTask.scala @@ -258,12 +258,15 @@ object EvaluateTask { extracted: Extracted, structure: BuildStructure, state: State - ): ExecuteProgress[Task] = { + ): ExecuteProgress2 = { state - .get(currentTaskProgress) - .map { tp => - new ExecuteProgress[Task] { - val progress = tp.progress + .get(currentCommandProgress) + .map { progress => + new ExecuteProgress2 { + override def beforeCommand(cmd: String, state: State): Unit = + progress.beforeCommand(cmd, state) + override def afterCommand(cmd: String, result: Either[Throwable, State]): Unit = + progress.afterCommand(cmd, result) override def initial(): Unit = progress.initial() override def afterRegistered( task: Task[_], @@ -279,7 +282,9 @@ object EvaluateTask { progress.afterCompleted(task, result) override def afterAllCompleted(results: RMap[Task, Result]): Unit = progress.afterAllCompleted(results) - override def stop(): Unit = {} + override def stop(): Unit = { + // TODO: this is not a typo, but a questionable decision in 6559c3a0 that is probably obsolete + } } } .getOrElse { @@ -289,20 +294,16 @@ object EvaluateTask { extracted, structure ) - val reporters = maker.map(_.progress) ++ state.get(Keys.taskProgress) ++ getSetting( - Keys.commandProgress, - Seq(), - extracted, - structure - ) ++ + val reporters = maker.map(_.progress) ++ state.get(Keys.taskProgress) ++ (if (SysProp.taskTimings) new TaskTimings(reportOnShutdown = false, state.globalLogging.full) :: Nil else Nil) - reporters match { - case xs if xs.isEmpty => ExecuteProgress.empty[Task] - case xs if xs.size == 1 => xs.head - case xs => ExecuteProgress.aggregate[Task](xs) - } + val cmdProgress = getSetting(Keys.commandProgress, Seq(), extracted, structure) + ExecuteProgress2.aggregate(reporters match { + case xs if xs.isEmpty => cmdProgress + case xs if xs.size == 1 => cmdProgress :+ new ExecuteProgressAdapter(xs.head) + case xs => cmdProgress :+ new ExecuteProgressAdapter(ExecuteProgress.aggregate[Task](xs)) + }) } } // TODO - Should this pull from Global or from the project itself? diff --git a/main/src/main/scala/sbt/ExecuteProgress2.scala b/main/src/main/scala/sbt/ExecuteProgress2.scala new file mode 100644 index 000000000..41ed6e658 --- /dev/null +++ b/main/src/main/scala/sbt/ExecuteProgress2.scala @@ -0,0 +1,79 @@ +/* + * sbt + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt +import sbt.internal.util.RMap + +/** + * Tracks command execution progress. In addition to ExecuteProgress, this interface + * adds command start and end events, and gives access to the sbt.State at the beginning + * and end of each command. + */ +trait ExecuteProgress2 extends ExecuteProgress[Task] { + + /** + * Called before a command starts processing. The command has not yet been parsed. + * + * @param cmd The command string + * @param state The sbt.State before the command starts executing. + */ + def beforeCommand(cmd: String, state: State): Unit + + /** + * Called after a command finished execution. + * + * @param cmd The command string. + * @param result Left in case of an error. If the command cannot be parsed, it will be + * signalled as a ParseException with a detailed message. If the command + * was cancelled by the user, as sbt.Cancelled. + */ + def afterCommand(cmd: String, result: Either[Throwable, State]): Unit +} + +class ExecuteProgressAdapter(ep: ExecuteProgress[Task]) extends ExecuteProgress2 { + override def beforeCommand(cmd: String, state: State): Unit = {} + override def afterCommand(cmd: String, result: Either[Throwable, State]): Unit = {} + override def initial(): Unit = ep.initial() + override def afterRegistered( + task: Task[_], + allDeps: Iterable[Task[_]], + pendingDeps: Iterable[Task[_]] + ): Unit = ep.afterRegistered(task, allDeps, pendingDeps) + override def afterReady(task: Task[_]): Unit = ep.afterReady(task) + override def beforeWork(task: Task[_]): Unit = ep.beforeWork(task) + override def afterWork[A](task: Task[A], result: Either[Task[A], Result[A]]): Unit = + ep.afterWork(task, result) + override def afterCompleted[A](task: Task[A], result: Result[A]): Unit = + ep.afterCompleted(task, result) + override def afterAllCompleted(results: RMap[Task, Result]): Unit = ep.afterAllCompleted(results) + override def stop(): Unit = ep.stop() +} + +object ExecuteProgress2 { + def aggregate(xs: Seq[ExecuteProgress2]): ExecuteProgress2 = new ExecuteProgress2 { + override def beforeCommand(cmd: String, state: State): Unit = + xs.foreach(_.beforeCommand(cmd, state)) + override def afterCommand(cmd: String, result: Either[Throwable, State]): Unit = + xs.foreach(_.afterCommand(cmd, result)) + override def initial(): Unit = xs.foreach(_.initial()) + override def afterRegistered( + task: Task[_], + allDeps: Iterable[Task[_]], + pendingDeps: Iterable[Task[_]] + ): Unit = xs.foreach(_.afterRegistered(task, allDeps, pendingDeps)) + override def afterReady(task: Task[_]): Unit = xs.foreach(_.afterReady(task)) + override def beforeWork(task: Task[_]): Unit = xs.foreach(_.beforeWork(task)) + override def afterWork[A](task: Task[A], result: Either[Task[A], Result[A]]): Unit = + xs.foreach(_.afterWork(task, result)) + override def afterCompleted[A](task: Task[A], result: Result[A]): Unit = + xs.foreach(_.afterCompleted(task, result)) + override def afterAllCompleted(results: RMap[Task, Result]): Unit = + xs.foreach(_.afterAllCompleted(results)) + override def stop(): Unit = xs.foreach(_.stop()) + } +} diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index e320f7147..9b24eefc1 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -599,8 +599,7 @@ object Keys { object TaskProgress { def apply(progress: ExecuteProgress[Task]): TaskProgress = new TaskProgress(progress) } - private[sbt] val currentTaskProgress = AttributeKey[TaskProgress]("current-task-progress") - private[sbt] val currentCommandProgress = AttributeKey[Seq[CommandProgress]]("current-command-progress") + private[sbt] val currentCommandProgress = AttributeKey[ExecuteProgress2]("current-command-progress") private[sbt] val taskProgress = AttributeKey[sbt.internal.TaskProgress]("active-task-progress") val useSuperShell = settingKey[Boolean]("Enables (true) or disables the super shell.") val superShellMaxTasks = settingKey[Int]("The max number of tasks to display in the supershell progress report") @@ -614,7 +613,7 @@ object Keys { private[sbt] val postProgressReports = settingKey[Unit]("Internally used to modify logger.").withRank(DTask) @deprecated("No longer used", "1.3.0") private[sbt] val executeProgress = settingKey[State => TaskProgress]("Experimental task execution listener.").withRank(DTask) - val commandProgress = settingKey[Seq[CommandProgress]]("Command progress listeners receive events when commands start and end, in addition to task progress events.") + val commandProgress = settingKey[Seq[ExecuteProgress2]]("Command progress listeners receive events when commands start and end, in addition to task progress events.") val lintUnused = inputKey[Unit]("Check for keys unused by other settings and tasks.") val lintIncludeFilter = settingKey[String => Boolean]("Filters key names that should be included in the lint check.") val lintExcludeFilter = settingKey[String => Boolean]("Filters key names that should be excluded in the lint check.") diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index cbee12e42..aaa1d98ec 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -229,20 +229,12 @@ object MainLoop { } else state } } - val progressState = getOrSet( - state, - sbt.Keys.currentTaskProgress, - extracted => - new Keys.TaskProgress( - EvaluateTask.executeProgress(extracted, extracted.structure, state) - ) - ) val cmdProgressState = getOrSet( - progressState, + state, sbt.Keys.currentCommandProgress, - _.getOpt(Keys.commandProgress).getOrElse(Seq()) + extracted => EvaluateTask.executeProgress(extracted, extracted.structure, state) ) exchange.setState(cmdProgressState) @@ -260,8 +252,8 @@ object MainLoop { } val currentCmdProgress = - cmdProgressState.get(sbt.Keys.currentCommandProgress).getOrElse(Nil) - currentCmdProgress.foreach(_.beforeCommand(exec.commandLine, progressState)) + cmdProgressState.get(sbt.Keys.currentCommandProgress) + currentCmdProgress.foreach(_.beforeCommand(exec.commandLine, cmdProgressState)) /* * FastTrackCommands.evaluate can be significantly faster than Command.process because * it avoids an expensive parsing step for internal commands that are easy to parse. @@ -310,9 +302,8 @@ object MainLoop { exchange.respondStatus(doneEvent) } exchange.setExec(None) - newState.get(sbt.Keys.currentTaskProgress).foreach(_.progress.stop()) + newState.get(sbt.Keys.currentCommandProgress).foreach(_.stop()) newState - .remove(sbt.Keys.currentTaskProgress) .remove(Keys.terminalKey) .remove(Keys.currentCommandProgress) } From bd8b11632c1b0a4fc9b10481b5bf5552d2ff8f39 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Fri, 11 Aug 2023 21:56:46 +0200 Subject: [PATCH 114/207] Remove conscriptConfigs task, not used and needed anymore --- build.sbt | 1 - project/Transform.scala | 21 --------------------- 2 files changed, 22 deletions(-) diff --git a/build.sbt b/build.sbt index ce6a0f709..d67192d36 100644 --- a/build.sbt +++ b/build.sbt @@ -206,7 +206,6 @@ lazy val sbtRoot: Project = (project in file(".")) scalacOptions += "-Ymacro-expand:none", // for both sxr and doc Util.publishPomSettings, otherRootSettings, - Transform.conscriptSettings(bundledLauncherProj), publish := {}, publishLocal := {}, publish / skip := true, diff --git a/project/Transform.scala b/project/Transform.scala index fde66b01c..f63323081 100644 --- a/project/Transform.scala +++ b/project/Transform.scala @@ -2,27 +2,6 @@ import sbt._ import sbt.Keys._ object Transform { - private val conscriptConfigs = taskKey[Unit]("") - - def conscriptSettings(launch: Reference) = Seq( - conscriptConfigs := { - val sourceFile = (launch / Compile / managedResources).value - .find(_.getName == "sbt.boot.properties") - .getOrElse(sys.error("No managed boot.properties file.")) - val source = IO.readLines(sourceFile) - val conscriptBase = (Compile / sourceDirectory).value / "conscript" - IO.delete(conscriptBase) - val pairs = Seq( - "sbt.xMain" -> "xsbt", - "sbt.ScriptMain" -> "scalas", - "sbt.ConsoleMain" -> "screpl", - ) - for ((main, dir) <- pairs) { - val lines = source.map(l => if (l.trim.startsWith("class:")) s" class: $main" else l) - IO.writeLines(conscriptBase / dir / "launchconfig", lines) - } - }, - ) def configSettings = Seq( resourceGenerators += Def.task { From 876a85461d11f73d17b93ca738666d30bdeac07e Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Sun, 13 Aug 2023 07:18:09 -0700 Subject: [PATCH 115/207] add a Scala 3 seed to the sbt new menu --- main/src/main/scala/sbt/TemplateCommandUtil.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/main/src/main/scala/sbt/TemplateCommandUtil.scala b/main/src/main/scala/sbt/TemplateCommandUtil.scala index 81372960f..afb2c5ac7 100644 --- a/main/src/main/scala/sbt/TemplateCommandUtil.scala +++ b/main/src/main/scala/sbt/TemplateCommandUtil.scala @@ -172,6 +172,7 @@ private[sbt] object TemplateCommandUtil { ScalaToolkitSlug -> "Scala Toolkit (beta) by Scala Center and VirtusLab", TypelevelToolkitSlug -> "Toolkit to start building Typelevel apps", SbtCrossPlatformSlug -> "A cross-JVM/JS/Native project", + "scala/scala3.g8" -> "Scala 3 seed template", "scala/scala-seed.g8" -> "Scala 2 seed template", "playframework/play-scala-seed.g8" -> "A Play project in Scala", "playframework/play-java-seed.g8" -> "A Play project in Java", From 9522b7e4ed685cd134bad948c8309d5e35f2ea0e Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 16 Aug 2023 13:11:39 +0200 Subject: [PATCH 116/207] add exclusion --- build.sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/build.sbt b/build.sbt index ce6a0f709..aac40f675 100644 --- a/build.sbt +++ b/build.sbt @@ -176,6 +176,7 @@ def mimaSettingsSince(versions: Seq[String]): Seq[Def.Setting[_]] = Def settings exclude[DirectMissingMethodProblem]("sbt.PluginData.apply"), exclude[DirectMissingMethodProblem]("sbt.PluginData.copy"), exclude[DirectMissingMethodProblem]("sbt.PluginData.this"), + exclude[IncompatibleResultTypeProblem]("sbt.PluginData.copy$default$10") ), ) From 8c9600249ebd91298c4b4d7c6d80b57127de63bd Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Thu, 17 Aug 2023 15:56:04 +0200 Subject: [PATCH 117/207] Add scripted test --- .../reporter/command-progress/build.sbt | 39 +++++++++++++++++++ .../command-progress/project/EventLog.scala | 8 ++++ .../sbt-test/reporter/command-progress/test | 5 +++ 3 files changed, 52 insertions(+) create mode 100644 sbt-app/src/sbt-test/reporter/command-progress/build.sbt create mode 100644 sbt-app/src/sbt-test/reporter/command-progress/project/EventLog.scala create mode 100644 sbt-app/src/sbt-test/reporter/command-progress/test diff --git a/sbt-app/src/sbt-test/reporter/command-progress/build.sbt b/sbt-app/src/sbt-test/reporter/command-progress/build.sbt new file mode 100644 index 000000000..08f7a7492 --- /dev/null +++ b/sbt-app/src/sbt-test/reporter/command-progress/build.sbt @@ -0,0 +1,39 @@ +commandProgress += new ExecuteProgress2 { + override def beforeCommand(cmd: String, state: State): Unit = { + EventLog.logs += (s"BEFORE: $cmd") + // assert that `state` is the current state indeed + assert(state.currentCommand.isDefined) + assert(state.currentCommand.get.commandLine == cmd) + } + override def afterCommand(cmd: String, result: Either[Throwable, State]): Unit = { + EventLog.logs += (s"AFTER: $cmd") + result.left.foreach(EventLog.errors +=) + } + override def initial(): Unit = {} + override def afterRegistered( + task: Task[_], + allDeps: Iterable[Task[_]], + pendingDeps: Iterable[Task[_]] + ): Unit = {} + override def afterReady(task: Task[_]): Unit = {} + override def beforeWork(task: Task[_]): Unit = {} + override def afterWork[A](task: Task[A], result: Either[Task[A], Result[A]]): Unit = {} + override def afterCompleted[A](task: Task[A], result: Result[A]): Unit = {} + override def afterAllCompleted(results: RMap[Task, Result]): Unit = {} + override def stop(): Unit = {} +} + +val check = taskKey[Unit]("Check basic command events") +val checkParseError = taskKey[Unit]("Check that parse error is recorded") + +check := { + def hasEvent(cmd: String): Boolean = + EventLog.logs.contains(s"BEFORE: $cmd") && EventLog.logs.contains(s"AFTER: $cmd") + + assert(hasEvent("compile"), "Missing command event `compile`") + assert(hasEvent("+compile"), "Missing command event `+compile`") +} + +checkParseError := { + assert(EventLog.errors.exists(_.getMessage.toLowerCase.contains("not a valid command"))) +} diff --git a/sbt-app/src/sbt-test/reporter/command-progress/project/EventLog.scala b/sbt-app/src/sbt-test/reporter/command-progress/project/EventLog.scala new file mode 100644 index 000000000..88b00c491 --- /dev/null +++ b/sbt-app/src/sbt-test/reporter/command-progress/project/EventLog.scala @@ -0,0 +1,8 @@ +import scala.collection.mutable.ListBuffer + +object EventLog { + val logs = ListBuffer.empty[String] + val errors = ListBuffer.empty[Throwable] + + def reset(): Unit = logs.clear() +} diff --git a/sbt-app/src/sbt-test/reporter/command-progress/test b/sbt-app/src/sbt-test/reporter/command-progress/test new file mode 100644 index 000000000..9011065e1 --- /dev/null +++ b/sbt-app/src/sbt-test/reporter/command-progress/test @@ -0,0 +1,5 @@ +> compile +> +compile +> check +-> asdf +> checkParseError From 667e4b67cdb312b1a648ee75f953f9d4af3bc55c Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 22 Aug 2023 10:06:26 +0200 Subject: [PATCH 118/207] Fix initialize test --- server-test/src/test/scala/testpkg/BuildServerTest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index e5c73168f..dc1486786 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -652,7 +652,7 @@ object BuildServerTest extends AbstractServerTest { val msg = JsonRpcRequestMessage("2.0", id.toString, method, Converter.toJson(params).get) val json = Converter.toJson(msg).get svr.sendJsonRpc(CompactPrinter(json)) - assertProcessing(method) + if (method != "build/initialize") assertProcessing(method) id } From bee6748f2940cde384457c0c98290dec77ef5ed8 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 24 Aug 2023 13:04:58 -0400 Subject: [PATCH 119/207] Update Ivy and Coursier to latest --- project/Dependencies.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c37ed8e5b..18af50955 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,7 +14,7 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.9.1") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.1") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.2") val zincVersion = nightlyVersion.getOrElse("1.9.3") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.0" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.1" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From cdaae3bfde7257d7252739506d7dff24774612db Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 24 Aug 2023 20:55:50 -0400 Subject: [PATCH 120/207] sbt 1.9.4 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index d67192d36..9cd3bcaef 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.9.4-SNAPSHOT" + val v = "1.9.5-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index e7697e190..994c5e68f 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.3" +declare builtin_sbt_version="1.9.4" declare -a residual_args declare -a java_args declare -a scalac_args From 7c400081a1151433f5b8681cb95fc3904d958f10 Mon Sep 17 00:00:00 2001 From: azdrojowa123 <33667003+azdrojowa123@users.noreply.github.com> Date: Fri, 25 Aug 2023 18:01:49 +0200 Subject: [PATCH 121/207] Fix help command for shells (#7358) * sbt-help-fix * fix BasicCommands.scala formatting --- main-command/src/main/scala/sbt/BasicCommands.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main-command/src/main/scala/sbt/BasicCommands.scala b/main-command/src/main/scala/sbt/BasicCommands.scala index 238c2bfca..030c778dd 100644 --- a/main-command/src/main/scala/sbt/BasicCommands.scala +++ b/main-command/src/main/scala/sbt/BasicCommands.scala @@ -129,8 +129,8 @@ object BasicCommands { def runHelp(s: State, h: Help)(arg: Option[String]): State = { val (extraArgs, remainingCommands) = s.remainingCommands match { - case xs :+ exec if exec.commandLine == "shell" => (xs, exec :: Nil) - case xs => (xs, nil[Exec]) + case xs :+ exec if exec.commandLine.endsWith(Shell) => (xs, exec :: Nil) + case xs => (xs, nil[Exec]) } val topic = (arg.toList ++ extraArgs.map(_.commandLine)) match { From 86df6e0606e41e6a7ad09367930bbc0a2f10cd23 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Mon, 28 Aug 2023 11:49:29 +0200 Subject: [PATCH 122/207] Deprecate overloaded process method --- main-command/src/main/scala/sbt/Command.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main-command/src/main/scala/sbt/Command.scala b/main-command/src/main/scala/sbt/Command.scala index 15db781c9..15e910bb1 100644 --- a/main-command/src/main/scala/sbt/Command.scala +++ b/main-command/src/main/scala/sbt/Command.scala @@ -185,7 +185,9 @@ object Command { ) // overload instead of default parameter to keep binary compatibility + @deprecated("Use overload that takes the onParseError callback", since = "1.9.4") def process(command: String, state: State): State = process(command, state, _ => ()) + def process(command: String, state: State, onParseError: String => Unit): State = { (if (command.contains(";")) parse(command, state.combinedParser) else parse(command, state.nonMultiParser)) match { From bc00cee4df8bda48908699efa852c8c4aa13fb8e Mon Sep 17 00:00:00 2001 From: azdrojowa123 <33667003+azdrojowa123@users.noreply.github.com> Date: Mon, 28 Aug 2023 16:48:06 +0200 Subject: [PATCH 123/207] Add comment to https://github.com/sbt/sbt/pull/7358 (#7362) comment for new condition in sbt.BasicCommands.runHelp --- main-command/src/main/scala/sbt/BasicCommands.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main-command/src/main/scala/sbt/BasicCommands.scala b/main-command/src/main/scala/sbt/BasicCommands.scala index 030c778dd..dde64c8c2 100644 --- a/main-command/src/main/scala/sbt/BasicCommands.scala +++ b/main-command/src/main/scala/sbt/BasicCommands.scala @@ -129,6 +129,10 @@ object BasicCommands { def runHelp(s: State, h: Help)(arg: Option[String]): State = { val (extraArgs, remainingCommands) = s.remainingCommands match { + /* + exec.commandLine.endsWith(Shell) is done to allow shells other than original shell works correctly with help command. + It's assumed here that shell name must end with "shell" suffix which is true for e.g. shell, oldshell or idea-shell (https://github.com/JetBrains/sbt-idea-shell/blob/072b10e405860feb834402563773f12976be34b9/src/main/scala/org/jetbrains/sbt/constants.scala#L7) + */ case xs :+ exec if exec.commandLine.endsWith(Shell) => (xs, exec :: Nil) case xs => (xs, nil[Exec]) } From bc93eceff7179442c0e3525106c5f6a8ce30ab70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Costa?= Date: Wed, 6 Sep 2023 16:34:02 +0200 Subject: [PATCH 124/207] Fix java opts load order on windows --- launcher-package/src/universal/bin/sbt.bat | 28 ++++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/launcher-package/src/universal/bin/sbt.bat b/launcher-package/src/universal/bin/sbt.bat index f44af2219..dc1f3c8a1 100755 --- a/launcher-package/src/universal/bin/sbt.bat +++ b/launcher-package/src/universal/bin/sbt.bat @@ -112,20 +112,22 @@ if not defined _JAVACMD ( if not defined _JAVACMD set _JAVACMD=java -rem users can set JAVA_OPTS via .jvmopts (sbt-extras style) -if exist .jvmopts for /F %%A in (.jvmopts) do ( - set _jvmopts_line=%%A - if not "!_jvmopts_line:~0,1!" == "#" ( - if defined _JAVA_OPTS ( - set _JAVA_OPTS=!_JAVA_OPTS! %%A - ) else ( - set _JAVA_OPTS=%%A - ) - ) -) +rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. +if not defined _JAVA_OPTS if defined JAVA_OPTS set _JAVA_OPTS=%JAVA_OPTS% -rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. -if not defined _JAVA_OPTS if defined JAVA_OPTS set _JAVA_OPTS=%JAVA_OPTS% +rem users can set JAVA_OPTS via .jvmopts (sbt-extras style) +if exist .jvmopts for /F %%A in (.jvmopts) do ( + set _jvmopts_line=%%A + if not "!_jvmopts_line:~0,1!" == "#" ( + if defined _JAVA_OPTS ( + set _JAVA_OPTS=!_JAVA_OPTS! %%A + ) else ( + set _JAVA_OPTS=%%A + ) + ) +) + +rem If nothing is defined, use the defaults. if not defined _JAVA_OPTS if defined default_java_opts set _JAVA_OPTS=!default_java_opts! rem We use the value of the SBT_OPTS environment variable if defined, rather than the config. From a5f0b37728750b5e826c6fd947da506390ef3f60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 04:39:58 +0000 Subject: [PATCH 125/207] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/cla.yml | 2 +- .github/workflows/dependency-graph.yml | 2 +- .github/workflows/nightly.yml | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 746cadd5e..acbf5bf73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,21 +63,21 @@ jobs: SPARK_LOCAL_IP: "127.0.0.1" steps: - name: Checkout sbt/sbt - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Checkout sbt/io - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: sbt/io ref: develop path: io - name: Checkout sbt/librarymanagement - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: sbt/librarymanagement ref: develop path: librarymanagement - name: Checkout sbt/zinc - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: sbt/zinc ref: develop diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index abbf9f3ba..f9ead39fd 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -4,7 +4,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Check CLA env: AUTHOR: ${{ github.event.pull_request.user.login }} diff --git a/.github/workflows/dependency-graph.yml b/.github/workflows/dependency-graph.yml index 391176fb3..8e5f9dc7a 100644 --- a/.github/workflows/dependency-graph.yml +++ b/.github/workflows/dependency-graph.yml @@ -12,5 +12,5 @@ jobs: name: Submit Dependency Graph runs-on: ubuntu-latest # or windows-latest, or macOS-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: scalacenter/sbt-dependency-submission@v2 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 500f02eaa..88e6f48c1 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -21,21 +21,21 @@ jobs: JAVA_OPTS: -Xms800M -Xmx800M -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 steps: - name: Checkout sbt/sbt - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Checkout sbt/io - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: sbt/io ref: develop path: io - name: Checkout sbt/librarymanagement - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: sbt/librarymanagement ref: develop path: librarymanagement - name: Checkout sbt/zinc - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: sbt/zinc ref: develop From b1e9308ebe4c10c3457d730e0f19cdaee12834c7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 11 Sep 2023 23:15:15 -0400 Subject: [PATCH 126/207] Use binary compiler bridge Problem ------- Starting Scala 2.13.12, Scala 2 has in-sourced the compiler bridge implementtion, which hopefully will be kept up to date more than the ones in Zinc. Solution -------- This switches to using the pre-compiled compiler bridge for >=2.13.12. --- main/src/main/scala/sbt/Defaults.scala | 4 +++- sbt-app/src/sbt-test/actions/cross-advanced/build.sbt | 7 ++++--- sbt-app/src/sbt-test/actions/cross-advanced/test | 2 +- .../src/sbt-test/actions/cross-incremental/build.sbt | 2 +- .../src/sbt-test/actions/cross-multiproject/build.sbt | 2 +- sbt-app/src/sbt-test/actions/cross-multiproject/test | 2 +- .../actions/cross-strict-aggregation/build.sbt | 2 +- .../sbt-test/actions/cross-strict-aggregation/test | 2 +- sbt-app/src/sbt-test/actions/doc/build.sbt | 2 +- .../separate-analysis-per-scala/build.sbt | 2 +- .../console/project-compiler-bridge/build.sbt | 2 +- .../dependency-graph/asciiGraphWidth/build.sbt | 2 +- .../build.sbt | 2 +- .../sbt-test/dependency-graph/whatDependsOn/build.sbt | 2 +- .../sbt-test/dependency-management/cp-order/build.sbt | 2 +- .../dependency-management/credentials/build.sbt | 2 +- .../evicted-semver-spec/build.sbt | 2 +- .../dependency-management/missingok/build.sbt | 2 +- .../src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt | 2 +- sbt-app/src/sbt-test/project/val-order/build.sbt | 2 +- .../src/sbt-test/source-dependencies/constants/test | 2 +- .../source-dependencies/pipelining-java/build.sbt | 2 +- .../sbt-test/source-dependencies/pipelining/build.sbt | 2 +- sbt-app/src/sbt-test/tests/hedgehog/build.sbt | 2 +- sbt-app/src/sbt-test/tests/scalatest/build.sbt | 2 +- sbt-app/src/sbt-test/tests/weaver-cats/build.sbt | 2 +- sbt-app/src/sbt-test/tests/zio-test/build.sbt | 2 +- .../src/main/scala/sbt/internal/inc/ZincLmUtil.scala | 11 ++++++++++- 29 files changed, 43 insertions(+), 31 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index e7a601c30..8a8728892 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -715,7 +715,9 @@ object Defaults extends BuildCommon { clean := clean.dependsOn(cleanIvy).value, scalaCompilerBridgeBinaryJar := Def.settingDyn { val sv = scalaVersion.value - if (ScalaArtifacts.isScala3(sv)) fetchBridgeBinaryJarTask(sv) + if (ScalaArtifacts.isScala3(sv) || VersionNumber(sv) + .matchesSemVer(SemanticSelector(s"=2.13 >=${ZincLmUtil.scala2SbtBridgeStart}"))) + fetchBridgeBinaryJarTask(sv) else Def.task[Option[File]](None) }.value, scalaCompilerBridgeSource := ZincLmUtil.getDefaultBridgeSourceModule(scalaVersion.value), diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt index c9ad52715..e84586e99 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt @@ -1,6 +1,7 @@ lazy val check = taskKey[Unit]("") lazy val compile2 = taskKey[Unit]("") lazy val scala212 = "2.12.18" +lazy val scala213 = "2.13.12" lazy val root = (project in file(".")) .aggregate(foo, bar, client) @@ -11,7 +12,7 @@ lazy val root = (project in file(".")) lazy val foo = project .settings( - crossScalaVersions := Seq(scala212, "2.13.11"), + crossScalaVersions := Seq(scala212, scala213), libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0", check := { @@ -43,7 +44,7 @@ lazy val bar = project lazy val baz = project .settings( - crossScalaVersions := Seq("2.13.11"), + crossScalaVersions := Seq(scala213), check := { // This tests that +baz/check will respect bar's crossScalaVersions and not switch val x = (LocalProject("bar") / scalaVersion).value @@ -54,7 +55,7 @@ lazy val baz = project lazy val client = project .settings( - crossScalaVersions := Seq(scala212, "2.13.11"), + crossScalaVersions := Seq(scala212, scala213), check := (Compile / compile).value, compile2 := (Compile / compile).value, ) diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/test b/sbt-app/src/sbt-test/actions/cross-advanced/test index e413a129a..15c90ead4 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/test +++ b/sbt-app/src/sbt-test/actions/cross-advanced/test @@ -17,7 +17,7 @@ ## test + with command or alias > clean ## for command cross building you do need crossScalaVerions on root -> set root/crossScalaVersions := Seq("2.12.18", "2.13.11") +> set root/crossScalaVersions := Seq("2.12.18", "2.13.12") > + build $ exists foo/target/scala-2.12 $ exists foo/target/scala-2.13 diff --git a/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt b/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt index 5554632a2..8176b96da 100644 --- a/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt @@ -1,5 +1,5 @@ scalaVersion := "2.12.18" -crossScalaVersions := List("2.12.18", "2.13.11") +crossScalaVersions := List("2.12.18", "2.13.12") val setLastModified = taskKey[Unit]("Sets the last modified time for classfiles") setLastModified := { diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt index c4c532266..1b411f1db 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt @@ -1,5 +1,5 @@ lazy val scala212 = "2.12.18" -lazy val scala213 = "2.13.11" +lazy val scala213 = "2.13.12" ThisBuild / crossScalaVersions := Seq(scala212, scala213) ThisBuild / scalaVersion := scala212 diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/test b/sbt-app/src/sbt-test/actions/cross-multiproject/test index c39be13ba..699f1221c 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/test +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/test @@ -36,7 +36,7 @@ $ exists extras/target/scala-2.12 # test safe switching > clean -> ++ 2.13.11 -v compile +> ++ 2.13.12 -v compile $ exists lib/target/scala-2.13 -$ exists lib/target/scala-2.12 # -$ exists sbt-foo/target/scala-2.12 diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt index 374a3d6ab..7eb67145a 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt @@ -1,5 +1,5 @@ lazy val scala212 = "2.12.18" -lazy val scala213 = "2.13.11" +lazy val scala213 = "2.13.12" ThisBuild / scalaVersion := scala212 diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test index c52d1275a..7d4933f36 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test @@ -4,7 +4,7 @@ > clean -> ++2.13.11 compile +> ++2.13.12 compile $ exists core/target/scala-2.13 -$ exists module/target/scala-2.13 diff --git a/sbt-app/src/sbt-test/actions/doc/build.sbt b/sbt-app/src/sbt-test/actions/doc/build.sbt index 3bfa108cd..fbf26e66f 100644 --- a/sbt-app/src/sbt-test/actions/doc/build.sbt +++ b/sbt-app/src/sbt-test/actions/doc/build.sbt @@ -5,7 +5,7 @@ import Parsers._ lazy val root = (project in file(".")) .settings( crossPaths := false, - crossScalaVersions := Seq("2.12.18", "2.13.11"), + crossScalaVersions := Seq("2.12.18", "2.13.12"), scalaVersion := "2.12.18", Compile / doc / scalacOptions += "-Xfatal-warnings", commands += Command.command("excludeB") { s => diff --git a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt index 6b4c2e3ba..33657a7c4 100644 --- a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt @@ -1,5 +1,5 @@ lazy val scala212 = "2.12.18" -lazy val scala213 = "2.13.11" +lazy val scala213 = "2.13.12" ThisBuild / scalaVersion := scala212 lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt b/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt index 35363129b..0843374a5 100644 --- a/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt +++ b/sbt-app/src/sbt-test/console/project-compiler-bridge/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.13.11" +scalaVersion := "2.13.12" // Send some bogus initial command so that it doesn't get stuck. // The task itself will still succeed. diff --git a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt index 698b97b4e..167083797 100644 --- a/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/asciiGraphWidth/build.sbt @@ -1,5 +1,5 @@ ThisBuild / version := "0.1.0-SNAPSHOT" -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" name := "asciiGraphWidthSpecs" diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt index a7bcd4c9f..1c7a78e3f 100644 --- a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn-without-previous-initialization/build.sbt @@ -1,5 +1,5 @@ ThisBuild / version := "0.1.0-SNAPSHOT" -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" name := "whatDependsOn" diff --git a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt index a7bcd4c9f..1c7a78e3f 100644 --- a/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/whatDependsOn/build.sbt @@ -1,5 +1,5 @@ ThisBuild / version := "0.1.0-SNAPSHOT" -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" name := "whatDependsOn" diff --git a/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt b/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt index e075e4fd0..2764be76f 100644 --- a/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cp-order/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.13.11" +scalaVersion := "2.13.12" csrConfiguration := csrConfiguration.value.withCache(target.value / "coursier-cache") libraryDependencies += "com.typesafe.play" %% "play-test" % "2.8.0-RC1" % Test // worked around in 2.8.0 diff --git a/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt b/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt index 867786f77..32b6610dc 100644 --- a/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/credentials/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" ivyPaths := IvyPaths(baseDirectory.value, Some(target.value / "ivy-cache")) diff --git a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt index 073028662..71d49afbf 100644 --- a/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt @@ -1,7 +1,7 @@ import xsbti.AppConfiguration // ThisBuild / useCoursier := false ThisBuild / organization := "com.example" -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" ThisBuild / versionScheme := Some("semver-spec") ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" diff --git a/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt b/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt index 8b24e0d5e..aa97b584f 100644 --- a/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/missingok/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" libraryDependencies ++= Seq( "com.chuusai" %% "shapeless" % "2.3.3", // non-existing diff --git a/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt b/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt index c7b8ec465..5fd5c06b8 100644 --- a/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt +++ b/sbt-app/src/sbt-test/plugins/dotty-sandwich-sjs/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" ThisBuild / scalacOptions += "-Ytasty-reader" lazy val scala3code = project diff --git a/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt b/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt index dc5cfcb3d..a8e206007 100644 --- a/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt +++ b/sbt-app/src/sbt-test/plugins/dotty-sandwich/build.sbt @@ -1,7 +1,7 @@ ThisBuild / scalaVersion := "3.1.3" ThisBuild / scalacOptions += "-Ytasty-reader" -lazy val scala213 = "2.13.11" +lazy val scala213 = "2.13.12" lazy val root = (project in file(".")) .aggregate(fooApp, fooCore, barApp, barCore) diff --git a/sbt-app/src/sbt-test/project/val-order/build.sbt b/sbt-app/src/sbt-test/project/val-order/build.sbt index 43de68746..683c645b6 100644 --- a/sbt-app/src/sbt-test/project/val-order/build.sbt +++ b/sbt-app/src/sbt-test/project/val-order/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" ThisBuild / version := "0.1.0-SNAPSHOT" lazy val check = taskKey[Unit]("") diff --git a/sbt-app/src/sbt-test/source-dependencies/constants/test b/sbt-app/src/sbt-test/source-dependencies/constants/test index d1b542f86..f3da8143a 100644 --- a/sbt-app/src/sbt-test/source-dependencies/constants/test +++ b/sbt-app/src/sbt-test/source-dependencies/constants/test @@ -8,7 +8,7 @@ $ copy-file changes/A2.scala A.scala > run 2 > clean -> ++2.13.11! +> ++2.13.12! $ copy-file changes/A1.scala A.scala > run 1 diff --git a/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt b/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt index 220f54838..7c8f19928 100644 --- a/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/pipelining-java/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" ThisBuild / usePipelining := true lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt b/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt index e35910cc1..96b5b5a17 100644 --- a/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/pipelining/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" ThisBuild / usePipelining := true lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/tests/hedgehog/build.sbt b/sbt-app/src/sbt-test/tests/hedgehog/build.sbt index 61ed9f03c..dc0a0b0ed 100644 --- a/sbt-app/src/sbt-test/tests/hedgehog/build.sbt +++ b/sbt-app/src/sbt-test/tests/hedgehog/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" val hedgehogVersion = "0.10.0" diff --git a/sbt-app/src/sbt-test/tests/scalatest/build.sbt b/sbt-app/src/sbt-test/tests/scalatest/build.sbt index 44d5653a0..8ec076ab9 100644 --- a/sbt-app/src/sbt-test/tests/scalatest/build.sbt +++ b/sbt-app/src/sbt-test/tests/scalatest/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" ThisBuild / version := "0.1.0-SNAPSHOT" ThisBuild / organization := "com.example" ThisBuild / organizationName := "example" diff --git a/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt b/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt index 12ded730a..eb9ab64ca 100644 --- a/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt +++ b/sbt-app/src/sbt-test/tests/weaver-cats/build.sbt @@ -1,3 +1,3 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" libraryDependencies += "com.disneystreaming" %% "weaver-cats" % "0.8.3" % Test diff --git a/sbt-app/src/sbt-test/tests/zio-test/build.sbt b/sbt-app/src/sbt-test/tests/zio-test/build.sbt index 31c84bf49..60996aead 100644 --- a/sbt-app/src/sbt-test/tests/zio-test/build.sbt +++ b/sbt-app/src/sbt-test/tests/zio-test/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.13.11" +ThisBuild / scalaVersion := "2.13.12" libraryDependencies += "dev.zio" %% "zio-test" % "2.0.2" % Test libraryDependencies += "dev.zio" %% "zio-test-sbt" % "2.0.2" % Test diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala index 31e558486..a15473901 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala @@ -15,8 +15,10 @@ import sbt.librarymanagement.{ DependencyResolution, ModuleID, ScalaArtifacts, + SemanticSelector, UnresolvedWarningConfiguration, - UpdateConfiguration + UpdateConfiguration, + VersionNumber, } import sbt.librarymanagement.syntax._ import xsbti.ArtifactInfo.SbtOrganization @@ -25,6 +27,8 @@ import xsbti.compile.{ ClasspathOptions, ScalaInstance => XScalaInstance } object ZincLmUtil { + final val scala2SbtBridgeStart = "2.13.12" + /** * Instantiate a Scala compiler that is instrumented to analyze dependencies. * This Scala compiler is useful to create your own instance of incremental @@ -86,6 +90,11 @@ object ZincLmUtil { if (ScalaArtifacts.isScala3(scalaVersion)) { ModuleID(ScalaArtifacts.Organization, "scala3-sbt-bridge", scalaVersion) .withConfigurations(Some(Compile.name)) + } else if (VersionNumber(scalaVersion).matchesSemVer( + SemanticSelector(s"=2.13 >=$scala2SbtBridgeStart") + )) { + ModuleID(ScalaArtifacts.Organization, "scala2-sbt-bridge", scalaVersion) + .withConfigurations(Some(Compile.name)) } else { val compilerBridgeId = scalaVersion match { case sc if sc startsWith "2.10." => "compiler-bridge_2.10" From 47344d264d430519cc325df44e10686e4bc6047b Mon Sep 17 00:00:00 2001 From: Matthew de Detrich Date: Wed, 13 Sep 2023 22:34:41 +0200 Subject: [PATCH 127/207] Remove invalid test --- .github/workflows/ci.yml | 1 - .../src/test/scala/xsbt/IPCSpec.scala | 23 ------------------- 2 files changed, 24 deletions(-) delete mode 100644 main-command/src/test/scala/xsbt/IPCSpec.scala diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6fddebb6..acbf5bf73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -186,7 +186,6 @@ jobs: shell: bash run: | # test building sbtn on Windows - sbt "commandProj/testOnly xsbt.IPCSpec" sbt "-Dsbt.io.virtual=false" nativeImage # test launcher script echo build using JDK 8, test using JDK 8, on Windows diff --git a/main-command/src/test/scala/xsbt/IPCSpec.scala b/main-command/src/test/scala/xsbt/IPCSpec.scala deleted file mode 100644 index dfeb1dc4f..000000000 --- a/main-command/src/test/scala/xsbt/IPCSpec.scala +++ /dev/null @@ -1,23 +0,0 @@ -/* - * sbt - * Copyright 2011 - 2018, Lightbend, Inc. - * Copyright 2008 - 2010, Mark Harrah - * Licensed under Apache License 2.0 (see LICENSE) - */ - -package xsbt - -import org.scalatest.flatspec.AnyFlatSpec -import org.scalatest.matchers.should.Matchers._ - -class IPCSpec extends AnyFlatSpec { - "server" should "allow same number of connections as determined in socket backlog" in { - noException should be thrownBy { - val server = IPC.unmanagedServer - (1 until IPC.socketBacklog + 1).foreach { _ => - IPC.client(server.port)(identity) - } - server.close() - } - } -} From c551c0fbcd477f85852a64f9ed012c961297be43 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 13 Sep 2023 22:54:46 -0400 Subject: [PATCH 128/207] Zinc 1.9.4 --- .github/workflows/ci.yml | 7 +++---- project/Dependencies.scala | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index acbf5bf73..3c4913f7c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,6 @@ jobs: JAVA_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 JVM_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 SCALA_212: 2.12.18 - SCALA_213: 2.13.11 SCALA_3: 3.1.0 UTIL_TESTS: "utilCache/test utilControl/test utilInterface/test utilLogging/test utilPosition/test utilRelation/test utilScripted/test utilTracking/test" SBT_LOCAL: false @@ -120,7 +119,7 @@ jobs: ./sbt -v --client "serverTestProj/test" ./sbt -v --client doc ./sbt -v --client "all $UTIL_TESTS" - ./sbt -v --client ++$SCALA_213 + ./sbt -v --client ++2.13.x ./sbt -v --client "all $UTIL_TESTS" - name: Build and test (2) if: ${{ matrix.jobtype == 2 }} @@ -141,7 +140,7 @@ jobs: if: ${{ matrix.jobtype == 5 }} shell: bash run: | - ./sbt -v "++$SCALA_213!; test; ++$SCALA_3!; all utilControl/test utilRelation/test utilPosition/test" + ./sbt -v "++2.13.x; all utilControl/test utilRelation/test utilPosition/test; ++$SCALA_3!; all utilControl/test utilRelation/test utilPosition/test" - name: Build and test (6) if: ${{ matrix.jobtype == 6 }} shell: bash @@ -153,7 +152,7 @@ jobs: cd ../ sbt -Dsbtlm.path=$HOME/work/sbt/sbt/librarymanagement -Dsbtzinc.path=$HOME/work/sbt/sbt/zinc -Dsbt.build.version=$BUILD_VERSION -Dsbt.build.fatal=false "+lowerUtils/publishLocal; {librarymanagement}/publishLocal; {zinc}/publishLocal; upperModules/publishLocal" rm -r $(find $HOME/.sbt/boot -name "*-SNAPSHOT") || true - sbt -v -Dsbt.version=$BUILD_VERSION "++$SCALA_213; all $UTIL_TESTS; ++$SCALA_212; all $UTIL_TESTS; scripted actions/* source-dependencies/*1of3 dependency-management/*1of4 java/*" + sbt -v -Dsbt.version=$BUILD_VERSION "++2.13.x; all $UTIL_TESTS; ++$SCALA_212; all $UTIL_TESTS; scripted actions/* source-dependencies/*1of3 dependency-management/*1of4 java/*" - name: Build and test (7) if: ${{ matrix.jobtype == 7 }} shell: bash diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 18af50955..b152ebfeb 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -5,7 +5,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { // WARNING: Please Scala update versions in PluginCross.scala too val scala212 = "2.12.18" - val scala213 = "2.13.11" + val scala213 = "2.13.12" val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up") val baseScalaVersion = scala212 def nightlyVersion: Option[String] = @@ -14,8 +14,8 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.9.1") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.2") - val zincVersion = nightlyVersion.getOrElse("1.9.3") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.3") + val zincVersion = nightlyVersion.getOrElse("1.9.4") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From c532d7e69f05b05ef15ecd328ceec36b0d107466 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 14 Sep 2023 00:56:37 -0400 Subject: [PATCH 129/207] sbt 1.9.5 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 9cd3bcaef..21dc04ef2 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.9.5-SNAPSHOT" + val v = "1.9.6-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index 994c5e68f..ccffe917e 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.4" +declare builtin_sbt_version="1.9.5" declare -a residual_args declare -a java_args declare -a scalac_args From 4701bf767716758088f72ce44d388e33104af9d3 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 15 Sep 2023 10:35:54 -0400 Subject: [PATCH 130/207] Zinc 1.9.5 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index b152ebfeb..a9cfdfbca 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.9.1") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.3") - val zincVersion = nightlyVersion.getOrElse("1.9.4") + val zincVersion = nightlyVersion.getOrElse("1.9.5") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From ef8652f93a06bdf24435ec2dd459a7055adab1db Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 15 Sep 2023 11:57:17 -0400 Subject: [PATCH 131/207] sbt 1.9.6 --- build.sbt | 2 +- sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 21dc04ef2..1199e135b 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.9.6-SNAPSHOT" + val v = "1.9.7-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" diff --git a/sbt b/sbt index ccffe917e..01bdeb220 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.5" +declare builtin_sbt_version="1.9.6" declare -a residual_args declare -a java_args declare -a scalac_args From 8ce5f2e336279803184f9fcb9c952803385ae5d6 Mon Sep 17 00:00:00 2001 From: Matthew de Detrich Date: Fri, 15 Sep 2023 20:48:49 +0200 Subject: [PATCH 132/207] Document scriptedSbt --- main/src/main/scala/sbt/ScriptedPlugin.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/ScriptedPlugin.scala b/main/src/main/scala/sbt/ScriptedPlugin.scala index 00bc687bf..85f8c9181 100644 --- a/main/src/main/scala/sbt/ScriptedPlugin.scala +++ b/main/src/main/scala/sbt/ScriptedPlugin.scala @@ -36,7 +36,7 @@ object ScriptedPlugin extends AutoPlugin { val ScriptedConf = Configurations.config("scripted-sbt") hide val ScriptedLaunchConf = Configurations.config("scripted-sbt-launch") hide - val scriptedSbt = settingKey[String]("") + val scriptedSbt = settingKey[String]("sbt version that is used when running scripted tests") val sbtLauncher = taskKey[File]("") val sbtTestDirectory = settingKey[File]("") val scriptedBufferLog = settingKey[Boolean]("") From f03320047e69f966e328435f48aafeb1c57029cc Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 25 Sep 2023 17:40:12 +0200 Subject: [PATCH 133/207] Keep logger names in hash set Previously, the list of logger names that have been created in a given context with Log4J was being kept in a `Vector`. As a result, subsequent calls to `logger` on a `Log4JLoggerContext` with the same logger name would introduce duplicates in the list. Note that Log4J's logger configuration would not allow duplicates, and only one configuration object for a given logger name will exist. The duplicates in the list of logger names are therefore unnecessary. With this patch, the logger names will be kept in a `HashSet`. Since the logger names are only used to remove the logger configurations after the logger context is closed, and the logger configurations contain no duplicates, removing duplicate logger names should not cause any issue. --- .../util-logging/src/main/scala/sbt/util/LoggerContext.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c887c786f..58aa5107a 100644 --- a/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala +++ b/internal/util-logging/src/main/scala/sbt/util/LoggerContext.scala @@ -46,7 +46,7 @@ object LoggerContext { case a: AbstractConfiguration => a case _ => throw new IllegalStateException("") } - val loggers = new java.util.Vector[String] + val loggers = new java.util.HashSet[String] private[this] val closed = new AtomicBoolean(false) override def logger( name: String, From c5fd4f2e6d211fc3b88b36b5795867f276b66109 Mon Sep 17 00:00:00 2001 From: Michel Davit Date: Tue, 3 Oct 2023 16:12:54 +0200 Subject: [PATCH 134/207] Support cross-build for external project ref --- main/src/main/scala/sbt/Cross.scala | 18 +++++++++--------- .../actions/cross-multiproject/build.sbt | 4 +++- .../lib/{ => src/main/scala}/A.scala | 0 .../actions/cross-multiproject/ref/build.sbt | 4 ++++ .../ref/src/main/scala/C.scala | 5 +++++ .../sbt-foo/{ => src/main/scala}/B.scala | 0 .../sbt-test/actions/cross-multiproject/test | 14 ++++++++++++-- .../module/{ => src/main/scala}/B.scala | 0 8 files changed, 33 insertions(+), 12 deletions(-) rename sbt-app/src/sbt-test/actions/cross-multiproject/lib/{ => src/main/scala}/A.scala (100%) create mode 100644 sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt create mode 100644 sbt-app/src/sbt-test/actions/cross-multiproject/ref/src/main/scala/C.scala rename sbt-app/src/sbt-test/actions/cross-multiproject/sbt-foo/{ => src/main/scala}/B.scala (100%) rename sbt-app/src/sbt-test/actions/cross-strict-aggregation/module/{ => src/main/scala}/B.scala (100%) diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 8494ebb76..6dc8dffd3 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -118,12 +118,11 @@ object Cross { )(command: String): (Seq[ProjectRef], String) = { import extracted._ import DefaultParsers._ - val parser = (OpOrID <~ charClass(_ == '/', "/")) ~ any.* map { - case seg1 ~ cmd => (seg1, cmd.mkString) - } + val parser = ((('{' ~> URIClass <~ '}').? ~ OpOrID <~ '/') ~ any.*.string) + .map { case uri ~ seg1 ~ cmd => (uri, seg1, cmd) } Parser.parse(command, parser) match { - case Right((seg1, cmd)) => - structure.allProjectRefs.find(_.project == seg1) match { + case Right((uri, seg1, cmd)) => + structure.allProjectRefs.find(p => uri.contains(p.build.toString) && seg1 == p.project) match { case Some(proj) => (Seq(proj), cmd) case _ => (resolveAggregates(extracted), command) } @@ -187,9 +186,10 @@ object Cross { keys.toSeq.flatMap { k => project(k).withFilter(projects.contains).flatMap { p => 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 - } ++ k.scope.task.toOption.map(_.label) ++ Some(k.key.label) + val parts = project(k).map(p => s"{${p.build}}${p.project}") ++ + k.scope.config.toOption.map(c => c.name.capitalize) ++ + k.scope.task.toOption.map(_.label) ++ + Some(k.key.label) Some(v -> parts.mkString("", "/", fullArgs)) } else None } @@ -257,7 +257,7 @@ object Cross { val (aggs, aggCommand) = parseSlashCommand(Project.extract(state))(rawCmd) aggs .intersect(affectedRefs) - .map({ case ProjectRef(_, proj) => s"$proj/$aggCommand" }) + .map(p => s"{${p.build}}${p.project}/$aggCommand") .mkString("all ", " ", "") } } diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt index 1b411f1db..30fc02654 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt @@ -5,7 +5,7 @@ ThisBuild / crossScalaVersions := Seq(scala212, scala213) ThisBuild / scalaVersion := scala212 lazy val rootProj = (project in file(".")) - .aggregate(libProj, fooPlugin) + .aggregate(libProj, fooPlugin, externalProj) .settings( crossScalaVersions := Nil, addCommandAlias("build", "compile") @@ -27,3 +27,5 @@ lazy val extrasProj = (project in file("extras")) .settings( name := "foo-extras", ) + +lazy val externalProj = ProjectRef(file("ref"), "external") diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/lib/A.scala b/sbt-app/src/sbt-test/actions/cross-multiproject/lib/src/main/scala/A.scala similarity index 100% rename from sbt-app/src/sbt-test/actions/cross-multiproject/lib/A.scala rename to sbt-app/src/sbt-test/actions/cross-multiproject/lib/src/main/scala/A.scala diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt b/sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt new file mode 100644 index 000000000..e7c15281f --- /dev/null +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt @@ -0,0 +1,4 @@ +lazy val external = (project in file(".")) + .settings( + scalaVersion := "2.12.18" + ) diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/ref/src/main/scala/C.scala b/sbt-app/src/sbt-test/actions/cross-multiproject/ref/src/main/scala/C.scala new file mode 100644 index 000000000..2fb50c68d --- /dev/null +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/ref/src/main/scala/C.scala @@ -0,0 +1,5 @@ +package ref.sbt + +object Ref { + +} \ No newline at end of file diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/sbt-foo/B.scala b/sbt-app/src/sbt-test/actions/cross-multiproject/sbt-foo/src/main/scala/B.scala similarity index 100% rename from sbt-app/src/sbt-test/actions/cross-multiproject/sbt-foo/B.scala rename to sbt-app/src/sbt-test/actions/cross-multiproject/sbt-foo/src/main/scala/B.scala diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/test b/sbt-app/src/sbt-test/actions/cross-multiproject/test index 699f1221c..56cba5b73 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/test +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/test @@ -18,6 +18,8 @@ $ exists lib/target/scala-2.12 -$ exists lib/target/scala-2.13 $ exists sbt-foo/target/scala-2.12 -$ exists sbt-foo/target/scala-2.13 +$ exists ref/target/scala-2.12 +-$ exists ref/target/scala-2.13 # Test legacy cross build with command support # > clean @@ -39,8 +41,11 @@ $ exists extras/target/scala-2.12 > ++ 2.13.12 -v compile $ exists lib/target/scala-2.13 -$ exists lib/target/scala-2.12 -# -$ exists sbt-foo/target/scala-2.12 +# sbt-foo and ref do not cross-build 2.13 +-$ exists sbt-foo/target/scala-2.12 -$ exists sbt-foo/target/scala-2.13 +-$ exists ref/target/scala-2.12 +-$ exists ref/target/scala-2.13 # test wildcard switching (2.12) > clean @@ -49,14 +54,19 @@ $ exists lib/target/scala-2.12 -$ exists lib/target/scala-2.13 $ exists sbt-foo/target/scala-2.12 -$ exists sbt-foo/target/scala-2.13 +$ exists ref/target/scala-2.12 +-$ exists ref/target/scala-2.13 # test wildcard switching (2.13) > clean > ++ 2.13.x -v compile $ exists lib/target/scala-2.13 -$ exists lib/target/scala-2.12 -# -$ exists sbt-foo/target/scala-2.12 +# sbt-foo and ref do not cross-build 2.13 +-$ exists sbt-foo/target/scala-2.12 -$ exists sbt-foo/target/scala-2.13 +-$ exists ref/target/scala-2.12 +-$ exists ref/target/scala-2.13 # test wildcard switching (no matches) -> ++ 3.* diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/module/B.scala b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/module/src/main/scala/B.scala similarity index 100% rename from sbt-app/src/sbt-test/actions/cross-strict-aggregation/module/B.scala rename to sbt-app/src/sbt-test/actions/cross-strict-aggregation/module/src/main/scala/B.scala From 807f4dfdd2db59879a9846b2f166020f0c73d015 Mon Sep 17 00:00:00 2001 From: adpi2 Date: Wed, 4 Oct 2023 09:50:24 +0200 Subject: [PATCH 135/207] Fix build.sbt --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index b284d4a1f..f26ff9067 100644 --- a/build.sbt +++ b/build.sbt @@ -370,7 +370,7 @@ lazy val utilPosition = (project in file("internal") / "util-position") ) lazy val utilLogging = (project in file("internal") / "util-logging") - .enablePlugins(ContrabandPlugin, JsonCodecPlugin + .enablePlugins(ContrabandPlugin, JsonCodecPlugin) .dependsOn(utilInterface, collectionProj, coreMacrosProj) .settings( testedBaseSettings, From ebcab3e120bc53408a6d57bd29f8f7b2664a8456 Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Fri, 6 Oct 2023 10:33:04 -0400 Subject: [PATCH 136/207] Update build.properties --- project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build.properties b/project/build.properties index 3c0b78a7c..27430827b 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.9.1 +sbt.version=1.9.6 From bf8e92be743bca3d1e3c200e191134fe55e840a9 Mon Sep 17 00:00:00 2001 From: Domantas Petrauskas <5850190+ptrdom@users.noreply.github.com> Date: Fri, 6 Oct 2023 19:31:27 +0300 Subject: [PATCH 137/207] Fix VM argument passing by .sbtopts file and JAVA_TOOL_OPTIONS environmental variable (#7393) Fixes #7387 * Fix VM argument passing by .sbtopts file and JAVA_TOOL_OPTIONS environmental variable, improve launcher script integration test setup * Fix sbt process not exiting in launcher test for --sbt-version * Fix JAVA_TOOL_OPTIONS in launcher for linux/mac --- .github/workflows/ci.yml | 6 +- launcher-package/build.sbt | 8 +- .../src/test/scala/ScriptTest.scala | 95 ++++++++++++++----- launcher-package/src/universal/bin/sbt.bat | 9 +- sbt | 2 + 5 files changed, 87 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c4913f7c..066046fd8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -163,7 +163,7 @@ jobs: echo build using JDK 8 test using JDK 8 and JDK 11 cd launcher-package sbt -Dsbt.build.version=$TEST_SBT_VER rpm:packageBin debian:packageBin - sbt -Dsbt.build.version=$TEST_SBT_VER universal:packageBin universal:stage integrationTest/test + sbt -Dsbt.build.version=$TEST_SBT_VER integrationTest/test cd citest && ./test.sh $HOME/bin/jabba install $JDK11 && exec $HOME/bin/jabba which --home $JDK11 java -Xmx32m -version @@ -178,7 +178,7 @@ jobs: echo build using JDK 8, test using JDK 8, on macOS cd launcher-package bin/coursier resolve - sbt -Dsbt.build.version=$TEST_SBT_VER universal:packageBin universal:stage integrationTest/test + sbt -Dsbt.build.version=$TEST_SBT_VER integrationTest/test cd citest && ./test.sh - name: Build and test (9) if: ${{ matrix.jobtype == 9 }} @@ -190,7 +190,7 @@ jobs: echo build using JDK 8, test using JDK 8, on Windows cd launcher-package bin/coursier.bat resolve - sbt -Dsbt.build.version=$TEST_SBT_VER universal:packageBin universal:stage integrationTest/test + sbt -Dsbt.build.version=$TEST_SBT_VER integrationTest/test cd citest ./test.bat test3/test3.bat diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index 66eade64d..bf51e787f 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -379,7 +379,13 @@ lazy val integrationTest = (project in file("integration-test")) "com.eed3si9n.expecty" %% "expecty" % "0.11.0" % Test, "org.scala-sbt" %% "io" % "1.3.1" % Test ), - testFrameworks += new TestFramework("minitest.runner.Framework") + testFrameworks += new TestFramework("minitest.runner.Framework"), + test in Test := { + (test in Test).dependsOn(((packageBin in Universal) in LocalRootProject).dependsOn(((stage in (Universal) in LocalRootProject)))).value + }, + testOnly in Test := { + (testOnly in Test).dependsOn(((packageBin in Universal) in LocalRootProject).dependsOn(((stage in (Universal) in LocalRootProject)))).evaluated + } ) def downloadUrlForVersion(v: String) = (v split "[^\\d]" flatMap (i => catching(classOf[Exception]) opt (i.toInt))) match { diff --git a/launcher-package/integration-test/src/test/scala/ScriptTest.scala b/launcher-package/integration-test/src/test/scala/ScriptTest.scala index e1fe01b5f..512cd4345 100644 --- a/launcher-package/integration-test/src/test/scala/ScriptTest.scala +++ b/launcher-package/integration-test/src/test/scala/ScriptTest.scala @@ -1,7 +1,11 @@ package example.test import minitest._ +import sbt.io.IO + import java.io.File +import java.io.PrintWriter +import java.nio.file.Files object SbtScriptTest extends SimpleTestSuite with PowerAssertions { lazy val isWindows: Boolean = @@ -16,28 +20,40 @@ object SbtScriptTest extends SimpleTestSuite with PowerAssertions { name: String, javaOpts: String = "", sbtOpts: String = "", + sbtOptsFileContents: String = "", + javaToolOptions: String = "" )(args: String*)(f: List[String] => Any) = { test(name) { - val out = - sbtProcessWithOpts(args: _*)(javaOpts = javaOpts, sbtOpts = sbtOpts).!!.linesIterator.toList - f(out) - () - } - } + val workingDirectory = Files.createTempDirectory("sbt-launcher-package-test").toFile + IO.copyDirectory(new File("citest"), workingDirectory) - def sbtProcess(args: String*) = sbtProcessWithOpts(args: _*)("", "") - def sbtProcessWithOpts(args: String*)(javaOpts: String, sbtOpts: String) = { - val path = sys.env("PATH") - sbt.internal.Process( - Seq(sbtScript.getAbsolutePath) ++ args, - new File("citest"), - "JAVA_OPTS" -> javaOpts, - "SBT_OPTS" -> sbtOpts, - if (isWindows) - "JAVACMD" -> new File(javaBinDir, "java.cmd").getAbsolutePath() - else - "PATH" -> (javaBinDir + File.pathSeparator + path) - ) + try { + val sbtOptsFile = new File(workingDirectory, ".sbtopts") + sbtOptsFile.createNewFile() + val writer = new PrintWriter(sbtOptsFile) + try { + writer.write(sbtOptsFileContents) + } finally { + writer.close() + } + val path = sys.env.getOrElse("PATH", sys.env("Path")) + val out = sbt.internal.Process( + Seq(sbtScript.getAbsolutePath) ++ args, + workingDirectory, + "JAVA_OPTS" -> javaOpts, + "SBT_OPTS" -> sbtOpts, + "JAVA_TOOL_OPTIONS" -> javaToolOptions, + if (isWindows) + "JAVACMD" -> new File(javaBinDir, "java").getAbsolutePath() + else + "PATH" -> (javaBinDir + File.pathSeparator + path) + ).!!.linesIterator.toList + f(out) + () + } finally { + IO.delete(workingDirectory) + } + } } makeTest("sbt -no-colors")("compile", "-no-colors", "-v") { out: List[String] => @@ -161,11 +177,9 @@ object SbtScriptTest extends SimpleTestSuite with PowerAssertions { assert(!out.contains[String]("-XX:+UseG1GC=-XX:+PrintGC")) } - test("sbt with -debug in SBT_OPTS appears in sbt commands") { + makeTest("sbt with -debug in SBT_OPTS appears in sbt commands", javaOpts = "", sbtOpts = "-debug")("compile", "-v") {out: List[String] => if (isWindows) cancel("Test not supported on windows") - val out: List[String] = - sbtProcessWithOpts("compile", "-v")(javaOpts = "", sbtOpts = "-debug").!!.linesIterator.toList // Debug argument must appear in the 'commands' section (after the sbt-launch.jar argument) to work val sbtLaunchMatcher = """^.+sbt-launch.jar["]{0,1}$""".r val locationOfSbtLaunchJarArg = out.zipWithIndex.collectFirst { @@ -196,14 +210,45 @@ object SbtScriptTest extends SimpleTestSuite with PowerAssertions { assert(out.contains[String]("-Dsbt.ivy.home=/ivy/dir")) } - test("sbt --script-version should print sbtVersion") { - val out = sbtProcess("--script-version").!!.trim + makeTest("sbt --script-version should print sbtVersion")("--script-version") { out: List[String] => val expectedVersion = "^" + SbtRunnerTest.versionRegEx + "$" - assert(out.matches(expectedVersion)) + assert(out.mkString(System.lineSeparator()).trim.matches(expectedVersion)) () } makeTest("--sbt-cache")("--sbt-cache", "./cachePath") { out: List[String] => assert(out.contains[String](s"-Dsbt.global.localcache=./cachePath")) } + + makeTest( + "sbt use .sbtopts file for memory options", sbtOptsFileContents = + """-J-XX:MaxInlineLevel=20 + |-J-Xmx222m + |-J-Xms111m + |-J-Xss12m""".stripMargin + + )("compile", "-v") { out: List[String] => + assert(out.contains[String]("-XX:MaxInlineLevel=20")) + assert(out.contains[String]("-Xmx222m")) + assert(out.contains[String]("-Xms111m")) + assert(out.contains[String]("-Xss12m")) + } + + makeTest( + "sbt use JAVA_OPTS for memory options", javaOpts = "-XX:MaxInlineLevel=20 -Xmx222m -Xms111m -Xss12m" + )("compile", "-v") { out: List[String] => + assert(out.contains[String]("-XX:MaxInlineLevel=20")) + assert(out.contains[String]("-Xmx222m")) + assert(out.contains[String]("-Xms111m")) + assert(out.contains[String]("-Xss12m")) + } + + makeTest( + "sbt use JAVA_TOOL_OPTIONS for memory options", javaToolOptions = "-XX:MaxInlineLevel=20 -Xmx222m -Xms111m -Xss12m" + )("compile", "-v") { out: List[String] => + assert(out.contains[String]("-XX:MaxInlineLevel=20")) + assert(out.contains[String]("-Xmx222m")) + assert(out.contains[String]("-Xms111m")) + assert(out.contains[String]("-Xss12m")) + } } diff --git a/launcher-package/src/universal/bin/sbt.bat b/launcher-package/src/universal/bin/sbt.bat index dc1f3c8a1..de25ca25d 100755 --- a/launcher-package/src/universal/bin/sbt.bat +++ b/launcher-package/src/universal/bin/sbt.bat @@ -682,6 +682,7 @@ if defined sbt_args_verbose ( echo "!_JAVACMD!" if defined _JAVA_OPTS ( call :echolist !_JAVA_OPTS! ) if defined _SBT_OPTS ( call :echolist !_SBT_OPTS! ) + if defined JAVA_TOOL_OPTIONS ( call :echolist %JAVA_TOOL_OPTIONS% ) echo -cp echo "!sbt_jar!" echo xsbt.boot.Boot @@ -689,7 +690,7 @@ if defined sbt_args_verbose ( echo. ) -"!_JAVACMD!" !_JAVA_OPTS! !_SBT_OPTS! -cp "!sbt_jar!" xsbt.boot.Boot %* +"!_JAVACMD!" !_JAVA_OPTS! !_SBT_OPTS! %JAVA_TOOL_OPTIONS% -cp "!sbt_jar!" xsbt.boot.Boot %* goto :eof @@ -828,21 +829,21 @@ exit /B 0 set _has_memory_args= - if defined _JAVA_OPTS for /F %%g in ("!_JAVA_OPTS!") do ( + if defined _JAVA_OPTS for %%g in (%_JAVA_OPTS%) do ( set "p=%%g" if "!p:~0,4!" == "-Xmx" set _has_memory_args=1 if "!p:~0,4!" == "-Xms" set _has_memory_args=1 if "!p:~0,4!" == "-Xss" set _has_memory_args=1 ) - if defined JAVA_TOOL_OPTIONS for /F %%g in ("%JAVA_TOOL_OPTIONS%") do ( + if defined JAVA_TOOL_OPTIONS for %%g in (%JAVA_TOOL_OPTIONS%) do ( set "p=%%g" if "!p:~0,4!" == "-Xmx" set _has_memory_args=1 if "!p:~0,4!" == "-Xms" set _has_memory_args=1 if "!p:~0,4!" == "-Xss" set _has_memory_args=1 ) - if defined _SBT_OPTS for /F %%g in ("!_SBT_OPTS!") do ( + if defined _SBT_OPTS for %%g in (%_SBT_OPTS%) do ( set "p=%%g" if "!p:~0,4!" == "-Xmx" set _has_memory_args=1 if "!p:~0,4!" == "-Xms" set _has_memory_args=1 diff --git a/sbt b/sbt index 01bdeb220..e01edc50e 100755 --- a/sbt +++ b/sbt @@ -515,6 +515,7 @@ run() { execRunner "$java_cmd" \ "${java_args[@]}" \ "${sbt_options[@]}" \ + "${java_tool_options[@]}" \ -jar "$sbt_jar" \ "${sbt_commands[@]}" \ "${residual_args[@]}" @@ -785,6 +786,7 @@ original_args=("$@") java_args=($JAVA_OPTS) sbt_options0=(${SBT_OPTS:-$default_sbt_opts}) +java_tool_options=($JAVA_TOOL_OPTIONS) if [[ "$SBT_NATIVE_CLIENT" == "true" ]]; then use_sbtn=1 fi From 5fddf3d741d8313f20901adb00c2e2e93fc8cef1 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Sat, 7 Oct 2023 12:20:01 +0200 Subject: [PATCH 138/207] Include uri in log of dependencyBrowseTree --- main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala index 01e72e9ef..9cf6ee368 100644 --- a/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala +++ b/main/src/main/scala/sbt/plugins/DependencyTreeSettings.scala @@ -244,7 +244,7 @@ object DependencyTreeSettings { def openBrowser(uriKey: TaskKey[URI]) = Def.task { val uri = uriKey.value - streams.value.log.info("Opening in browser...") + streams.value.log.info(s"Opening ${uri} in browser...") java.awt.Desktop.getDesktop.browse(uri) uri } From 8d44bbb8a5f5f0e2295db5000d50725c10d9c318 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sun, 8 Oct 2023 17:49:20 +0900 Subject: [PATCH 139/207] avoid deprecated `java.net.URL` constructor - https://bugs.openjdk.org/browse/JDK-8295949 - https://github.com/openjdk/jdk/commit/4338f527aa81350e3636dcfbcd2eb17ddaad3914 --- .../internal/scriptedtest/ScriptedLauncher.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java b/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java index 7e21f0795..5badb4a56 100644 --- a/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java +++ b/sbt-app/src/test/scala/sbt/internal/scriptedtest/ScriptedLauncher.java @@ -14,6 +14,8 @@ import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.nio.file.FileAlreadyExistsException; @@ -41,11 +43,11 @@ import xsbti.ScalaProvider; public class ScriptedLauncher { private static URL URLForClass(final Class clazz) - throws MalformedURLException, ClassNotFoundException { + throws MalformedURLException, ClassNotFoundException, URISyntaxException { final String path = clazz.getCanonicalName().replace('.', '/') + ".class"; final URL url = clazz.getClassLoader().getResource(path); if (url == null) throw new ClassNotFoundException(clazz.getCanonicalName()); - return new URL(url.toString().replaceAll(path + "$", "")); + return new URI(url.toString().replaceAll(path + "$", "")).toURL(); } public static Optional launch( @@ -57,7 +59,7 @@ public class ScriptedLauncher { final File[] classpath, String[] arguments) throws InvocationTargetException, ClassNotFoundException, NoSuchMethodException, - IllegalAccessException, IOException { + IllegalAccessException, IOException, URISyntaxException { String[] args = arguments; Object appID = null; if (System.getProperty("sbt.launch.jar") == null) { @@ -136,7 +138,7 @@ public class ScriptedLauncher { swap(loader, previous); } } else { - final URL url = new URL("file:" + System.getProperty("sbt.launch.jar")); + final URL url = new URI("file:" + System.getProperty("sbt.launch.jar")).toURL(); final URLClassLoader loader = new URLClassLoader(new URL[] {url}, top()); final Class boot = loader.loadClass("xsbt.boot.Boot"); // If we don't initialize the arguments this way, then the call to invoke on @@ -569,7 +571,9 @@ public class ScriptedLauncher { @Override public URL url() { try { - return new URL(url); + return new URI(url).toURL(); + } catch (URISyntaxException e) { + throw new RuntimeException(e); } catch (MalformedURLException e) { throw new RuntimeException(e); } From 32558c95379b0aa927560dd9adcbc7a10eb8e90e Mon Sep 17 00:00:00 2001 From: kenji yoshida <6b656e6a69@gmail.com> Date: Sun, 8 Oct 2023 18:04:06 +0900 Subject: [PATCH 140/207] catch NoSuchMethodError when call runFinalization --- main/src/main/scala/sbt/internal/GCUtil.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/GCUtil.scala b/main/src/main/scala/sbt/internal/GCUtil.scala index 51d08d41c..e114c9e85 100644 --- a/main/src/main/scala/sbt/internal/GCUtil.scala +++ b/main/src/main/scala/sbt/internal/GCUtil.scala @@ -37,7 +37,11 @@ private[sbt] object GCUtil { // Force the detection of finalizers for scala.reflect weakhashsets System.gc() // Force finalizers to run. - System.runFinalization() + try { + System.runFinalization() + } catch { + case _: NoSuchMethodError => + } // Force actually cleaning the weak hash maps. System.gc() } catch { From 9f1d2fd4ed3ce95e7d0375f66eb6e17eac8aa954 Mon Sep 17 00:00:00 2001 From: MINKYU LEE Date: Mon, 9 Oct 2023 11:56:48 +0900 Subject: [PATCH 141/207] Fix bug of unmanagedResourceDirectories (#7178) Sort resourceDirectories for copyResourcesTask --- main/src/main/scala/sbt/Defaults.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 8a8728892..bf30d5f71 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2542,7 +2542,8 @@ object Defaults extends BuildCommon { val cacheStore = factory.make("copy-resource") val converter = fileConverter.value val flt: File => Option[File] = flat(t) - val transform: File => Option[File] = (f: File) => rebase(dirs, t)(f).orElse(flt(f)) + val transform: File => Option[File] = + (f: File) => rebase(resourceDirectories.value.sorted, t)(f).orElse(flt(f)) val mappings: Seq[(File, File)] = resources.value.flatMap { case r if !dirs(r) => transform(r).map(r -> _) case _ => None From d27a1a4ebbb8a52c4800e06dd645ba8dc8d371b5 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Wed, 11 Oct 2023 20:59:19 +0200 Subject: [PATCH 142/207] Add MiMa exclusion Changing the return type of is fine because this symbol is private and internal to sbt. --- build.sbt | 1 + 1 file changed, 1 insertion(+) diff --git a/build.sbt b/build.sbt index bba828f2a..446206ea1 100644 --- a/build.sbt +++ b/build.sbt @@ -428,6 +428,7 @@ lazy val utilLogging = (project in file("internal") / "util-logging") exclude[MissingTypesProblem]("sbt.internal.util.ConsoleAppender"), exclude[MissingTypesProblem]("sbt.internal.util.BufferedAppender"), exclude[MissingClassProblem]("sbt.internal.util.Terminal$BlockingInputStream$"), + exclude[IncompatibleResultTypeProblem]("sbt.util.LoggerContext#Log4JLoggerContext.loggers"), ), ) .configure(addSbtIO) From 2957f63244d495293f5a523993ddc7e11ee62656 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Wed, 11 Oct 2023 21:07:41 +0200 Subject: [PATCH 143/207] Fix build.sbt formatting --- build.sbt | 1 - 1 file changed, 1 deletion(-) diff --git a/build.sbt b/build.sbt index f26ff9067..17197a6e9 100644 --- a/build.sbt +++ b/build.sbt @@ -179,7 +179,6 @@ def mimaSettingsSince(versions: Seq[String]): Seq[Def.Setting[_]] = Def settings exclude[IncompatibleResultTypeProblem]("sbt.EvaluateTask.executeProgress"), exclude[DirectMissingMethodProblem]("sbt.Keys.currentTaskProgress"), exclude[IncompatibleResultTypeProblem]("sbt.PluginData.copy$default$10") - ), ) From 77e22e9a014c36f56e7862e1a190ea351425b354 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Wed, 11 Oct 2023 21:18:22 +0200 Subject: [PATCH 144/207] Small documentation fixes --- main/src/main/scala/sbt/ExecuteProgress2.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/ExecuteProgress2.scala b/main/src/main/scala/sbt/ExecuteProgress2.scala index 41ed6e658..006b8f829 100644 --- a/main/src/main/scala/sbt/ExecuteProgress2.scala +++ b/main/src/main/scala/sbt/ExecuteProgress2.scala @@ -13,6 +13,10 @@ import sbt.internal.util.RMap * Tracks command execution progress. In addition to ExecuteProgress, this interface * adds command start and end events, and gives access to the sbt.State at the beginning * and end of each command. + * + * Command progress callbacks are wrapping task progress callbacks. That is, the `beforeCommand` + * callback will be called before the `initial` callback from ExecuteProgress, and the + * `afterCommand` callback will be called after the `stop` callback from ExecuteProgress. */ trait ExecuteProgress2 extends ExecuteProgress[Task] { @@ -30,7 +34,9 @@ trait ExecuteProgress2 extends ExecuteProgress[Task] { * @param cmd The command string. * @param result Left in case of an error. If the command cannot be parsed, it will be * signalled as a ParseException with a detailed message. If the command - * was cancelled by the user, as sbt.Cancelled. + * was cancelled by the user, as sbt.Cancelled. If the command succeeded, + * Right with the new state after command execution. + * */ def afterCommand(cmd: String, result: Either[Throwable, State]): Unit } From 2956f168db629999110c1fd5b8b4303fa84332f5 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 12 Oct 2023 13:59:36 -0400 Subject: [PATCH 145/207] Make loading order alphabetical for plugins **Problem** Plugins are topologically sorted, but plugins with equal weigh could modify the same key via `~=` etc, resulting in different builds depending on the artifact. **Solution** This attempts to fix that by first sorting the selected plugins by the class name before sorting it topologically. --- main/src/main/scala/sbt/Plugins.scala | 4 +- main/src/test/scala/PluginsTest.scala | 6 +- .../sbt-test/project/auto-plugins/build.sbt | 63 ++++++++++--------- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/main/src/main/scala/sbt/Plugins.scala b/main/src/main/scala/sbt/Plugins.scala index 92a9947cd..42a19b4bc 100644 --- a/main/src/main/scala/sbt/Plugins.scala +++ b/main/src/main/scala/sbt/Plugins.scala @@ -216,12 +216,12 @@ object Plugins extends PluginsFunctions { case Right(results) => log.debug(s" :: deduced result: ${results}") val selectedAtoms: List[Atom] = results.ordered - val selectedPlugins = selectedAtoms map { a => + val selectedPlugins = (selectedAtoms map { a => byAtomMap.getOrElse( a, throw AutoPluginException(s"${a} was not found in atom map.") ) - } + }).sortBy(_.getClass.getName) val forbidden: Set[AutoPlugin] = (selectedPlugins flatMap { Plugins.asExclusions }).toSet val c = selectedPlugins.toSet & forbidden diff --git a/main/src/test/scala/PluginsTest.scala b/main/src/test/scala/PluginsTest.scala index e7bdcf826..f0fc850e1 100644 --- a/main/src/test/scala/PluginsTest.scala +++ b/main/src/test/scala/PluginsTest.scala @@ -48,7 +48,7 @@ object PluginsTest extends verify.BasicTestSuite { assertEquals( s"""Contradiction in enabled plugins: - requested: sbt.AI$$S - - enabled: sbt.AI$$S, sbt.AI$$Q, sbt.AI$$R, sbt.AI$$B, sbt.AI$$A + - enabled: sbt.AI$$A, sbt.AI$$B, sbt.AI$$Q, sbt.AI$$R, sbt.AI$$S - conflict: sbt.AI$$R is enabled by sbt.AI$$Q; excluded by sbt.AI$$S""", e.message ) @@ -63,8 +63,8 @@ object PluginsTest extends verify.BasicTestSuite { assertEquals( s"""Contradiction in enabled plugins: - requested: sbt.AI$$T && sbt.AI$$U - - enabled: sbt.AI$$U, sbt.AI$$T, sbt.AI$$A, sbt.AI$$Q, sbt.AI$$R, sbt.AI$$B - - conflict: sbt.AI$$Q is enabled by sbt.AI$$A && sbt.AI$$B; required by sbt.AI$$T, sbt.AI$$R; excluded by sbt.AI$$U + - enabled: sbt.AI$$A, sbt.AI$$B, sbt.AI$$Q, sbt.AI$$R, sbt.AI$$T, sbt.AI$$U + - conflict: sbt.AI$$Q is enabled by sbt.AI$$A && sbt.AI$$B; required by sbt.AI$$R, sbt.AI$$T; excluded by sbt.AI$$U - conflict: sbt.AI$$R is enabled by sbt.AI$$Q; excluded by sbt.AI$$T""", e.message ) diff --git a/sbt-app/src/sbt-test/project/auto-plugins/build.sbt b/sbt-app/src/sbt-test/project/auto-plugins/build.sbt index f564d4879..99b366f08 100644 --- a/sbt-app/src/sbt-test/project/auto-plugins/build.sbt +++ b/sbt-app/src/sbt-test/project/auto-plugins/build.sbt @@ -29,37 +29,38 @@ lazy val projI = project.enablePlugins(TopC) lazy val disableAutoNoRequirePlugin = project.disablePlugins(OrgPlugin) check := { - // Ensure organization on root is overridable. - val rorg = (organization).value // Should be None - same(rorg, "override", "organization") - // this will pass when the raw disablePlugin works. - val dversion = (projectID in projD).?.value // Should be None - same(dversion, None, "projectID in projD") + // Ensure organization on root is overridable. + val rorg = (organization).value // Should be None + same(rorg, "override", "organization") + // this will pass when the raw disablePlugin works. + val dversion = (projectID in projD).?.value // Should be None + same(dversion, None, "projectID in projD") -// Ensure with multiple .sbt files that disabling/enabling works across them - val fDel = (del in Quux in projF).?.value - same(fDel, Some(" Q"), "del in Quux in projF") -// - val adel = (del in projA).?.value // should be None - same(adel, None, "del in projA") - val bdel = (del in projB).?.value // should be None - same(bdel, None, "del in projB") - val ddel = (del in projD).?.value // should be None - same(ddel, None, "del in projD") -// - val buildValue = (demo in ThisBuild).value - same(buildValue, "build 0", "demo in ThisBuild") - val globalValue = (demo in Global).value - same(globalValue, "global 0", "demo in Global") - val projValue = (demo in projC).?.value - same(projValue, Some("project projC Q R"), "demo in projC") - val qValue = (del in projC in Quux).?.value - same(qValue, Some(" Q R"), "del in projC in Quux") - val optInValue = (del in projE in Quux).value - same(optInValue, " Q S R", "del in projE in Quux") - val overrideOrgValue = (organization in projE).value - same(overrideOrgValue, "S", "organization in projE") -// tests for top level plugins + // Ensure with multiple .sbt files that disabling/enabling works across them + val fDel = (del in Quux in projF).?.value + same(fDel, Some(" Q"), "del in Quux in projF") + + val adel = (del in projA).?.value // should be None + same(adel, None, "del in projA") + val bdel = (del in projB).?.value // should be None + same(bdel, None, "del in projB") + val ddel = (del in projD).?.value // should be None + same(ddel, None, "del in projD") + + val buildValue = (demo in ThisBuild).value + same(buildValue, "build 0", "demo in ThisBuild") + val globalValue = (demo in Global).value + same(globalValue, "global 0", "demo in Global") + val projValue = (demo in projC).?.value + same(projValue, Some("project projC Q R"), "demo in projC") + val qValue = (del in projC in Quux).?.value + same(qValue, Some(" Q R"), "del in projC in Quux") + val optInValue = (del in projE in Quux).value + same(optInValue, " Q R S", "del in projE in Quux") + val overrideOrgValue = (organization in projE).value + same(overrideOrgValue, "S", "organization in projE") + + // tests for top level plugins val topLevelAValueG = (topLevelDemo in projG).value same(topLevelAValueG, "TopA: topLevelDemo project projG", "topLevelDemo in projG") val demoValueG = (demo in projG).value @@ -75,5 +76,5 @@ keyTest := "foo" topLevelKeyTest := "bar" def same[T](actual: T, expected: T, label: String): Unit = { - assert(actual == expected, s"Expected '$expected' for `$label`, got '$actual'") + assert(actual == expected, s"Expected '$expected' for `$label`, got '$actual'") } From 33ea2e06e06c29c705d025ea2a1b086e77118294 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Thu, 19 Oct 2023 13:39:12 +0900 Subject: [PATCH 146/207] update test scala versions --- sbt-app/src/sbt-test/actions/package-delete-target/build.sbt | 2 +- sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt | 2 +- .../src/sbt-test/dependency-graph/cachedResolution/build.sbt | 2 +- .../sbt-test/dependency-management/ext-pom-classifier/build.sbt | 2 +- sbt-app/src/sbt-test/java/cross/build.sbt | 2 +- sbt-app/src/sbt-test/java/cross/changes/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/unidoc/build.sbt | 2 +- sbt-app/src/sbt-test/project/semanticdb/build.sbt | 2 +- sbt-app/src/sbt-test/run/fork-loader/build.sbt | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt b/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt index 521d0c6da..dbecc17a2 100644 --- a/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt +++ b/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt @@ -1,5 +1,5 @@ lazy val root = (project in file(".")) .settings( name := "delete-target", - scalaVersion := "2.12.1" + scalaVersion := "2.12.18" ) diff --git a/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt b/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt index 248b7cb45..0290928bc 100644 --- a/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt @@ -5,7 +5,7 @@ val Macro = config("macro").hide.extend(Compile) lazy val root = (project in file(".")) .settings( - scalaVersion := "2.12.2", + scalaVersion := "2.12.18", // Adds a "macro" configuration for macro dependencies. ivyConfigurations.value += Macro, diff --git a/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt b/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt index e4d1990a8..a53e16511 100644 --- a/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.12.9" +scalaVersion := "2.12.18" libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.28" updateOptions := updateOptions.value.withCachedResolution(true) diff --git a/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt b/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt index d3253a483..df57eb164 100644 --- a/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt @@ -2,6 +2,6 @@ ThisBuild / useCoursier := false lazy val root = (project in file(".")) .settings( - scalaVersion := "2.12.6", + scalaVersion := "2.12.18", externalPom() ) diff --git a/sbt-app/src/sbt-test/java/cross/build.sbt b/sbt-app/src/sbt-test/java/cross/build.sbt index c71bd179e..2631bc446 100644 --- a/sbt-app/src/sbt-test/java/cross/build.sbt +++ b/sbt-app/src/sbt-test/java/cross/build.sbt @@ -4,7 +4,7 @@ val check = inputKey[Unit]("Runs the check") lazy val root = (project in file(".")) .settings( - ThisBuild / scalaVersion := "2.12.6", + ThisBuild / scalaVersion := "2.12.18", crossJavaVersions := List("1.8"), // read out.txt and see if it starts with the passed in number diff --git a/sbt-app/src/sbt-test/java/cross/changes/build.sbt b/sbt-app/src/sbt-test/java/cross/changes/build.sbt index 245745912..5aa7b90f0 100644 --- a/sbt-app/src/sbt-test/java/cross/changes/build.sbt +++ b/sbt-app/src/sbt-test/java/cross/changes/build.sbt @@ -4,7 +4,7 @@ val check = inputKey[Unit]("Runs the check") lazy val root = (project in file(".")) .settings( - ThisBuild / scalaVersion := "2.12.6", + ThisBuild / scalaVersion := "2.12.18", crossJavaVersions := List("1.8", "10"), // read out.txt and see if it starts with the passed in number diff --git a/sbt-app/src/sbt-test/plugins/unidoc/build.sbt b/sbt-app/src/sbt-test/plugins/unidoc/build.sbt index 3aa46422f..6ce0853aa 100644 --- a/sbt-app/src/sbt-test/plugins/unidoc/build.sbt +++ b/sbt-app/src/sbt-test/plugins/unidoc/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.12.1" +scalaVersion := "2.12.18" scalacOptions += "-Xfatal-warnings" // required for the test enablePlugins(ScalaUnidocPlugin) diff --git a/sbt-app/src/sbt-test/project/semanticdb/build.sbt b/sbt-app/src/sbt-test/project/semanticdb/build.sbt index 8c8a5b3d2..c15dbbb6d 100644 --- a/sbt-app/src/sbt-test/project/semanticdb/build.sbt +++ b/sbt-app/src/sbt-test/project/semanticdb/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.16" +ThisBuild / scalaVersion := "2.12.18" ThisBuild / semanticdbEnabled := true ThisBuild / semanticdbIncludeInJar := true diff --git a/sbt-app/src/sbt-test/run/fork-loader/build.sbt b/sbt-app/src/sbt-test/run/fork-loader/build.sbt index 9ffe20e13..82d20437e 100644 --- a/sbt-app/src/sbt-test/run/fork-loader/build.sbt +++ b/sbt-app/src/sbt-test/run/fork-loader/build.sbt @@ -1,6 +1,6 @@ val scalcheck = "org.scalacheck" %% "scalacheck" % "1.14.0" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.12.18" lazy val root = (project in file(".")) .settings( From b2bf66364d52f310356bcc41d08a7e5500727cad Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 21 Oct 2023 21:00:31 -0400 Subject: [PATCH 147/207] Minor updates on development guide --- CONTRIBUTING.md | 46 ++-------------------------------------------- DEVELOPING.md | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 50 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 74e222003..7fd032b34 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,34 +98,6 @@ Pull Requests See below for the branch to work against. -### Adding notes - -Most pull requests should include a "Notes" file which documents the change. This file should reside in the -directory: - - - notes/ - / - .md - -Notes files should have the following contents: - -* Bullet item description under one of the following sections: - - `### Bug fixes` - - `### Improvements` - - `### Fixes with compatibility implications` -* Complete section describing new features. - -### Clean history - -Make sure you document each commit and squash them appropriately. You can use the following guides as a reference: - -* Scala's documentation on [Git Hygiene](https://github.com/scala/scala/tree/v2.12.0-M3#git-hygiene) -* Play's documentation on [Working with Git](https://www.playframework.com/documentation/2.4.4/WorkingWithGit#Squashing-commits) - -Build from source ------------------ - See [DEVELOPING](./DEVELOPING.md) Profiling sbt @@ -133,22 +105,8 @@ Profiling sbt See [PROFILING](./PROFILING.md) -Other notes for maintainers ---------------------------- - -### Publishing VS Code Extensions - -Reference https://code.visualstudio.com/docs/extensions/publish-extension - -``` -$ sbt -> vscodePlugin/compile -> exit -cd vscode-sbt-scala/client -# update version number in vscode-sbt-scala/client/package.json -$ vsce package -$ vsce publish -``` +Other notes +----------- ## Signing the CLA diff --git a/DEVELOPING.md b/DEVELOPING.md index 227415d95..8616765d3 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -7,15 +7,15 @@ Create a [fork](https://docs.github.com/en/github/getting-started-with-github/fo ### Branch to work against -sbt uses **two or three** branches for development: -Generally the default branch set on Github is what we recommend as the base line for PRs. +sbt uses two or three branches for development: +Use the **default** branch set on Github for bug fixes. -- Next minor branch: `1.$MINOR.x`, where `$MINOR` is next minor version (e.g. `1.9.x` during 1.8.x series) +- Next minor branch: `1.$MINOR.x`, where `$MINOR` is next minor version (e.g. `1.10.x` during 1.9.x series) - Development branch: `develop` -- Stable branch: `1.$MINOR.x`, where `$MINOR` is current minor version (e.g. `1.8.x` during 1.8.x series) +- Stable branch: `1.$MINOR.x`, where `$MINOR` is current minor version (e.g. `1.9.x` during 1.9.x series) -Currently `develop` branch represents the next major version of sbt, i.e. sbt 2. -Next minor branch is where new features can be added as long as it is binary compatible with sbt 1.0. +The `develop` branch represents sbt 2.x, the next major sbt series. +Next minor branch is where new features should be added as long as it is binary compatible with sbt 1.x. The `stable` branch represents the current stable sbt release. Only bug fixes are back-ported to the stable branch. ### Instruction to build just sbt @@ -167,6 +167,13 @@ command. To run a single test, such as the test in ### Random tidbits +### Clean history + +Make sure you document each commit and squash them appropriately. You can use the following guides as a reference: + +* Scala's documentation on [Git Hygiene](https://github.com/scala/scala/tree/v2.12.0-M3#git-hygiene) +* Play's documentation on [Working with Git](https://www.playframework.com/documentation/2.4.4/WorkingWithGit#Squashing-commits) + #### Import statements You'd need alternative DSL import since you can't rely on sbt package object. From 85b18fa54832cd3d025973e86748fa834f0363f8 Mon Sep 17 00:00:00 2001 From: Regis Kuckaertz Date: Sun, 22 Oct 2023 04:53:38 +0100 Subject: [PATCH 148/207] Update Coursier to 2.1.7 (#7392) --------- Co-authored-by: eugene yokota --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index a9cfdfbca..f50b55152 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.1" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.2" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From 96f6f61077392f44032c01d1dcf2f78e6510c461 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 23 Oct 2023 07:40:58 -0400 Subject: [PATCH 149/207] sbt 1.9.7 --- project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build.properties b/project/build.properties index 27430827b..e8a1e246e 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.9.6 +sbt.version=1.9.7 From 3d1319efeac0e93bcf0d885d473299ce9a6c323e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 27 Apr 2023 17:35:44 +0200 Subject: [PATCH 150/207] Use sourcePositionMappers in BuildServerReporter --- .../internal/server/BuildServerProtocol.scala | 19 +- .../internal/server/BuildServerReporter.scala | 215 +++++++++++------- .../src/server-test/buildserver/build.sbt | 4 + .../buildserver/project/plugins.sbt | 1 + .../src/main/twirl/vHostHttpToHttps.scala.txt | 16 ++ .../test/scala/testpkg/BuildServerTest.scala | 50 ++++ 6 files changed, 214 insertions(+), 91 deletions(-) create mode 100644 server-test/src/server-test/buildserver/project/plugins.sbt create mode 100644 server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 2d89185d5..36d3f437b 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -33,7 +33,6 @@ import sjsonnew.shaded.scalajson.ast.unsafe.{ JNull, JValue } import sjsonnew.support.scalajson.unsafe.{ CompactPrinter, Converter, Parser => JsonParser } import xsbti.CompileFailed -import java.nio.file.Path import java.io.File import java.util.concurrent.atomic.AtomicBoolean import scala.collection.mutable @@ -44,6 +43,8 @@ import scala.util.{ Failure, Success, Try } import scala.annotation.nowarn import sbt.testing.Framework import scala.collection.immutable.ListSet +import xsbti.VirtualFileRef +import java.util.concurrent.atomic.AtomicReference object BuildServerProtocol { import sbt.internal.bsp.codec.JsonProtocol._ @@ -329,11 +330,13 @@ object BuildServerProtocol { val underlying = (Keys.compile / compilerReporter).value val logger = streams.value.log val meta = isMetaBuild.value + val spms = sourcePositionMappers.value if (bspEnabled.value) { new BuildServerReporterImpl( targetId, bspCompileStateInstance, converter, + Defaults.foldMappers(spms, reportAbsolutePath.value, fileConverter.value), meta, logger, underlying @@ -1064,11 +1067,17 @@ object BuildServerProtocol { private[server] final class BspCompileState { /** - * keeps track of problems in given file so BSP reporter - * can omit unnecessary diagnostics updates + * @param problemsBySourceFiles keeps track of problems in a given file by mapping its VirtualFileRef to all the TextDocumentIdentifier affected by this problem. + * e.g., Suppose we have a source file at "target/../twirl/file.template.scala" which is generated by a Twirl file "src/main/twirl/file.scala.txt",the VirtualRef will be the ref of the Scala file, + * where the TextDocumentIdentifier will be pointing to the Twirl file .In case of a non-generated Scala source file , the textDocumentIdentifier will point to the same document . + * @param compiledAtLeastOnce keeps track of those projects that were compiled at + * least once so that we can decide to enable fresh reporting for projects that + * are compiled for the first time. + * see: https://github.com/scalacenter/bloop/issues/726 */ - val hasAnyProblems: java.util.Set[Path] = - java.util.concurrent.ConcurrentHashMap.newKeySet[Path] + val problemsBySourceFiles + : AtomicReference[Map[VirtualFileRef, Vector[TextDocumentIdentifier]]] = + new AtomicReference(Map.empty) /** * keeps track of those projects that were compiled at diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index fbf2d9a08..2469cc21a 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -28,6 +28,9 @@ import xsbti.{ import scala.collection.JavaConverters._ import scala.collection.mutable +/** +Provides methods for sending success and failure reports and publishing diagnostics. + */ sealed trait BuildServerReporter extends Reporter { private final val sigFilesWritten = "[sig files written]" private final val pureExpression = "a pure expression does nothing in statement position" @@ -71,10 +74,23 @@ sealed trait BuildServerReporter extends Reporter { override def comment(pos: XPosition, msg: String): Unit = underlying.comment(pos, msg) } +/** + +An implementation of the BuildServerReporter for communicating with the Build Server. +Sends diagnostic messages to the client, handling success and failure cases. +@param buildTarget the identifier of the build target +@param bspCompileState state representing what has already been reported in previous compilation. +@param converter a file converter for converting between VirtualFileRef and Path +@param sourcePositionMapper a function to map an xsbti.Position from the generated file (the Scala file) to the source file of the generator (e.g. Twirl file) +@param isMetaBuild a flag indicating if this is a meta build +@param logger a ManagedLogger for logging messages +@param underlying the underlying reporter instance which reports to the sbt shell or native clients + */ final class BuildServerReporterImpl( buildTarget: BuildTargetIdentifier, bspCompileState: BspCompileState, converter: FileConverter, + sourcePositionMapper: xsbti.Position => xsbti.Position, protected override val isMetaBuild: Boolean, protected override val logger: ManagedLogger, protected override val underlying: Reporter @@ -83,7 +99,9 @@ final class BuildServerReporterImpl( import sbt.internal.inc.JavaInterfaceUtil._ private lazy val exchange = StandardMain.exchange - private val problemsByFile = mutable.Map[Path, Vector[Diagnostic]]() + //keeps track of problems in a given file by mapping its VirtualFileRef to a Vector of problems. + //N.B : In case of a source generator file (Twirl), the given file is the generated one (Scala). + private val problemsByFile = mutable.Map[VirtualFileRef, Vector[Problem]]() // sometimes the compiler returns a fake position such as // on Windows, this causes InvalidPathException (see #5994 and #6720) @@ -103,62 +121,98 @@ final class BuildServerReporterImpl( val shouldReportAllProblems = !bspCompileState.compiledAtLeastOnce.getAndSet(true) for { (source, infos) <- analysis.readSourceInfos.getAllSourceInfos.asScala - filePath <- toSafePath(source) + sourcePath <- toSafePath(source) } { // clear problems for current file - val hadProblems = bspCompileState.hasAnyProblems.remove(filePath) + val oldDocuments = + bspCompileState.problemsBySourceFiles.getAndUpdate(_ - source).getOrElse(source, Seq.empty) - val reportedProblems = infos.getReportedProblems.toVector - val diagnostics = reportedProblems.map(toDiagnostic) + val problems = infos.getReportedProblems.toVector // publish diagnostics if: // 1. file had any problems previously - we might want to update them with new ones // 2. file has fresh problems - we might want to update old ones // 3. build project is compiled first time - shouldReportAllProblems is set - val shouldPublish = hadProblems || diagnostics.nonEmpty || shouldReportAllProblems - - // file can have some warnings - if (diagnostics.nonEmpty) { - bspCompileState.hasAnyProblems.add(filePath) - } + val shouldPublish = oldDocuments.nonEmpty || problems.nonEmpty || shouldReportAllProblems if (shouldPublish) { - val params = PublishDiagnosticsParams( - textDocument = TextDocumentIdentifier(filePath.toUri), - buildTarget, - originId = None, - diagnostics.toVector, - reset = true - ) - exchange.notifyEvent("build/publishDiagnostics", params) + // Group diagnostics by document + val diagsByDocuments = problems + .flatMap(mapProblemToDiagnostic) + .groupBy { case (document, _) => document } + .mapValues(_.map { case (_, diag) => diag }) + + //Get a set of these diagnostics to remove duplicates + val newDocuments = diagsByDocuments.keySet + + bspCompileState.problemsBySourceFiles.updateAndGet(_ + (source -> newDocuments.toVector)) + + val sourceDocument = TextDocumentIdentifier(sourcePath.toUri) + val allDocuments = (newDocuments ++ oldDocuments + sourceDocument) + // Iterate through both new and old documents, sending diagnostics for each + allDocuments.foreach { document => + val diags: Vector[Diagnostic] = diagsByDocuments + .getOrElse(document, Vector.empty) + val params = PublishDiagnosticsParams( + document, + buildTarget, + originId = None, + diags, + reset = true + ) + // Notify the client with the diagnostics + exchange.notifyEvent("build/publishDiagnostics", params) + } } } } + + /** + *This method sends a failure report to the client when the compilation fails. It takes an array of virtual files + *as the input parameter and processes the reported problems for each source. + @param sources an array of virtual files representing the source files + */ override def sendFailureReport(sources: Array[VirtualFile]): Unit = { val shouldReportAllProblems = !bspCompileState.compiledAtLeastOnce.get + // Iterate through all source files for { source <- sources - filePath <- toSafePath(source) } { - val diagnostics = problemsByFile.getOrElse(filePath, Vector.empty) + // Get the problems associated with the current source file + val problems = problemsByFile.getOrElse(source, Vector.empty) - val hadProblems = bspCompileState.hasAnyProblems.remove(filePath) - val shouldPublish = hadProblems || diagnostics.nonEmpty || shouldReportAllProblems - - // mark file as file with problems - if (diagnostics.nonEmpty) { - bspCompileState.hasAnyProblems.add(filePath) - } + val oldDocuments = + bspCompileState.problemsBySourceFiles.getAndUpdate(_ - source).getOrElse(source, Seq.empty) + // Determine if diagnostics should be published + // 1. The file had problems previously - we might want to update them with new ones + // 2. The file has fresh problems - we might want to update old ones + // 3. The build project is compiled for the first time - shouldReportAllProblems is set + val shouldPublish = oldDocuments.nonEmpty || problems.nonEmpty || shouldReportAllProblems if (shouldPublish) { - val params = PublishDiagnosticsParams( - textDocument = TextDocumentIdentifier(filePath.toUri), - buildTarget, - originId = None, - diagnostics, - reset = true - ) - exchange.notifyEvent("build/publishDiagnostics", params) + // Group diagnostics by document + val diagsByDocuments = problems + .flatMap(mapProblemToDiagnostic) + .groupBy { case (document, _) => document } + .mapValues(_.map { case (_, diag) => diag }) + + val newDocuments = diagsByDocuments.keySet + + bspCompileState.problemsBySourceFiles.updateAndGet(_ + (source -> newDocuments.toVector)) + + // Iterate through both new and old documents, sending diagnostics for each + (newDocuments ++ oldDocuments).foreach { document => + val diags: Vector[Diagnostic] = diagsByDocuments + .getOrElse(document, Vector.empty) + val params = PublishDiagnosticsParams( + document, + buildTarget, + originId = None, + diags, + reset = true + ) + exchange.notifyEvent("build/publishDiagnostics", params) + } } } } @@ -166,12 +220,14 @@ final class BuildServerReporterImpl( protected override def publishDiagnostic(problem: Problem): Unit = { for { id <- problem.position.sourcePath.toOption - filePath <- toSafePath(VirtualFileRef.of(id)) + // mapProblemToDiagnostic maps the position in the Scala source file back to the source of the generator that generated this Scala file. + (document, diagnostic) <- mapProblemToDiagnostic(problem) } { - val diagnostic = toDiagnostic(problem) - problemsByFile(filePath) = problemsByFile.getOrElse(filePath, Vector.empty) :+ diagnostic + val fileRef = VirtualFileRef.of(id) + problemsByFile(fileRef) = problemsByFile.getOrElse(fileRef, Vector.empty) :+ problem + val params = PublishDiagnosticsParams( - TextDocumentIdentifier(filePath.toUri), + document, buildTarget, originId = None, Vector(diagnostic), @@ -181,13 +237,39 @@ final class BuildServerReporterImpl( } } - private def toRange(pos: XPosition): Range = { - val startLineOpt = pos.startLine.toOption.map(_.toLong - 1) - val startColumnOpt = pos.startColumn.toOption.map(_.toLong) - val endLineOpt = pos.endLine.toOption.map(_.toLong - 1) - val endColumnOpt = pos.endColumn.toOption.map(_.toLong) - val lineOpt = pos.line.toOption.map(_.toLong - 1) - val columnOpt = pos.pointer.toOption.map(_.toLong) + /** + + * This function maps a given problem in a Scala source file to a diagnostic in the source of the generator that generated this Scala + * or the the file itself in case it was not generated. + * @param problem the problem to be converted into a diagnostic + */ + private def mapProblemToDiagnostic( + problem: Problem + ): Option[(TextDocumentIdentifier, Diagnostic)] = { + // Map the position of the problem from the generated file to the origin , this way we send the original position of the problem instead of the generated one + val mappedPosition = sourcePositionMapper(problem.position) + for { + id <- mappedPosition.sourcePath.toOption + path <- toSafePath(VirtualFileRef.of(id)) + } yield { + val diagnostic = Diagnostic( + toRange(mappedPosition), + Option(toDiagnosticSeverity(problem.severity)), + problem.diagnosticCode().toOption.map(_.code), + Option("sbt"), + problem.message + ) + (TextDocumentIdentifier(path.toUri), diagnostic) + } + } + + private def toRange(position: xsbti.Position): Range = { + val startLineOpt = position.startLine.toOption.map(_.toLong - 1) + val startColumnOpt = position.startColumn.toOption.map(_.toLong) + val endLineOpt = position.endLine.toOption.map(_.toLong - 1) + val endColumnOpt = position.endColumn.toOption.map(_.toLong) + val lineOpt = position.line.toOption.map(_.toLong - 1) + val columnOpt = position.pointer.toOption.map(_.toLong) def toPosition(lineOpt: Option[Long], columnOpt: Option[Long]): Option[Position] = lineOpt.map(line => Position(line, columnOpt.getOrElse(0L))) @@ -199,45 +281,6 @@ final class BuildServerReporterImpl( Range(startPos, endPosOpt.getOrElse(startPos)) } - private def toDiagnostic(problem: Problem): Diagnostic = { - val actions0 = problem.actions().asScala.toVector - val data = - if (actions0.isEmpty) None - else - Some( - ScalaDiagnostic( - actions = actions0.map { a => - ScalaAction( - title = a.title, - description = a.description.toOption, - edit = Some( - ScalaWorkspaceEdit( - changes = a.edit.changes().asScala.toVector.map { edit => - ScalaTextEdit( - range = toRange(edit.position), - newText = edit.newText, - ) - } - ) - ), - ) - } - ) - ) - Diagnostic( - range = toRange(problem.position), - severity = Option(toDiagnosticSeverity(problem.severity)), - code = problem.diagnosticCode().toOption.map(_.code), - source = Option("sbt"), - message = problem.message, - relatedInformation = Vector.empty, - dataKind = data.map { _ => - "scala" - }, - data = data, - ) - } - private def toDiagnosticSeverity(severity: Severity): Long = severity match { case Severity.Info => DiagnosticSeverity.Information case Severity.Warn => DiagnosticSeverity.Warning diff --git a/server-test/src/server-test/buildserver/build.sbt b/server-test/src/server-test/buildserver/build.sbt index b5bd5d749..fffa813ff 100644 --- a/server-test/src/server-test/buildserver/build.sbt +++ b/server-test/src/server-test/buildserver/build.sbt @@ -42,6 +42,10 @@ lazy val javaProj = project javacOptions += "-Xlint:all" ) +lazy val twirlProj = project + .in(file("twirlProj")) + .enablePlugins(SbtTwirl) + def somethingBad = throw new MessageOnlyException("I am a bad build target") // other build targets should not be affected by this bad build target lazy val badBuildTarget = project.in(file("bad-build-target")) diff --git a/server-test/src/server-test/buildserver/project/plugins.sbt b/server-test/src/server-test/buildserver/project/plugins.sbt new file mode 100644 index 000000000..8ee7ebeaa --- /dev/null +++ b/server-test/src/server-test/buildserver/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.typesafe.play" % "sbt-twirl" % "1.5.2") \ No newline at end of file diff --git a/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt b/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt new file mode 100644 index 000000000..325c34e56 --- /dev/null +++ b/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt @@ -0,0 +1,16 @@ +@(subDomain: String, mainDomain: String, redirectStatusCode: Int) +@fullDomain=@{ + if(mainDomaiiiiin) { + mainDomain + } else { + s"$subDomain.$mainDomain" + } +} + + + + ServerName @fullDomain + RewriteEngine On + RewriteRule (.*) "https://%{HTTP_HOST}%{REQUEST_URI}" [R=@redirectStatusCode,L] + + \ No newline at end of file diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index dc1486786..58199f826 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -596,6 +596,56 @@ object BuildServerTest extends AbstractServerTest { assert(actualResult == expectedResult) } + test("buildTarget/compile twirl diagnostics (sourcePositionMapping)") { _ => + val buildTarget = buildTargetUri("twirlProj", "Compile") + val testFile = + new File(svr.baseDirectory, s"twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt") + + compile(buildTarget) + + assert( + svr.waitForString(10.seconds) { s => + s.contains("build/publishDiagnostics") && + s.contains("vHostHttpToHttps.scala.txt") && + s.contains(""""severity":1""") && + s.contains("""not found: value mainDomaiiiiin""") + }, + "should send publishDiagnostics with serverity 1 for vHostHttpToHttps.scala.txt " + ) + IO.write( + testFile, + """|@(subDomain: String, mainDomain: String, redirectStatusCode: Int) + |@fullDomain=@{ + | if(mainDomain) { + | mainDomain + | } else { + | s"$subDomain.$mainDomain" + | } + |} + | + | + | + | ServerName @fullDomain + | RewriteEngine On + | RewriteRule (.*) "https://%{HTTP_HOST}%{REQUEST_URI}" [R=@redirectStatusCode,L] + | + | + |""".stripMargin + ) + + compile(buildTarget) + + assert( + svr.waitForString(30.seconds) { s => + s.contains("build/publishDiagnostics") && + s.contains("vHostHttpToHttps.scala.txt") && + s.contains(""""diagnostics":[]""") && + s.contains(""""reset":true""") + }, + "should send publishDiagnostics with empty diagnostics" + ) + } + private def initializeRequest(): Int = { val params = InitializeBuildParams( "test client", From b189d49968201a3f41eb47da8c8def805e8b9cdd Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 25 Oct 2023 11:39:36 +0200 Subject: [PATCH 151/207] Refactoring --- .../internal/server/BuildServerProtocol.scala | 13 +- .../internal/server/BuildServerReporter.scala | 174 ++++++------------ .../twirlProj/src/main/twirl/main.scala.html | 14 ++ .../src/main/twirl/vHostHttpToHttps.scala.txt | 16 -- .../test/scala/testpkg/BuildServerTest.scala | 49 +++-- 5 files changed, 99 insertions(+), 167 deletions(-) create mode 100644 server-test/src/server-test/buildserver/twirlProj/src/main/twirl/main.scala.html delete mode 100644 server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 36d3f437b..88e07d77d 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -1067,13 +1067,10 @@ object BuildServerProtocol { private[server] final class BspCompileState { /** - * @param problemsBySourceFiles keeps track of problems in a given file by mapping its VirtualFileRef to all the TextDocumentIdentifier affected by this problem. - * e.g., Suppose we have a source file at "target/../twirl/file.template.scala" which is generated by a Twirl file "src/main/twirl/file.scala.txt",the VirtualRef will be the ref of the Scala file, - * where the TextDocumentIdentifier will be pointing to the Twirl file .In case of a non-generated Scala source file , the textDocumentIdentifier will point to the same document . - * @param compiledAtLeastOnce keeps track of those projects that were compiled at - * least once so that we can decide to enable fresh reporting for projects that - * are compiled for the first time. - * see: https://github.com/scalacenter/bloop/issues/726 + * keeps track of problems in a given file in a map of virtual source file to text documents. + * In most cases the only text document is the source file. In case of source generation, + * e.g. Twirl, the text documents are the input files, e.g. the Twirl files. + * We use the sourcePositionMappers to build this map. */ val problemsBySourceFiles : AtomicReference[Map[VirtualFileRef, Vector[TextDocumentIdentifier]]] = @@ -1085,6 +1082,6 @@ object BuildServerProtocol { * are compiled for the first time. * see: https://github.com/scalacenter/bloop/issues/726 */ - val compiledAtLeastOnce: AtomicBoolean = new AtomicBoolean(false) + val isFirstReport: AtomicBoolean = new AtomicBoolean(true) } } diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index 2469cc21a..5b25d17b0 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -8,8 +8,6 @@ package sbt.internal.server -import java.nio.file.Path - import sbt.StandardMain import sbt.internal.bsp._ import sbt.internal.util.ManagedLogger @@ -75,16 +73,9 @@ sealed trait BuildServerReporter extends Reporter { } /** - -An implementation of the BuildServerReporter for communicating with the Build Server. -Sends diagnostic messages to the client, handling success and failure cases. -@param buildTarget the identifier of the build target -@param bspCompileState state representing what has already been reported in previous compilation. -@param converter a file converter for converting between VirtualFileRef and Path -@param sourcePositionMapper a function to map an xsbti.Position from the generated file (the Scala file) to the source file of the generator (e.g. Twirl file) -@param isMetaBuild a flag indicating if this is a meta build -@param logger a ManagedLogger for logging messages -@param underlying the underlying reporter instance which reports to the sbt shell or native clients + * @param bspCompileState what has already been reported in previous compilation. + * @param sourcePositionMapper a function that maps an xsbti.Position from the generated source + * (the Scala file) to the input file of the generator (e.g. Twirl file) */ final class BuildServerReporterImpl( buildTarget: BuildTargetIdentifier, @@ -99,15 +90,13 @@ final class BuildServerReporterImpl( import sbt.internal.inc.JavaInterfaceUtil._ private lazy val exchange = StandardMain.exchange - //keeps track of problems in a given file by mapping its VirtualFileRef to a Vector of problems. - //N.B : In case of a source generator file (Twirl), the given file is the generated one (Scala). private val problemsByFile = mutable.Map[VirtualFileRef, Vector[Problem]]() // sometimes the compiler returns a fake position such as // on Windows, this causes InvalidPathException (see #5994 and #6720) - private def toSafePath(ref: VirtualFileRef): Option[Path] = + private def toDocument(ref: VirtualFileRef): Option[TextDocumentIdentifier] = if (ref.id().contains("<")) None - else Some(converter.toPath(ref)) + else Some(TextDocumentIdentifier(converter.toPath(ref).toUri)) /** * Send diagnostics from the compilation to the client. @@ -115,104 +104,46 @@ final class BuildServerReporterImpl( * * @param analysis current compile analysis */ - override def sendSuccessReport( - analysis: CompileAnalysis, - ): Unit = { - val shouldReportAllProblems = !bspCompileState.compiledAtLeastOnce.getAndSet(true) - for { - (source, infos) <- analysis.readSourceInfos.getAllSourceInfos.asScala - sourcePath <- toSafePath(source) - } { - // clear problems for current file - val oldDocuments = - bspCompileState.problemsBySourceFiles.getAndUpdate(_ - source).getOrElse(source, Seq.empty) - + override def sendSuccessReport(analysis: CompileAnalysis): Unit = { + for ((source, infos) <- analysis.readSourceInfos.getAllSourceInfos.asScala) { val problems = infos.getReportedProblems.toVector + sendReport(source, problems) + } + notifyFirstReport() + } - // publish diagnostics if: - // 1. file had any problems previously - we might want to update them with new ones - // 2. file has fresh problems - we might want to update old ones - // 3. build project is compiled first time - shouldReportAllProblems is set - val shouldPublish = oldDocuments.nonEmpty || problems.nonEmpty || shouldReportAllProblems - - if (shouldPublish) { - // Group diagnostics by document - val diagsByDocuments = problems - .flatMap(mapProblemToDiagnostic) - .groupBy { case (document, _) => document } - .mapValues(_.map { case (_, diag) => diag }) - - //Get a set of these diagnostics to remove duplicates - val newDocuments = diagsByDocuments.keySet - - bspCompileState.problemsBySourceFiles.updateAndGet(_ + (source -> newDocuments.toVector)) - - val sourceDocument = TextDocumentIdentifier(sourcePath.toUri) - val allDocuments = (newDocuments ++ oldDocuments + sourceDocument) - // Iterate through both new and old documents, sending diagnostics for each - allDocuments.foreach { document => - val diags: Vector[Diagnostic] = diagsByDocuments - .getOrElse(document, Vector.empty) - val params = PublishDiagnosticsParams( - document, - buildTarget, - originId = None, - diags, - reset = true - ) - // Notify the client with the diagnostics - exchange.notifyEvent("build/publishDiagnostics", params) - } - } + override def sendFailureReport(sources: Array[VirtualFile]): Unit = { + for (source <- sources) { + val problems = problemsByFile.getOrElse(source, Vector.empty) + sendReport(source, problems) } } - /** - *This method sends a failure report to the client when the compilation fails. It takes an array of virtual files - *as the input parameter and processes the reported problems for each source. - @param sources an array of virtual files representing the source files - */ - override def sendFailureReport(sources: Array[VirtualFile]): Unit = { - val shouldReportAllProblems = !bspCompileState.compiledAtLeastOnce.get - // Iterate through all source files - for { - source <- sources - } { - // Get the problems associated with the current source file - val problems = problemsByFile.getOrElse(source, Vector.empty) + private def sendReport(source: VirtualFileRef, problems: Vector[Problem]): Unit = { + val oldDocuments = getAndClearPreviousDocuments(source) - val oldDocuments = - bspCompileState.problemsBySourceFiles.getAndUpdate(_ - source).getOrElse(source, Seq.empty) - // Determine if diagnostics should be published - // 1. The file had problems previously - we might want to update them with new ones - // 2. The file has fresh problems - we might want to update old ones - // 3. The build project is compiled for the first time - shouldReportAllProblems is set - val shouldPublish = oldDocuments.nonEmpty || problems.nonEmpty || shouldReportAllProblems + // publish diagnostics if: + // 1. file had any problems previously: update them with new ones + // 2. file has fresh problems: report them + // 3. build project is compiled for the first time: send success report + if (oldDocuments.nonEmpty || problems.nonEmpty || isFirstReport) { + val diagsByDocuments = problems + .flatMap(mapProblemToDiagnostic) + .groupBy { case (document, _) => document } + .mapValues(_.map { case (_, diag) => diag }) + updateNewDocuments(source, diagsByDocuments.keys.toVector) - if (shouldPublish) { - // Group diagnostics by document - val diagsByDocuments = problems - .flatMap(mapProblemToDiagnostic) - .groupBy { case (document, _) => document } - .mapValues(_.map { case (_, diag) => diag }) - - val newDocuments = diagsByDocuments.keySet - - bspCompileState.problemsBySourceFiles.updateAndGet(_ + (source -> newDocuments.toVector)) - - // Iterate through both new and old documents, sending diagnostics for each - (newDocuments ++ oldDocuments).foreach { document => - val diags: Vector[Diagnostic] = diagsByDocuments - .getOrElse(document, Vector.empty) - val params = PublishDiagnosticsParams( - document, - buildTarget, - originId = None, - diags, - reset = true - ) - exchange.notifyEvent("build/publishDiagnostics", params) - } + // send a report for the new documents, the old ones and the source file + (diagsByDocuments.keySet ++ oldDocuments ++ toDocument(source)).foreach { document => + val diags = diagsByDocuments.getOrElse(document, Vector.empty) + val params = PublishDiagnosticsParams( + document, + buildTarget, + originId = None, + diags, + reset = true + ) + exchange.notifyEvent("build/publishDiagnostics", params) } } } @@ -220,7 +151,6 @@ final class BuildServerReporterImpl( protected override def publishDiagnostic(problem: Problem): Unit = { for { id <- problem.position.sourcePath.toOption - // mapProblemToDiagnostic maps the position in the Scala source file back to the source of the generator that generated this Scala file. (document, diagnostic) <- mapProblemToDiagnostic(problem) } { val fileRef = VirtualFileRef.of(id) @@ -237,20 +167,32 @@ final class BuildServerReporterImpl( } } - /** + private def getAndClearPreviousDocuments(source: VirtualFileRef): Seq[TextDocumentIdentifier] = + bspCompileState.problemsBySourceFiles.getAndUpdate(_ - source).getOrElse(source, Seq.empty) - * This function maps a given problem in a Scala source file to a diagnostic in the source of the generator that generated this Scala - * or the the file itself in case it was not generated. - * @param problem the problem to be converted into a diagnostic + private def updateNewDocuments( + source: VirtualFileRef, + documents: Vector[TextDocumentIdentifier] + ): Unit = { + val _ = bspCompileState.problemsBySourceFiles.updateAndGet(_ + (source -> documents)) + } + + private def isFirstReport: Boolean = bspCompileState.isFirstReport.get + private def notifyFirstReport(): Unit = { + val _ = bspCompileState.isFirstReport.set(false) + } + + /** + * Map a given problem, in a Scala source file, to a Diagnostic in an user-facing source file. + * E.g. if the source file is generated from Twirl, the diagnostic will be reported to the Twirl file. */ private def mapProblemToDiagnostic( problem: Problem ): Option[(TextDocumentIdentifier, Diagnostic)] = { - // Map the position of the problem from the generated file to the origin , this way we send the original position of the problem instead of the generated one val mappedPosition = sourcePositionMapper(problem.position) for { - id <- mappedPosition.sourcePath.toOption - path <- toSafePath(VirtualFileRef.of(id)) + mappedSource <- mappedPosition.sourcePath.toOption + document <- toDocument(VirtualFileRef.of(mappedSource)) } yield { val diagnostic = Diagnostic( toRange(mappedPosition), @@ -259,7 +201,7 @@ final class BuildServerReporterImpl( Option("sbt"), problem.message ) - (TextDocumentIdentifier(path.toUri), diagnostic) + (document, diagnostic) } } diff --git a/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/main.scala.html b/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/main.scala.html new file mode 100644 index 000000000..ca8f06954 --- /dev/null +++ b/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/main.scala.html @@ -0,0 +1,14 @@ +@(title: String, paragraphs: Seq[String]) + + + + + @title + + +

@tilte

+ @for(paragraph <- paragraphs) { +

@paragraph

+ } + + diff --git a/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt b/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt deleted file mode 100644 index 325c34e56..000000000 --- a/server-test/src/server-test/buildserver/twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt +++ /dev/null @@ -1,16 +0,0 @@ -@(subDomain: String, mainDomain: String, redirectStatusCode: Int) -@fullDomain=@{ - if(mainDomaiiiiin) { - mainDomain - } else { - s"$subDomain.$mainDomain" - } -} - - - - ServerName @fullDomain - RewriteEngine On - RewriteRule (.*) "https://%{HTTP_HOST}%{REQUEST_URI}" [R=@redirectStatusCode,L] - - \ No newline at end of file diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index 58199f826..1fb2d3aeb 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -596,53 +596,48 @@ object BuildServerTest extends AbstractServerTest { assert(actualResult == expectedResult) } - test("buildTarget/compile twirl diagnostics (sourcePositionMapping)") { _ => + test("buildTarget/compile: twirl diagnostics (sourcePositionMappers)") { _ => val buildTarget = buildTargetUri("twirlProj", "Compile") - val testFile = - new File(svr.baseDirectory, s"twirlProj/src/main/twirl/vHostHttpToHttps.scala.txt") + val testFile = new File(svr.baseDirectory, s"twirlProj/src/main/twirl/main.scala.html") compile(buildTarget) - assert( svr.waitForString(10.seconds) { s => s.contains("build/publishDiagnostics") && - s.contains("vHostHttpToHttps.scala.txt") && + s.contains("main.scala.html") && s.contains(""""severity":1""") && - s.contains("""not found: value mainDomaiiiiin""") + s.contains("not found: value tilte") }, - "should send publishDiagnostics with serverity 1 for vHostHttpToHttps.scala.txt " + "should report diagnostic in Twirl file" ) + IO.write( testFile, - """|@(subDomain: String, mainDomain: String, redirectStatusCode: Int) - |@fullDomain=@{ - | if(mainDomain) { - | mainDomain - | } else { - | s"$subDomain.$mainDomain" - | } - |} + """|@(title: String, paragraphs: Seq[String]) | - | - | - | ServerName @fullDomain - | RewriteEngine On - | RewriteRule (.*) "https://%{HTTP_HOST}%{REQUEST_URI}" [R=@redirectStatusCode,L] - | - | + | + | + | + | @title + | + | + |

@title

+ | @for(paragraph <- paragraphs) { + |

@paragraph

+ | } + | + | |""".stripMargin ) - compile(buildTarget) - - assert( + assert.apply( svr.waitForString(30.seconds) { s => s.contains("build/publishDiagnostics") && - s.contains("vHostHttpToHttps.scala.txt") && + s.contains("main.scala.html") && s.contains(""""diagnostics":[]""") && s.contains(""""reset":true""") }, - "should send publishDiagnostics with empty diagnostics" + "should reset diagnostic in Twirl file" ) } From a4097440bf9e8dfa29413bb3b4242ccd4d7f2c81 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 25 Oct 2023 15:01:08 +0200 Subject: [PATCH 152/207] Build server test refactoring --- .../test/scala/testpkg/BuildServerTest.scala | 348 ++++++++---------- 1 file changed, 145 insertions(+), 203 deletions(-) diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index 1fb2d3aeb..b5ba98cb2 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -33,11 +33,11 @@ object BuildServerTest extends AbstractServerTest { test("build/initialize") { _ => val id = initializeRequest() - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"${id}"""") && - (s contains """"resourcesProvider":true""") && - (s contains """"outputPathsProvider":true""") - }) + assertMessage( + s""""id":"${id}"""", + """"resourcesProvider":true""", + """"outputPathsProvider":true""" + )() } test("workspace/buildTargets") { _ => @@ -102,30 +102,17 @@ object BuildServerTest extends AbstractServerTest { compile(buildTarget) // This doesn't always come back in 10s on CI. - assert(svr.waitForString(60.seconds) { s => - s.contains("build/taskStart") && - s.contains(""""message":"Compiling runAndTest"""") - }) - - assert(svr.waitForString(60.seconds) { s => - s.contains("build/taskProgress") && - s.contains(""""message":"Compiling runAndTest (15%)"""") - }) - - assert(svr.waitForString(60.seconds) { s => - s.contains("build/taskProgress") && - s.contains(""""message":"Compiling runAndTest (100%)"""") - }) - - assert(svr.waitForString(60.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains(""""diagnostics":[]""") - }) - - assert(svr.waitForString(60.seconds) { s => - s.contains("build/taskFinish") && - s.contains(""""message":"Compiled runAndTest"""") - }) + assertMessage("build/taskStart", """"message":"Compiling runAndTest"""")(duration = 60.seconds) + assertMessage( + "build/taskProgress", + """"message":"Compiling runAndTest (15%)"""" + )(duration = 60.seconds) + assertMessage( + "build/taskProgress", + """"message":"Compiling runAndTest (100%)"""" + )(duration = 60.seconds) + assertMessage("build/publishDiagnostics", """"diagnostics":[]""")(duration = 60.seconds) + assertMessage("build/taskFinish", """"message":"Compiled runAndTest"""")(duration = 60.seconds) } test( @@ -136,10 +123,7 @@ object BuildServerTest extends AbstractServerTest { compile(buildTarget) - assert(svr.waitForString(30.seconds) { s => - s.contains("build/taskFinish") && - s.contains(""""message":"Compiled diagnostics"""") - }) + assertMessage("build/taskFinish", """"message":"Compiled diagnostics"""")(30.seconds) // introduce compile error IO.write( @@ -152,13 +136,13 @@ object BuildServerTest extends AbstractServerTest { reloadWorkspace() compile(buildTarget) - assert( - svr.waitForString(30.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("Diagnostics.scala") && - s.contains("\"message\":\"type mismatch") - }, - "should send publishDiagnostics with type error for Main.scala" + assertMessage( + "build/publishDiagnostics", + "Diagnostics.scala", + "\"message\":\"type mismatch" + )( + duration = 30.seconds, + message = "should send publishDiagnostics with type error for Main.scala" ) // fix compilation error @@ -172,13 +156,13 @@ object BuildServerTest extends AbstractServerTest { reloadWorkspace() compile(buildTarget) - assert( - svr.waitForString(30.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("Diagnostics.scala") && - s.contains("\"diagnostics\":[]") - }, - "should send publishDiagnostics with empty diagnostics" + assertMessage( + "build/publishDiagnostics", + "Diagnostics.scala", + "\"diagnostics\":[]" + )( + duration = 30.seconds, + message = "should send publishDiagnostics with empty diagnostics" ) // trigger no-op compilation @@ -199,13 +183,13 @@ object BuildServerTest extends AbstractServerTest { compile(buildTarget) - assert( - svr.waitForString(30.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("PatternMatch.scala") && - s.contains(""""message":"match may not be exhaustive""") - }, - "should send publishDiagnostics with type error for PatternMatch.scala" + assertMessage( + "build/publishDiagnostics", + "PatternMatch.scala", + """"message":"match may not be exhaustive""" + )( + duration = 30.seconds, + message = "should send publishDiagnostics with type error for PatternMatch.scala" ) IO.write( @@ -223,15 +207,10 @@ object BuildServerTest extends AbstractServerTest { reloadWorkspace() compile(buildTarget) - assert( - svr.waitForString(30.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("PatternMatch.scala") && - s.contains("\"diagnostics\":[]") - }, - "should send publishDiagnostics with empty diagnostics" + assertMessage("build/publishDiagnostics", "PatternMatch.scala", "\"diagnostics\":[]")( + duration = 30.seconds, + message = "should send publishDiagnostics with empty diagnostics" ) - } test("buildTarget/compile: Java diagnostics") { _ => @@ -239,42 +218,32 @@ object BuildServerTest extends AbstractServerTest { compile(buildTarget) - assert( - svr.waitForString(10.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("Hello.java") && - s.contains(""""severity":2""") && - s.contains("""missing type arguments for generic class java.util.List""") - }, - "should send publishDiagnostics with severity 2 for Hello.java" - ) + assertMessage( + "build/publishDiagnostics", + "Hello.java", + """"severity":2""", + """missing type arguments for generic class java.util.List""" + )(message = "should send publishDiagnostics with severity 2 for Hello.java") - assert( - svr.waitForString(1.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("Hello.java") && - s.contains(""""severity":1""") && - s.contains("""incompatible types: int cannot be converted to java.lang.String""") - }, - "should send publishDiagnostics with severity 1 for Hello.java" + assertMessage( + "build/publishDiagnostics", + "Hello.java", + """"severity":1""", + """incompatible types: int cannot be converted to java.lang.String""" + )( + message = "should send publishDiagnostics with severity 1 for Hello.java" ) } test("buildTarget/scalacOptions, buildTarget/javacOptions") { _ => val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") - val id1 = scalacOptions(Seq(buildTarget, badBuildTarget)) - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id1"""") && - (s contains "scala-library-2.13.11.jar") - }) + val id1 = scalacOptions(Seq(buildTarget, badBuildTarget)) + assertMessage(s""""id":"$id1"""", "scala-library-2.13.11.jar")() val id2 = javacOptions(Seq(buildTarget, badBuildTarget)) - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id2"""") && - (s contains "scala-library-2.13.11.jar") - }) + assertMessage(s""""id":"$id2"""", "scala-library-2.13.11.jar")() } test("buildTarget/cleanCache") { _ => @@ -328,10 +297,7 @@ object BuildServerTest extends AbstractServerTest { s"""{ "jsonrpc": "2.0", "id": "$id", "method": "workspace/reload"}""" ) assertProcessing("workspace/reload") - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && - (s contains """"result":null""") - }) + assertMessage(s""""id":"$id"""", """"result":null""")() } test("workspace/reload: send diagnostic and respond with error") { _ => @@ -347,22 +313,19 @@ object BuildServerTest extends AbstractServerTest { ) val id = reloadWorkspace() // reload - assert( - svr.waitForString(10.seconds) { s => - s.contains(s""""buildTarget":{"uri":"$metaBuildTarget"}""") && - s.contains(s""""textDocument":{"uri":"${otherBuildFile.toPath.toUri}"}""") && - s.contains(""""severity":1""") && - s.contains(""""reset":true""") - } - ) - assert( - svr.waitForString(10.seconds) { s => - s.contains(s""""id":"$id"""") && - s.contains(""""error"""") && - s.contains(s""""code":${ErrorCodes.InternalError}""") && - s.contains("Type error in expression") - } - ) + assertMessage( + s""""buildTarget":{"uri":"$metaBuildTarget"}""", + s""""textDocument":{"uri":"${otherBuildFile.toPath.toUri}"}""", + """"severity":1""", + """"reset":true""" + )() + + assertMessage( + s""""id":"$id"""", + """"error"""", + s""""code":${ErrorCodes.InternalError}""", + "Type error in expression" + )() // fix the other-build.sbt file and reload again IO.write( otherBuildFile, @@ -374,14 +337,12 @@ object BuildServerTest extends AbstractServerTest { ) reloadWorkspace() // assert received an empty diagnostic - assert( - svr.waitForString(10.seconds) { s => - s.contains(s""""buildTarget":{"uri":"$metaBuildTarget"}""") && - s.contains(s""""textDocument":{"uri":"${otherBuildFile.toPath.toUri}"}""") && - s.contains(""""diagnostics":[]""") && - s.contains(""""reset":true""") - } - ) + assertMessage( + s""""buildTarget":{"uri":"$metaBuildTarget"}""", + s""""textDocument":{"uri":"${otherBuildFile.toPath.toUri}"}""", + """"diagnostics":[]""", + """"reset":true""" + )() IO.delete(otherBuildFile) } @@ -395,10 +356,7 @@ object BuildServerTest extends AbstractServerTest { |} }""".stripMargin ) assertProcessing("buildTarget/scalaMainClasses") - assert(svr.waitForString(30.seconds) { s => - (s contains s""""id":"$id"""") && - (s contains """"class":"main.Main"""") - }) + assertMessage(s""""id":"$id"""", """"class":"main.Main"""")(duration = 30.seconds) } test("buildTarget/run") { _ => @@ -412,14 +370,8 @@ object BuildServerTest extends AbstractServerTest { |} }""".stripMargin ) assertProcessing("buildTarget/run") - assert(svr.waitForString(10.seconds) { s => - (s contains "build/logMessage") && - (s contains """"message":"Hello World!"""") - }) - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && - (s contains """"statusCode":1""") - }) + assertMessage("build/logMessage", """"message":"Hello World!"""")() + assertMessage(s""""id":"$id"""", """"statusCode":1""")() } test("buildTarget/jvmRunEnvironment") { _ => @@ -433,15 +385,13 @@ object BuildServerTest extends AbstractServerTest { |}""".stripMargin ) assertProcessing("buildTarget/jvmRunEnvironment") - assert { - svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && - (s contains "jsoniter-scala-core_2.13-2.13.11.jar") && // compile dependency - (s contains "\"jvmOptions\":[\"Xmx256M\"]") && - (s contains "\"environmentVariables\":{\"KEY\":\"VALUE\"}") && - (s contains "/buildserver/run-and-test/") // working directory - } - } + assertMessage( + s""""id":"$id"""", + "jsoniter-scala-core_2.13-2.13.11.jar", // compile dependency + "\"jvmOptions\":[\"Xmx256M\"]", + "\"environmentVariables\":{\"KEY\":\"VALUE\"}", + "/buildserver/run-and-test/" // working directory + )() } test("buildTarget/jvmTestEnvironment") { _ => @@ -455,16 +405,13 @@ object BuildServerTest extends AbstractServerTest { |}""".stripMargin ) assertProcessing("buildTarget/jvmTestEnvironment") - assert { - svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && - // test depends on compile so it has dependencies from both - (s contains "jsoniter-scala-core_2.13-2.13.11.jar") && // compile dependency - (s contains "scalatest_2.13-3.0.8.jar") && // test dependency - (s contains "\"jvmOptions\":[\"Xmx512M\"]") && - (s contains "\"environmentVariables\":{\"KEY_TEST\":\"VALUE_TEST\"}") - } - } + assertMessage( + s""""id":"$id"""", + "jsoniter-scala-core_2.13-2.13.11.jar", // compile dependency + "scalatest_2.13-3.0.8.jar", // test dependency + "\"jvmOptions\":[\"Xmx512M\"]", + "\"environmentVariables\":{\"KEY_TEST\":\"VALUE_TEST\"}" + )() } test("buildTarget/scalaTestClasses") { _ => @@ -477,12 +424,12 @@ object BuildServerTest extends AbstractServerTest { |} }""".stripMargin ) assertProcessing("buildTarget/scalaTestClasses") - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && - (s contains """"tests.FailingTest"""") && - (s contains """"tests.PassingTest"""") && - (s contains """"framework":"ScalaTest"""") - }) + assertMessage( + s""""id":"$id"""", + """"tests.FailingTest"""", + """"tests.PassingTest"""", + """"framework":"ScalaTest"""" + )() } test("buildTarget/test: run all tests") { _ => @@ -494,10 +441,7 @@ object BuildServerTest extends AbstractServerTest { |} }""".stripMargin ) assertProcessing("buildTarget/test") - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && - (s contains """"statusCode":2""") - }) + assertMessage(s""""id":"$id"""", """"statusCode":2""")() } test("buildTarget/test: run one test class") { _ => @@ -518,41 +462,38 @@ object BuildServerTest extends AbstractServerTest { |} }""".stripMargin ) assertProcessing("buildTarget/test") - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && - (s contains """"statusCode":1""") - }) + assertMessage(s""""id":"$id"""", """"statusCode":1""")() } test("buildTarget/compile: report error") { _ => val buildTarget = buildTargetUri("reportError", "Compile") compile(buildTarget) - assert(svr.waitForString(10.seconds) { s => - (s contains s""""buildTarget":{"uri":"$buildTarget"}""") && - (s contains """"severity":1""") && - (s contains """"reset":true""") - }) + assertMessage( + s""""buildTarget":{"uri":"$buildTarget"}""", + """"severity":1""", + """"reset":true""" + )() } test("buildTarget/compile: report warning") { _ => val buildTarget = buildTargetUri("reportWarning", "Compile") compile(buildTarget) - assert(svr.waitForString(10.seconds) { s => - (s contains s""""buildTarget":{"uri":"$buildTarget"}""") && - (s contains """"severity":2""") && - (s contains """"reset":true""") - }) + assertMessage( + s""""buildTarget":{"uri":"$buildTarget"}""", + """"severity":2""", + """"reset":true""" + )() } test("buildTarget/compile: respond error") { _ => val buildTarget = buildTargetUri("respondError", "Compile") val id = compile(buildTarget) - assert(svr.waitForString(10.seconds) { s => - s.contains(s""""id":"$id"""") && - s.contains(""""error"""") && - s.contains(s""""code":${ErrorCodes.InternalError}""") && - s.contains("custom message") - }) + assertMessage( + s""""id":"$id"""", + """"error"""", + s""""code":${ErrorCodes.InternalError}""", + "custom message" + )() } test("buildTarget/resources") { _ => @@ -565,9 +506,7 @@ object BuildServerTest extends AbstractServerTest { |} }""".stripMargin ) assertProcessing("buildTarget/resources") - assert(svr.waitForString(10.seconds) { s => - (s contains s""""id":"$id"""") && (s contains "util/src/main/resources/") - }) + assertMessage(s""""id":"$id"""", "util/src/main/resources/")() } test("buildTarget/outputPaths") { _ => @@ -601,16 +540,12 @@ object BuildServerTest extends AbstractServerTest { val testFile = new File(svr.baseDirectory, s"twirlProj/src/main/twirl/main.scala.html") compile(buildTarget) - assert( - svr.waitForString(10.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("main.scala.html") && - s.contains(""""severity":1""") && - s.contains("not found: value tilte") - }, - "should report diagnostic in Twirl file" - ) - + assertMessage( + "build/publishDiagnostics", + "main.scala.html", + """"severity":1""", + "not found: value tilte" + )(message = "should report diagnostic in Twirl file") IO.write( testFile, """|@(title: String, paragraphs: Seq[String]) @@ -630,14 +565,14 @@ object BuildServerTest extends AbstractServerTest { |""".stripMargin ) compile(buildTarget) - assert.apply( - svr.waitForString(30.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("main.scala.html") && - s.contains(""""diagnostics":[]""") && - s.contains(""""reset":true""") - }, - "should reset diagnostic in Twirl file" + assertMessage( + "build/publishDiagnostics", + "main.scala.html", + """"diagnostics":[]""", + """"reset":true""" + )( + duration = 30.seconds, + message = "should reset diagnostic in Twirl file" ) } @@ -653,11 +588,18 @@ object BuildServerTest extends AbstractServerTest { sendRequest("build/initialize", params) } - private def assertProcessing(method: String, debug: Boolean = false): Unit = { - assert(svr.waitForString(10.seconds) { msg => - if (debug) println(msg) - msg.contains("build/logMessage") && msg.contains(s""""message":"Processing $method"""") - }) + private def assertProcessing(method: String, debug: Boolean = false): Unit = + assertMessage("build/logMessage", s""""message":"Processing $method"""")(debug = debug) + + def assertMessage( + parts: String* + )(duration: FiniteDuration = 10.seconds, debug: Boolean = false, message: String = ""): Unit = { + def assertion = + svr.waitForString(duration) { msg => + if (debug) println(msg) + parts.forall(msg.contains) + } + if (message.nonEmpty) assert.apply(assertion, message) else assert(assertion) } private def reloadWorkspace(): Int = From c07ee8411e14d53d3cc2980a70ade4a8f3f23572 Mon Sep 17 00:00:00 2001 From: Heikki Vesalainen Date: Thu, 26 Oct 2023 20:59:26 +0300 Subject: [PATCH 153/207] JLine 3.24.1 and JAnsi 2.4.0. --- .../main/scala/sbt/internal/util/JLine3.scala | 24 ++++++++++--------- project/Dependencies.scala | 6 ++--- 2 files changed, 16 insertions(+), 14 deletions(-) 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 6c2a04311..bea9b3c99 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 @@ -19,8 +19,8 @@ import org.jline.terminal.{ Attributes, Size, Terminal => JTerminal } import org.jline.terminal.Attributes.{ InputFlag, LocalFlag } import org.jline.terminal.Terminal.SignalHandler 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.terminal.impl.jansi.JansiTerminalProvider +import org.jline.terminal.spi.{ SystemStream, TerminalProvider } import org.jline.utils.OSUtils import scala.collection.JavaConverters._ import scala.util.Try @@ -32,25 +32,22 @@ 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 provider = new JansiTerminalProvider val termType = sys.props.get("org.jline.terminal.type").orElse(sys.env.get("TERM")).orNull - val term = JansiWinSysTerminal.createTerminal( + provider.winSysTerminal( "console", termType, OSUtils.IS_CONEMU, Charset.forName("UTF-8"), - -1, false, SignalHandler.SIG_DFL, - true + true, + SystemStream.Output ) - term.disableScrolling() - term } private val jansi = { val (major, minor) = - (JansiSupportImpl.getJansiMajorVersion, JansiSupportImpl.getJansiMinorVersion) + (JansiTerminalProvider.getJansiMajorVersion, JansiTerminalProvider.getJansiMinorVersion) (major > 1 || minor >= 18) && Util.isWindows } private[util] def system: org.jline.terminal.Terminal = { @@ -119,6 +116,11 @@ private[sbt] object JLine3 { } } } + + // returns 'null' if the terminal was created with no provider + override def getProvider(): TerminalProvider = null + // returns 'null' if the terminal is not bound to a system stream. + override def getSystemStream(): SystemStream = null override val input: InputStream = new InputStream { override def read: Int = { val res = term.inputStream match { @@ -180,7 +182,7 @@ private[sbt] object JLine3 { case null => -1 case i => i.toInt } - override def readBuffered(buf: Array[Char]): Int = { + override def readBuffered(buf: Array[Char], off: Int, len: Int, timeout: Long): Int = { if (buffer.isEmpty) fillBuffer() buffer.take match { case i if i == -1 => -1 diff --git a/project/Dependencies.scala b/project/Dependencies.scala index f50b55152..531678e93 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -86,14 +86,14 @@ object Dependencies { // JLine 3 version must be coordinated together with JAnsi version // and the JLine 2 fork version, which uses the same JAnsi - val jline = "org.scala-sbt.jline" % "jline" % "2.14.7-sbt-a1b0ffbb8f64bb820f4f84a0c07a0c0964507493" - val jline3Version = "3.19.0" + val jline = "org.scala-sbt.jline" % "jline" % "2.14.7-sbt-9c3b6aca11c57e339441442bbf58e550cdfecb79" + val jline3Version = "3.24.1" val jline3Terminal = "org.jline" % "jline-terminal" % jline3Version val jline3Jansi = "org.jline" % "jline-terminal-jansi" % jline3Version val jline3JNA = "org.jline" % "jline-terminal-jna" % jline3Version val jline3Reader = "org.jline" % "jline-reader" % jline3Version val jline3Builtins = "org.jline" % "jline-builtins" % jline3Version - val jansi = "org.fusesource.jansi" % "jansi" % "2.1.0" + val jansi = "org.fusesource.jansi" % "jansi" % "2.4.0" val scalatest = "org.scalatest" %% "scalatest" % "3.2.10" val scalacheck = "org.scalacheck" %% "scalacheck" % "1.15.4" val junit = "junit" % "junit" % "4.13.1" From f9f47620d06b3624352215903c20f8f778300bc0 Mon Sep 17 00:00:00 2001 From: Aleksandra Zdrojowa Date: Tue, 21 Nov 2023 14:52:34 +0100 Subject: [PATCH 154/207] pass classifiersModule configurations to ModuleDescriptorConfiguration --- main/src/main/scala/sbt/internal/LibraryManagement.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/LibraryManagement.scala b/main/src/main/scala/sbt/internal/LibraryManagement.scala index 220115e6a..9a0f0d362 100644 --- a/main/src/main/scala/sbt/internal/LibraryManagement.scala +++ b/main/src/main/scala/sbt/internal/LibraryManagement.scala @@ -185,7 +185,11 @@ private[sbt] object LibraryManagement { import config.{ updateConfiguration => c, module => mod } import mod.{ id, dependencies => deps, scalaModuleInfo } val base = restrictedCopy(id, true).withName(id.name + "$" + label) - val module = lm.moduleDescriptor(base, deps, scalaModuleInfo) + val moduleSettings = ModuleDescriptorConfiguration(base, ModuleInfo(base.name)) + .withScalaModuleInfo(scalaModuleInfo) + .withDependencies(deps) + .withConfigurations(mod.configurations) + val module = lm.moduleDescriptor(moduleSettings) val report = lm.update(module, c, uwconfig, log) match { case Right(r) => r case Left(w) => From 7c31c2bd6c440f685c5c54f376ca1f74b4918073 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 27 Nov 2023 03:19:36 -0500 Subject: [PATCH 155/207] Update to Zinc 1.10.0-M1 --- project/Dependencies.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 531678e93..842b4c8e0 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,10 +12,10 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.9.1") + private val ioVersion = nightlyVersion.getOrElse("1.9.7") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.3") - val zincVersion = nightlyVersion.getOrElse("1.9.5") + val zincVersion = nightlyVersion.getOrElse("1.10.0-M1") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From 7a60c3e4dc153a55b1e15bcebeeeae36416a8883 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 27 Nov 2023 23:24:48 -0500 Subject: [PATCH 156/207] Disable run/fork-loader test --- sbt-app/src/sbt-test/run/fork-loader/{test => disabled} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sbt-app/src/sbt-test/run/fork-loader/{test => disabled} (100%) diff --git a/sbt-app/src/sbt-test/run/fork-loader/test b/sbt-app/src/sbt-test/run/fork-loader/disabled similarity index 100% rename from sbt-app/src/sbt-test/run/fork-loader/test rename to sbt-app/src/sbt-test/run/fork-loader/disabled From 520b52656fa6400e8495eab1b5c38f24961deaca Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 27 Nov 2023 23:26:04 -0500 Subject: [PATCH 157/207] Mark source-dependencies/false-error passing --- .../sbt-test/source-dependencies/false-error/{pending => test} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sbt-app/src/sbt-test/source-dependencies/false-error/{pending => test} (100%) diff --git a/sbt-app/src/sbt-test/source-dependencies/false-error/pending b/sbt-app/src/sbt-test/source-dependencies/false-error/test similarity index 100% rename from sbt-app/src/sbt-test/source-dependencies/false-error/pending rename to sbt-app/src/sbt-test/source-dependencies/false-error/test From 1e784febecd0d3243a0aea59cceb7e24948c3a88 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 25 Nov 2023 01:06:00 -0500 Subject: [PATCH 158/207] sbt 1.9.7 --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b36926580..214fa10f9 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ npm-debug.log metals.sbt launcher-package/citest/freshly-baked .vscode +sbt-launch.jar From f6e195cf732279c8f74a72616245ed97798a8007 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 28 Nov 2023 00:30:59 -0500 Subject: [PATCH 159/207] Disable run/non-local-main --- sbt-app/src/sbt-test/run/non-local-main/{test => disabled} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sbt-app/src/sbt-test/run/non-local-main/{test => disabled} (100%) diff --git a/sbt-app/src/sbt-test/run/non-local-main/test b/sbt-app/src/sbt-test/run/non-local-main/disabled similarity index 100% rename from sbt-app/src/sbt-test/run/non-local-main/test rename to sbt-app/src/sbt-test/run/non-local-main/disabled From 4fc38dceeeb27dea90c4f6ae59cffdff6deca69a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 04:07:29 +0000 Subject: [PATCH 160/207] Bump actions/setup-java from 3 to 4 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- .github/workflows/nightly.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 066046fd8..3acb84537 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: ref: develop path: zinc - name: Setup JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: "${{ matrix.distribution }}" java-version: "${{ matrix.java }}" diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 88e6f48c1..767d58986 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -41,7 +41,7 @@ jobs: ref: develop path: zinc - name: Setup JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: "${{ matrix.distribution }}" java-version: "${{ matrix.java }}" From 2d7f08775393e4910d8e96177b0d8d883a63a8ad Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 4 Dec 2023 10:51:27 +0100 Subject: [PATCH 161/207] Add missing logger methods that take Java Supplier --- internal/util-logging/src/main/scala/sbt/util/Logger.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/util-logging/src/main/scala/sbt/util/Logger.scala b/internal/util-logging/src/main/scala/sbt/util/Logger.scala index 978a36323..c407f409a 100644 --- a/internal/util-logging/src/main/scala/sbt/util/Logger.scala +++ b/internal/util-logging/src/main/scala/sbt/util/Logger.scala @@ -40,11 +40,13 @@ abstract class Logger extends xLogger { def success(message: => String): Unit def log(level: Level.Value, message: => String): Unit + def verbose(msg: Supplier[String]): Unit = debug(msg) def debug(msg: Supplier[String]): Unit = log(Level.Debug, msg) def warn(msg: Supplier[String]): Unit = log(Level.Warn, msg) def info(msg: Supplier[String]): Unit = log(Level.Info, msg) def error(msg: Supplier[String]): Unit = log(Level.Error, msg) def trace(msg: Supplier[Throwable]): Unit = trace(msg.get()) + def success(msg: Supplier[String]): Unit = success(msg.get()) def log(level: Level.Value, msg: Supplier[String]): Unit = log(level, msg.get) } From e5e3d2832a9a5584da0fe2cb09c6849d30761a2a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 9 Dec 2023 05:45:03 -0500 Subject: [PATCH 162/207] Zinc 1.10.0-M2 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 842b4c8e0..5ac472434 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.9.7") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.3") - val zincVersion = nightlyVersion.getOrElse("1.10.0-M1") + val zincVersion = nightlyVersion.getOrElse("1.10.0-M2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From ef6fc89075b63a518cc8b0a27d8e08840e132918 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 04:24:57 +0000 Subject: [PATCH 163/207] Bump actions/setup-python from 4 to 5 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3acb84537..d7670dc22 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,7 +87,7 @@ jobs: distribution: "${{ matrix.distribution }}" java-version: "${{ matrix.java }}" - name: Set up Python 3.7 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.7 - name: Coursier cache From 556bd94b1663c95737641c2ecb9625b06efa16c5 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 11 Dec 2023 18:40:36 -0500 Subject: [PATCH 164/207] Lock thread after 365d of inactivity --- .github/workflows/lock-thread.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .github/workflows/lock-thread.yml diff --git a/.github/workflows/lock-thread.yml b/.github/workflows/lock-thread.yml new file mode 100644 index 000000000..1fc8d9c3f --- /dev/null +++ b/.github/workflows/lock-thread.yml @@ -0,0 +1,21 @@ +name: 'Lock Threads' + +on: + schedule: + # once a week on Saturday + - cron: '0 1 * * 6' + workflow_dispatch: + +permissions: + issues: write + pull-requests: write + discussions: write + +concurrency: + group: lock-threads + +jobs: + action: + runs-on: ubuntu-latest + steps: + - uses: dessant/lock-threads@v5 From becf4ec66f887d9528c5e09beac945772d0537b1 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 11 Dec 2023 18:54:05 -0500 Subject: [PATCH 165/207] Lock only issues --- .github/workflows/lock-thread.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/lock-thread.yml b/.github/workflows/lock-thread.yml index 1fc8d9c3f..7181837cf 100644 --- a/.github/workflows/lock-thread.yml +++ b/.github/workflows/lock-thread.yml @@ -19,3 +19,5 @@ jobs: runs-on: ubuntu-latest steps: - uses: dessant/lock-threads@v5 + with: + process-only: "issues" From 78a8af3d7f71849a4618a555ea2efb452e212d7d Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 20 Dec 2023 10:51:54 -0500 Subject: [PATCH 166/207] Bump the version number --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index a43a65b2e..3eba2b719 100644 --- a/build.sbt +++ b/build.sbt @@ -11,7 +11,7 @@ import scala.util.Try // ThisBuild settings take lower precedence, // but can be shared across the multi projects. ThisBuild / version := { - val v = "1.9.7-SNAPSHOT" + val v = "1.10.0-SNAPSHOT" nightlyVersion.getOrElse(v) } ThisBuild / version2_13 := "2.0.0-SNAPSHOT" From eadb5b3786f0127c1e2f05057dd12d0722eeca5b Mon Sep 17 00:00:00 2001 From: friendseeker <66892505+Friendseeker@users.noreply.github.com> Date: Mon, 1 Jan 2024 19:47:08 -0800 Subject: [PATCH 167/207] fix compile error in VirtualFileValueCache --- .../src/main/scala/sbt/internal/VirtualFileValueCache.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala index 2f2c97c0c..1140649e3 100644 --- a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala +++ b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala @@ -32,8 +32,10 @@ object VirtualFileValueCache { } } def apply[A](converter: FileConverter)(f: VirtualFile => A): VirtualFileValueCache[A] = { - import collection.mutable.{ HashMap, Map } - val stampCache: Map[VirtualFileRef, (Long, XStamp)] = new HashMap + import collection.concurrent.Map + import java.util.concurrent.ConcurrentHashMap + import scala.collection.JavaConverters._ + val stampCache: Map[VirtualFileRef, (Long, XStamp)] = new ConcurrentHashMap().asScala make( Stamper.timeWrap(stampCache, converter, { case (vf: VirtualFile) => Stamper.forContentHash(vf) From e4ab56e444975c2e48c7a53d9d4bee050e03f63d Mon Sep 17 00:00:00 2001 From: friendseeker <66892505+Friendseeker@users.noreply.github.com> Date: Mon, 1 Jan 2024 18:25:13 -0800 Subject: [PATCH 168/207] Include managedSources in packageSrc --- main/src/main/scala/sbt/Defaults.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 78d93f12a..5ab6982cf 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1719,11 +1719,11 @@ object Defaults extends BuildCommon { // drop base directories, since there are no valid mappings for these def sourceMappings: Initialize[Task[Seq[(File, String)]]] = Def.task { - val sdirs = unmanagedSourceDirectories.value + val sdirs = unmanagedSourceDirectories.value ++ managedSourceDirectories.value val base = baseDirectory.value val relative = (f: File) => relativeTo(sdirs)(f).orElse(relativeTo(base)(f)).orElse(flat(f)) val exclude = Set(sdirs, base) - unmanagedSources.value.flatMap { + (unmanagedSources.value ++ managedSources.value).flatMap { case s if !exclude(s) => relative(s).map(s -> _) case _ => None } From 053c7cc8bd8d6b32c266a78b7c1dda1011849d3a Mon Sep 17 00:00:00 2001 From: Tammo Steffens Date: Wed, 17 Jan 2024 21:39:39 +0100 Subject: [PATCH 169/207] Use the publisher interface for publishing as default --- main/src/main/scala/sbt/Defaults.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 5ab6982cf..5364c68ab 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -3665,7 +3665,8 @@ object Classpaths { val conf = config.value val log = streams.value.log val module = ivyModule.value - IvyActions.publish(module, conf, log) + val publisherInterface = publisher.value + publisherInterface.publish(module, conf, log) } } .tag(Tags.Publish, Tags.Network) From de4caf2631e7574e2389a3cb45d18f6555d0d631 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 04:14:49 +0000 Subject: [PATCH 170/207] Bump actions/cache from 3 to 4 Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d7670dc22..6e6738748 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,7 +93,7 @@ jobs: - name: Coursier cache uses: coursier/cache-action@v6 - name: Cache sbt - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.sbt key: ${{ runner.os }}-sbt-cache-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} From 02df82840a1527fb31d32c33d5bdb9d2bec034c4 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 15 Feb 2024 15:36:05 +0100 Subject: [PATCH 171/207] add noOp field in BSP compile report --- main/src/main/scala/sbt/Defaults.scala | 6 ++-- .../sbt/internal/server/BspCompileTask.scala | 34 +++++++++++++------ .../sbt/internal/bsp/CompileReport.scala | 24 ++++++++----- .../bsp/codec/CompileReportFormats.scala | 4 ++- protocol/src/main/contraband/bsp.contra | 3 ++ .../test/scala/testpkg/BuildServerTest.scala | 15 ++++---- 6 files changed, 55 insertions(+), 31 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 5364c68ab..f3cd01835 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2316,11 +2316,11 @@ object Defaults extends BuildCommon { val ci = (compile / compileInputs).value val ping = earlyOutputPing.value val reporter = (compile / bspReporter).value - BspCompileTask.compute(bspTargetIdentifier.value, thisProjectRef.value, configuration.value) { - task => + BspCompileTask + .compute(bspTargetIdentifier.value, thisProjectRef.value, configuration.value, ci) { task => // TODO - Should readAnalysis + saveAnalysis be scoped by the compile task too? compileIncrementalTaskImpl(task, s, ci, ping, reporter) - } + } } private val incCompiler = ZincUtil.defaultIncrementalCompiler private[sbt] def compileJavaTask: Initialize[Task[CompileResult]] = Def.task { diff --git a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala index 99cd0898a..205b11b57 100644 --- a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala +++ b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala @@ -11,21 +11,31 @@ package sbt.internal.server import sbt._ import sbt.internal.bsp._ import sbt.internal.io.Retry -import sbt.internal.server.BspCompileTask.{ compileReport, exchange } +import sbt.internal.server.BspCompileTask.compileReport +import sbt.internal.server.BspCompileTask.exchange import sbt.librarymanagement.Configuration +import sbt.util.InterfaceUtil import sjsonnew.support.scalajson.unsafe.Converter +import xsbti.CompileFailed +import xsbti.Problem +import xsbti.Severity import xsbti.compile.CompileResult -import xsbti.{ CompileFailed, Problem, Severity } +import xsbti.compile.Inputs import scala.util.control.NonFatal object BspCompileTask { private lazy val exchange = StandardMain.exchange - def compute(targetId: BuildTargetIdentifier, project: ProjectRef, config: Configuration)( + def compute( + targetId: BuildTargetIdentifier, + project: ProjectRef, + config: Configuration, + ci: Inputs + )( compile: BspCompileTask => CompileResult ): CompileResult = { - val task = BspCompileTask(targetId, project, config) + val task = BspCompileTask(targetId, project, config, ci) try { task.notifyStart() val result = Retry(compile(task)) @@ -45,22 +55,24 @@ object BspCompileTask { private def apply( targetId: BuildTargetIdentifier, project: ProjectRef, - config: Configuration + config: Configuration, + inputs: Inputs ): BspCompileTask = { val taskId = TaskId(BuildServerTasks.uniqueId, Vector()) val targetName = BuildTargetName.fromScope(project.project, config.name) - BspCompileTask(targetId, targetName, taskId, System.currentTimeMillis()) + new BspCompileTask(targetId, targetName, taskId, inputs, System.currentTimeMillis()) } private def compileReport( problems: Seq[Problem], targetId: BuildTargetIdentifier, - elapsedTimeMillis: Long + elapsedTimeMillis: Long, + isNoOp: Option[Boolean] ): CompileReport = { val countBySeverity = problems.groupBy(_.severity()).mapValues(_.size) val warnings = countBySeverity.getOrElse(Severity.Warn, 0) val errors = countBySeverity.getOrElse(Severity.Error, 0) - CompileReport(targetId, None, errors, warnings, Some(elapsedTimeMillis.toInt)) + CompileReport(targetId, None, errors, warnings, Some(elapsedTimeMillis.toInt), isNoOp) } } @@ -68,6 +80,7 @@ case class BspCompileTask private ( targetId: BuildTargetIdentifier, targetName: String, id: TaskId, + inputs: Inputs, startTimeMillis: Long ) { import sbt.internal.bsp.codec.JsonProtocol._ @@ -89,7 +102,8 @@ case class BspCompileTask private ( sourceInfos.values.flatMap(_.getReportedProblems).toSeq case _ => Seq() } - val report = compileReport(problems, targetId, elapsedTimeMillis) + val isNoOp = InterfaceUtil.toOption(inputs.previousResult.analysis).map(_ == result.analysis) + val report = compileReport(problems, targetId, elapsedTimeMillis, isNoOp) val params = TaskFinishParams( id, endTimeMillis, @@ -122,7 +136,7 @@ case class BspCompileTask private ( val endTimeMillis = System.currentTimeMillis() val elapsedTimeMillis = endTimeMillis - startTimeMillis val problems = cause.map(_.problems().toSeq).getOrElse(Seq.empty[Problem]) - val report = compileReport(problems, targetId, elapsedTimeMillis) + val report = compileReport(problems, targetId, elapsedTimeMillis, None) val params = TaskFinishParams( id, endTimeMillis, diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileReport.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileReport.scala index 5eb2ac41a..1144cd8a3 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileReport.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileReport.scala @@ -10,28 +10,30 @@ package sbt.internal.bsp * @param errors The total number of reported errors compiling this target. * @param warnings The total number of reported warnings compiling the target. * @param time The total number of milliseconds it took to compile the target. + * @param noOp The compilation was a noOp compilation. */ final class CompileReport private ( val target: sbt.internal.bsp.BuildTargetIdentifier, val originId: Option[String], val errors: Int, val warnings: Int, - val time: Option[Int]) extends Serializable { + val time: Option[Int], + val noOp: Option[Boolean]) extends Serializable { override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { - case x: CompileReport => (this.target == x.target) && (this.originId == x.originId) && (this.errors == x.errors) && (this.warnings == x.warnings) && (this.time == x.time) + case x: CompileReport => (this.target == x.target) && (this.originId == x.originId) && (this.errors == x.errors) && (this.warnings == x.warnings) && (this.time == x.time) && (this.noOp == x.noOp) case _ => false }) override def hashCode: Int = { - 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.CompileReport".##) + target.##) + originId.##) + errors.##) + warnings.##) + time.##) + 37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.CompileReport".##) + target.##) + originId.##) + errors.##) + warnings.##) + time.##) + noOp.##) } override def toString: String = { - "CompileReport(" + target + ", " + originId + ", " + errors + ", " + warnings + ", " + time + ")" + "CompileReport(" + target + ", " + originId + ", " + errors + ", " + warnings + ", " + time + ", " + noOp + ")" } - private[this] def copy(target: sbt.internal.bsp.BuildTargetIdentifier = target, originId: Option[String] = originId, errors: Int = errors, warnings: Int = warnings, time: Option[Int] = time): CompileReport = { - new CompileReport(target, originId, errors, warnings, time) + private[this] def copy(target: sbt.internal.bsp.BuildTargetIdentifier = target, originId: Option[String] = originId, errors: Int = errors, warnings: Int = warnings, time: Option[Int] = time, noOp: Option[Boolean] = noOp): CompileReport = { + new CompileReport(target, originId, errors, warnings, time, noOp) } def withTarget(target: sbt.internal.bsp.BuildTargetIdentifier): CompileReport = { copy(target = target) @@ -54,9 +56,15 @@ final class CompileReport private ( def withTime(time: Int): CompileReport = { copy(time = Option(time)) } + def withNoOp(noOp: Option[Boolean]): CompileReport = { + copy(noOp = noOp) + } + def withNoOp(noOp: Boolean): CompileReport = { + copy(noOp = Option(noOp)) + } } object CompileReport { - def apply(target: sbt.internal.bsp.BuildTargetIdentifier, originId: Option[String], errors: Int, warnings: Int, time: Option[Int]): CompileReport = new CompileReport(target, originId, errors, warnings, time) - def apply(target: sbt.internal.bsp.BuildTargetIdentifier, originId: String, errors: Int, warnings: Int, time: Int): CompileReport = new CompileReport(target, Option(originId), errors, warnings, Option(time)) + def apply(target: sbt.internal.bsp.BuildTargetIdentifier, originId: Option[String], errors: Int, warnings: Int, time: Option[Int], noOp: Option[Boolean]): CompileReport = new CompileReport(target, originId, errors, warnings, time, noOp) + def apply(target: sbt.internal.bsp.BuildTargetIdentifier, originId: String, errors: Int, warnings: Int, time: Int, noOp: Boolean): CompileReport = new CompileReport(target, Option(originId), errors, warnings, Option(time), Option(noOp)) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/CompileReportFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/CompileReportFormats.scala index 953258a86..dde3a3598 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/CompileReportFormats.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/CompileReportFormats.scala @@ -16,8 +16,9 @@ implicit lazy val CompileReportFormat: JsonFormat[sbt.internal.bsp.CompileReport val errors = unbuilder.readField[Int]("errors") val warnings = unbuilder.readField[Int]("warnings") val time = unbuilder.readField[Option[Int]]("time") + val noOp = unbuilder.readField[Option[Boolean]]("noOp") unbuilder.endObject() - sbt.internal.bsp.CompileReport(target, originId, errors, warnings, time) + sbt.internal.bsp.CompileReport(target, originId, errors, warnings, time, noOp) case None => deserializationError("Expected JsObject but found None") } @@ -29,6 +30,7 @@ implicit lazy val CompileReportFormat: JsonFormat[sbt.internal.bsp.CompileReport builder.addField("errors", obj.errors) builder.addField("warnings", obj.warnings) builder.addField("time", obj.time) + builder.addField("noOp", obj.noOp) builder.endObject() } } diff --git a/protocol/src/main/contraband/bsp.contra b/protocol/src/main/contraband/bsp.contra index dd621786a..a931a8fb6 100644 --- a/protocol/src/main/contraband/bsp.contra +++ b/protocol/src/main/contraband/bsp.contra @@ -530,6 +530,9 @@ type CompileReport { ## The total number of milliseconds it took to compile the target. time: Int + + ## The compilation was a noOp compilation. + noOp: Boolean } ## Test Request diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index b5ba98cb2..0e79673b7 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -133,7 +133,6 @@ object BuildServerTest extends AbstractServerTest { |}""".stripMargin ) - reloadWorkspace() compile(buildTarget) assertMessage( @@ -156,22 +155,20 @@ object BuildServerTest extends AbstractServerTest { reloadWorkspace() compile(buildTarget) - assertMessage( - "build/publishDiagnostics", - "Diagnostics.scala", - "\"diagnostics\":[]" - )( + assertMessage("build/publishDiagnostics", "Diagnostics.scala", "\"diagnostics\":[]")( duration = 30.seconds, message = "should send publishDiagnostics with empty diagnostics" ) + assertMessage("build/taskFinish", "\"noOp\":true")(debug = true) // trigger no-op compilation compile(buildTarget) assert( - !svr.waitForString(20.seconds) { s => - s.contains("build/publishDiagnostics") && - s.contains("Diagnostics.scala") + svr.waitForString(20.seconds) { s => + if (s.contains("build/publishDiagnostics") && s.contains("Diagnostics.scala")) + throw new Exception("shouldn't send publishDiagnostics if noOp compilation") + else s.contains("build/taskFinish") && s.contains("\"noOp\":true") }, "shouldn't send publishDiagnostics if there's no change in diagnostics (were empty, are empty)" ) From 0f4be2405e5deb13b63b29398bbf1477703e6b44 Mon Sep 17 00:00:00 2001 From: Hagai Ovadia Date: Sun, 18 Feb 2024 16:00:22 +0200 Subject: [PATCH 172/207] upgrade lm-coursier-shaded tp 2.1.3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 5ac472434..eb5a44714 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.2" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.3" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From d8d2b02e7eac1397a50a5a2bf433ddc50b0329b7 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 22 Jan 2024 16:29:46 +0100 Subject: [PATCH 173/207] Use the ordinary compiler classpath for scala-library No longer pass `-bootclasspath /path/to/scala-library.jar` to the Scala compiler, put the library on the ordinary classpath. --- main/src/main/scala/sbt/Defaults.scala | 4 ++-- main/src/main/scala/sbt/internal/Load.scala | 2 +- .../sbt-test/compiler-project/no-bootclasspath/build.sbt | 9 +++++++++ .../src/sbt-test/compiler-project/no-bootclasspath/test | 4 ++++ .../scala/sbt/internal/inc/ZincComponentCompiler.scala | 6 +++++- 5 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 sbt-app/src/sbt-test/compiler-project/no-bootclasspath/build.sbt create mode 100644 sbt-app/src/sbt-test/compiler-project/no-bootclasspath/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index f3cd01835..e6303a825 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -730,14 +730,14 @@ object Defaults extends BuildCommon { consoleProject / scalaCompilerBridgeSource := ZincLmUtil.getDefaultBridgeSourceModule( appConfiguration.value.provider.scalaProvider.version ), + classpathOptions := ClasspathOptionsUtil.noboot(scalaVersion.value), + console / classpathOptions := ClasspathOptionsUtil.replNoboot(scalaVersion.value), ) // must be a val: duplication detected by object identity private[this] lazy val compileBaseGlobal: Seq[Setting[_]] = globalDefaults( Seq( auxiliaryClassFiles :== Nil, incOptions := IncOptions.of(), - classpathOptions :== ClasspathOptionsUtil.boot, - console / classpathOptions :== ClasspathOptionsUtil.repl, compileOrder :== CompileOrder.Mixed, javacOptions :== Nil, scalacOptions :== Nil, diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index b00e0a911..431c617f7 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -79,7 +79,7 @@ private[sbt] object Load { val dependencyResolution = IvyDependencyResolution(ivyConfiguration) val si = ScalaInstance(scalaProvider.version, scalaProvider.launcher) val zincDir = BuildPaths.getZincDirectory(state, globalBase) - val classpathOptions = ClasspathOptionsUtil.boot + val classpathOptions = ClasspathOptionsUtil.noboot(si.version) val scalac = ZincLmUtil.scalaCompiler( scalaInstance = si, classpathOptions = classpathOptions, diff --git a/sbt-app/src/sbt-test/compiler-project/no-bootclasspath/build.sbt b/sbt-app/src/sbt-test/compiler-project/no-bootclasspath/build.sbt new file mode 100644 index 000000000..edd870753 --- /dev/null +++ b/sbt-app/src/sbt-test/compiler-project/no-bootclasspath/build.sbt @@ -0,0 +1,9 @@ +TaskKey[Unit]("check212") := checkCp(true) +TaskKey[Unit]("check213") := checkCp(false) + +def checkCp(auto: Boolean) = Def.task { + val opts = compilers.value.scalac.classpathOptions + assert(opts.autoBoot == auto, opts) + assert(opts.filterLibrary == auto, opts) + () +} diff --git a/sbt-app/src/sbt-test/compiler-project/no-bootclasspath/test b/sbt-app/src/sbt-test/compiler-project/no-bootclasspath/test new file mode 100644 index 000000000..a62a34698 --- /dev/null +++ b/sbt-app/src/sbt-test/compiler-project/no-bootclasspath/test @@ -0,0 +1,4 @@ +> set scalaVersion := "2.13.12" +> check213 +> set scalaVersion := "2.12.18" +> check212 diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala index 20a649275..05a9ea6f1 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala @@ -57,7 +57,11 @@ private[sbt] object ZincComponentCompiler { scalaInstance: XScalaInstance, logger: Logger, ): File = lock.synchronized { - val raw = new RawCompiler(scalaInstance, ClasspathOptionsUtil.auto, logger) + val raw = new RawCompiler( + scalaInstance, + ClasspathOptionsUtil.autoNoboot(scalaInstance.version), + logger + ) val zinc = new ZincComponentCompiler(raw, manager, dependencyResolution, bridgeSources, logger) logger.debug(f0(s"Getting $bridgeSources for Scala ${scalaInstance.version}")) From 893997d1b60504cbaa1b4e481dd30b9684c09aac Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 22 Jan 2024 16:30:20 +0100 Subject: [PATCH 174/207] Update scala libraries according to dependency graph There are a couple of settings / configs that affect this, summary below. The change in this PR seems to be the most narrow. `scalaModuleInfo.value.overrideScalaVersion` in sbt - affects how sbt to sets coursier's `forceScalaVersion` (see below) - used by librarymanagement.ivy. If true, add a OverrideScalaMediator See sbt/sbt#2634. Probably not relevant when using coursier. `autoScalaLibrary` setting in sbt - automatically add `scala-library` (or `scala3-library`) as a project dependency - also used for `forceScalaVersion` (see below) `CoursierConfiguration.autoScalaLibrary` - if `true` then Coursier `ResolutionParams.forceScalaVersion` is set to to `true` - initialized by sbt to `autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv) && !Classpaths.isScala213(sv) && // added in this commit scalaModuleInfo.forall(_.overrideScalaVersion)` coursier `ResolutionParams.forceScalaVersion` - if true, `scala-library` / `scala-reflect` / `scala-compiler` / `scalap` are forced to the scala version, not actually resolved - for Scala 3, the `scala3-library` and `scala3-compiler` versions are forced --- main/src/main/scala/sbt/Defaults.scala | 2 ++ main/src/main/scala/sbt/coursierint/LMCoursier.scala | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index e6303a825..00aae7174 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -3934,6 +3934,8 @@ object Classpaths { def deliverPattern(outputPath: File): String = (outputPath / "[artifact]-[revision](-[classifier]).[ext]").absolutePath + private[sbt] def isScala213(sv: String) = sv.startsWith("2.13.") + private[sbt] def isScala2Scala3Sandwich(sbv1: String, sbv2: String): Boolean = { def compare(a: String, b: String): Boolean = a == "2.13" && (b.startsWith("0.") || b.startsWith("3")) diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index 865fbf899..8d795072a 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -212,7 +212,7 @@ object LMCoursier { scalaOrganization.value, sv, scalaBinaryVersion.value, - autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv) && !Classpaths.isScala213(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, @@ -240,7 +240,7 @@ object LMCoursier { scalaOrganization.value, sv, scalaBinaryVersion.value, - autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv) && !Classpaths.isScala213(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, @@ -268,7 +268,7 @@ object LMCoursier { scalaOrganization.value, sv, scalaBinaryVersion.value, - autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv) && !Classpaths.isScala213(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, @@ -296,7 +296,7 @@ object LMCoursier { scalaOrganization.value, sv, scalaBinaryVersion.value, - autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv) && !Classpaths.isScala213(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, From 35bc07bd9ed9a6512189e2287c08ef23335c285d Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Tue, 24 Oct 2023 17:29:14 +0200 Subject: [PATCH 175/207] Use scala library from classpath in sbt run class loader --- .../scala/sbt/internal/ClassLoaders.scala | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/main/src/main/scala/sbt/internal/ClassLoaders.scala b/main/src/main/scala/sbt/internal/ClassLoaders.scala index e54ebfa0b..a1d209510 100644 --- a/main/src/main/scala/sbt/internal/ClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/ClassLoaders.scala @@ -12,7 +12,6 @@ package internal import java.io.File import java.net.URL import java.nio.file.Path - import sbt.ClassLoaderLayeringStrategy._ import sbt.Keys._ import sbt.SlashSyntax0._ @@ -22,10 +21,12 @@ import sbt.internal.inc.classpath.ClasspathUtil import sbt.internal.util.Attributed import sbt.internal.util.Attributed.data import sbt.io.IO +import sbt.librarymanagement.ScalaArtifacts import sbt.nio.FileStamp import sbt.nio.FileStamp.LastModified import sbt.nio.Keys._ import sbt.util.Logger +import xsbti.ArtifactInfo private[sbt] object ClassLoaders { private implicit class SeqFileOps(val files: Seq[File]) extends AnyVal { @@ -154,14 +155,24 @@ private[sbt] object ClassLoaders { case _: AllLibraryJars => true case _ => false } + val cpFiles = fullCP.map(_._1) val scalaLibraryLayer = { + val jars = + if (ScalaArtifacts.isScala3(si.version) || Classpaths.isScala213(si.version)) + cpFiles + .filter(f => { + val name = f.getName + name.contains(ArtifactInfo.ScalaLibraryID) || si.libraryJars + .exists(_.getName == name) + }) + .toArray + else si.libraryJars cache.apply( - si.libraryJars.map(j => j -> IO.getModifiedTimeOrZero(j)).toList, + jars.map(j => j -> IO.getModifiedTimeOrZero(j)).toList, interfaceLoader, - () => new ScalaLibraryClassLoader(si.libraryJars.map(_.toURI.toURL), interfaceLoader) + () => new ScalaLibraryClassLoader(jars.map(_.toURI.toURL), interfaceLoader) ) } - val cpFiles = fullCP.map(_._1) val allDependencies = cpFiles.filter(allDependenciesSet) def isReflectJar(f: File): Boolean = From 4c74358707477d105bf8d4d4452e2b7971b73ba7 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Fri, 12 Jan 2024 21:16:31 +0100 Subject: [PATCH 176/207] Fail the build if 2.13 scalaVersion < scala artifact on classpath When expanding a macro compiled against a new Scala library, the runtime classpath of the compiler should not contain an older library. Otherwise a NoSuchMethodException can occur. A similar issue is present when running the Scala repl through sbt. An input line compiled against a new library could fail to run if the repl's runtime classpath is on an old version. --- main/src/main/scala/sbt/Defaults.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 00aae7174..c9b00f748 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1150,6 +1150,23 @@ object Defaults extends BuildCommon { .configuration(Configurations.ScalaTool) .getOrElse(sys.error(noToolConfiguration(managedScalaInstance.value))) + if (Classpaths.isScala213(sv)) { + for { + compileReport <- fullReport.configuration(Configurations.Compile) + libName <- ScalaArtifacts.Artifacts + } { + for (lib <- compileReport.modules.find(_.module.name == libName)) { + val libVer = lib.module.revision + if (VersionNumber(sv).matchesSemVer(SemanticSelector(s"<$libVer"))) + sys.error( + s"""`${name.value}/scalaVersion` needs to be upgraded to $libVer. To support backwards-only + |binary compatibility (SIP-51), the Scala compiler cannot be older than $libName on the + |dependency classpath. See `${name.value}/evicted` why $libName was upgraded from $sv to $libVer. + |""".stripMargin + ) + } + } + } def file(id: String): File = { val files = for { m <- toolReport.modules if m.module.name.startsWith(id) From 951d1c4ae4477c0f5fa94786c8474011e2977858 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 22 Jan 2024 16:44:09 +0100 Subject: [PATCH 177/207] Add new `csrSameVersions` setting, use it for Scala artifacts The `csrSameVersions` setting can be used to keep dependencies at the same version. By default it's used for Scala artifacts. They need to be kept at the same version because the compiler / reflect are built with cross-artifact inlining enabled. `csrSameVersions := Seq(Set(scala-library, scala-reflect, scala-compiler, scalap))` Users can make use of the new setting in the following way: - `csrSameVersions += Set[InclExclRule]("com.corp" % "lib", "com.corp" % "lub")` - `csrSameVersions += Set[InclExclRule]("com.corp" % "lib-family-*")` --- main/src/main/scala/sbt/Defaults.scala | 3 + main/src/main/scala/sbt/Keys.scala | 1 + .../scala/sbt/coursierint/LMCoursier.scala | 59 +++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index c9b00f748..ed83474dc 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -271,6 +271,9 @@ object Defaults extends BuildCommon { csrLogger := LMCoursier.coursierLoggerTask.value, csrMavenProfiles :== Set.empty, csrReconciliations :== LMCoursier.relaxedForAllModules, + csrSameVersions := Seq( + ScalaArtifacts.Artifacts.map(a => InclExclRule(scalaOrganization.value, a)).toSet + ) ) /** Core non-plugin settings for sbt builds. These *must* be on every build or the sbt engine will fail to run at all. */ diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 4d19d798d..69073fc16 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -452,6 +452,7 @@ object Keys { val csrExtraCredentials = taskKey[Seq[lmcoursier.credentials.Credentials]]("") val csrPublications = taskKey[Seq[(lmcoursier.definitions.Configuration, lmcoursier.definitions.Publication)]]("") val csrReconciliations = settingKey[Seq[(ModuleMatchers, Reconciliation)]]("Strategy to reconcile version conflicts.") + val csrSameVersions = settingKey[Seq[Set[InclExclRule]]]("Modules to keep at the same version.") val internalConfigurationMap = settingKey[Configuration => Configuration]("Maps configurations to the actual configuration used to define the classpath.").withRank(CSetting) val classpathConfiguration = taskKey[Configuration]("The configuration used to define the classpath.").withRank(CTask) diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index 8d795072a..84ed5339d 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -74,6 +74,7 @@ object LMCoursier { def relaxedForAllModules: Seq[(ModuleMatchers, Reconciliation)] = Vector((ModuleMatchers.all, Reconciliation.Relaxed)) + // For binary compatibility / MiMa def coursierConfiguration( rs: Seq[Resolver], interProjectDependencies: Seq[CProject], @@ -119,6 +120,58 @@ object LMCoursier { strict, depsOverrides, None, + Nil, + log + ) + + // For binary compatibility / MiMa + def coursierConfiguration( + rs: Seq[Resolver], + interProjectDependencies: Seq[CProject], + extraProjects: Seq[CProject], + fallbackDeps: Seq[FallbackDependency], + appConfig: AppConfiguration, + classifiers: Option[Seq[Classifier]], + profiles: Set[String], + scalaOrg: String, + scalaVer: String, + scalaBinaryVer: String, + autoScalaLib: Boolean, + scalaModInfo: Option[ScalaModuleInfo], + excludeDeps: Seq[InclExclRule], + credentials: Seq[Credentials], + createLogger: Option[CacheLogger], + cacheDirectory: File, + reconciliation: Seq[(ModuleMatchers, Reconciliation)], + ivyHome: Option[File], + strict: Option[CStrict], + depsOverrides: Seq[ModuleID], + updateConfig: Option[UpdateConfiguration], + log: Logger + ): CoursierConfiguration = + coursierConfiguration( + rs, + interProjectDependencies, + extraProjects, + fallbackDeps, + appConfig, + classifiers, + profiles, + scalaOrg, + scalaVer, + scalaBinaryVer, + autoScalaLib, + scalaModInfo, + excludeDeps, + credentials, + createLogger, + cacheDirectory, + reconciliation, + ivyHome, + strict, + depsOverrides, + updateConfig, + Nil, log ) @@ -144,6 +197,7 @@ object LMCoursier { strict: Option[CStrict], depsOverrides: Seq[ModuleID], updateConfig: Option[UpdateConfiguration], + sameVersions: Seq[Set[InclExclRule]], log: Logger ): CoursierConfiguration = { val coursierExcludeDeps = Inputs @@ -197,6 +251,7 @@ object LMCoursier { .withStrict(strict) .withForceVersions(userForceVersions.toVector) .withMissingOk(missingOk) + .withSameVersions(sameVersions) } def coursierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { @@ -223,6 +278,7 @@ object LMCoursier { CoursierInputsTasks.strictTask.value, dependencyOverrides.value, Some(updateConfiguration.value), + csrSameVersions.value, streams.value.log ) } @@ -251,6 +307,7 @@ object LMCoursier { CoursierInputsTasks.strictTask.value, dependencyOverrides.value, Some(updateConfiguration.value), + csrSameVersions.value, streams.value.log ) } @@ -279,6 +336,7 @@ object LMCoursier { CoursierInputsTasks.strictTask.value, dependencyOverrides.value, Some(updateConfiguration.value), + csrSameVersions.value, streams.value.log ) } @@ -307,6 +365,7 @@ object LMCoursier { CoursierInputsTasks.strictTask.value, dependencyOverrides.value, Some(updateConfiguration.value), + csrSameVersions.value, streams.value.log ) } From b9375f5e6b1b5c55b67b7d5987efe25bca3df699 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 22 Jan 2024 13:41:51 +0100 Subject: [PATCH 178/207] Update scala-library in scala-tool configuration for Scala 3 When a macro was compiled against a new scala-library (say 2.13.15), the runtime classpath of the Scala compiler should not contain an older scala-library. Otherwise the macro can cause a NoSuchMethodException during expansion. This commit updates scala-library in the scalaInstance to the version on the projects dependency classpath. --- main/src/main/scala/sbt/Defaults.scala | 27 +++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index ed83474dc..133e46434 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1149,9 +1149,29 @@ object Defaults extends BuildCommon { val sv = scalaVersion.value val fullReport = update.value - val toolReport = fullReport - .configuration(Configurations.ScalaTool) - .getOrElse(sys.error(noToolConfiguration(managedScalaInstance.value))) + // For Scala 3, update scala-library.jar in `scala-tool` and `scala-doc-tool` in case a newer version + // is present in the `compile` configuration. This is needed once forwards binary compatibility is dropped + // to avoid NoSuchMethod exceptions when expanding macros. + def updateLibraryToCompileConfiguration(report: ConfigurationReport) = + if (!ScalaArtifacts.isScala3(sv)) report + else + (for { + compileConf <- fullReport.configuration(Configurations.Compile) + compileLibMod <- compileConf.modules.find(_.module.name == ScalaArtifacts.LibraryID) + reportLibMod <- report.modules.find(_.module.name == ScalaArtifacts.LibraryID) + if VersionNumber(reportLibMod.module.revision) + .matchesSemVer(SemanticSelector(s"<${compileLibMod.module.revision}")) + } yield { + val newMods = report.modules + .filterNot(_.module.name == ScalaArtifacts.LibraryID) :+ compileLibMod + report.withModules(newMods) + }).getOrElse(report) + + val toolReport = updateLibraryToCompileConfiguration( + fullReport + .configuration(Configurations.ScalaTool) + .getOrElse(sys.error(noToolConfiguration(managedScalaInstance.value))) + ) if (Classpaths.isScala213(sv)) { for { @@ -1182,6 +1202,7 @@ object Defaults extends BuildCommon { val allDocJars = fullReport .configuration(Configurations.ScalaDocTool) + .map(updateLibraryToCompileConfiguration) .toSeq .flatMap(_.modules) .flatMap(_.artifacts.map(_._2)) From f0afeff4d99b7946b9094cf453b3a3677dd8575a Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Tue, 23 Jan 2024 14:50:06 +0100 Subject: [PATCH 179/207] Set locale for f interpolator decimal character dependency-graph/toFileSubTask failed for me locally --- .../scala/sbt/internal/graph/rendering/Statistics.scala | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala b/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala index e569b916d..720d15c9f 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/Statistics.scala @@ -47,6 +47,9 @@ object Statistics { } def format(stats: ModuleStats): String = { + import java.util.Locale + val dl = Locale.getDefault + Locale.setDefault(Locale.US) import stats._ def mb(bytes: Long): Double = bytes.toDouble / 1000000 val selfSize = @@ -54,7 +57,10 @@ object Statistics { case Some(size) => f"${mb(size)}%7.3f" case None => "-------" } - f"${mb(transitiveSize)}%7.3f MB $selfSize MB $numTransitiveDependencies%4d $numDirectDependencies%4d ${id.idString}%s" + val r = + f"${mb(transitiveSize)}%7.3f MB $selfSize MB $numTransitiveDependencies%4d $numDirectDependencies%4d ${id.idString}%s" + Locale.setDefault(dl) + r } val allStats = From 4a1ba0c97089d5d301398f6edad238ef59e6d14d Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Tue, 23 Jan 2024 17:09:20 +0100 Subject: [PATCH 180/207] tests for standard library unfreezing --- .../stdlib-unfreeze-update/build.sbt | 4 ++ .../stdlib-unfreeze-update/test | 3 ++ .../stdlib-unfreeze/a/A.scala | 20 ++++++++ .../stdlib-unfreeze/a3/A.scala | 17 +++++++ .../stdlib-unfreeze/b/B.scala | 7 +++ .../stdlib-unfreeze/b3/B.scala | 6 +++ .../stdlib-unfreeze/build.sbt | 46 +++++++++++++++++++ .../stdlib-unfreeze/test | 20 ++++++++ 8 files changed, 123 insertions(+) create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/build.sbt create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/test create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a/A.scala create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a3/A.scala create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b/B.scala create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b3/B.scala create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/build.sbt create mode 100644 sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/test diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/build.sbt b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/build.sbt new file mode 100644 index 000000000..ed6887bc4 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/build.sbt @@ -0,0 +1,4 @@ +lazy val a = project.settings( + scalaVersion := "2.13.4", + libraryDependencies += "org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.4", // depends on library 2.13.6 +) diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/test b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/test new file mode 100644 index 000000000..7f263ab0b --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze-update/test @@ -0,0 +1,3 @@ +-> a/scalaInstance +> set a/scalaVersion := "2.13.6" +> a/scalaInstance diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a/A.scala b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a/A.scala new file mode 100644 index 000000000..d1522c579 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a/A.scala @@ -0,0 +1,20 @@ +import scala.language.reflectiveCalls + +object A extends App { + println(scala.util.Properties.versionString) +} + +object AMacro { + import scala.language.experimental.macros + import scala.reflect.macros.blackbox.Context + + def m(x: Int): Int = macro impl + + def impl(c: Context)(x: c.Expr[Int]): c.Expr[Int] = { + import c.universe._ + // added in 2.13.4 + val ec = (scala.concurrent.ExecutionContext: {def opportunistic: scala.concurrent.ExecutionContextExecutor}).opportunistic + println(ec) + c.Expr(q"2 + $x") + } +} diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a3/A.scala b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a3/A.scala new file mode 100644 index 000000000..e6f35a100 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/a3/A.scala @@ -0,0 +1,17 @@ +import scala.quoted.* // imports Quotes, Expr + +package scala.collection { + object Exp: + // added in 2.13.10, not available in 2.13.8 + def m(i: Int) = IterableOnce.checkArraySizeWithinVMLimit(i) +} + +object Mac: + inline def inspect(inline x: Any): Any = ${ inspectCode('x) } + + def inspectCode(x: Expr[Any])(using Quotes): Expr[Any] = + scala.collection.Exp.m(42) + println(x.show) + x + +@main def huhu = println(scala.util.Properties.versionString) diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b/B.scala b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b/B.scala new file mode 100644 index 000000000..e24101062 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b/B.scala @@ -0,0 +1,7 @@ +import java.nio.file.{Paths, Files} +import java.nio.charset.StandardCharsets + +object B extends App { + println(AMacro.m(33)) + Files.write(Paths.get(s"s${scala.util.Properties.versionNumberString}.txt"), "nix".getBytes) +} diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b3/B.scala b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b3/B.scala new file mode 100644 index 000000000..a011c5c95 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/b3/B.scala @@ -0,0 +1,6 @@ +import java.nio.file.{Paths, Files} +import java.nio.charset.StandardCharsets + +@main def hubu = + Mac.inspect(println("hai")) + Files.write(Paths.get(s"s${scala.util.Properties.versionNumberString}.txt"), "nix".getBytes) diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/build.sbt b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/build.sbt new file mode 100644 index 000000000..901101cea --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/build.sbt @@ -0,0 +1,46 @@ +import sbt.librarymanagement.InclExclRule + +lazy val a = project.settings( + scalaVersion := "2.13.6", + libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value, + TaskKey[Unit]("checkLibs") := checkLibs("2.13.6", (Compile/dependencyClasspath).value, ".*scala-(library|reflect).*"), +) + +lazy val b = project.dependsOn(a).settings( + scalaVersion := "2.13.8", + TaskKey[Unit]("checkLibs") := checkLibs("2.13.8", (Compile/dependencyClasspath).value, ".*scala-(library|reflect).*"), +) + +lazy val a3 = project.settings( + scalaVersion := "3.2.2", // 2.13.10 library +) + +lazy val b3 = project.dependsOn(a3).settings( + scalaVersion := "3.2.0", // 2.13.8 library + TaskKey[Unit]("checkScala") := { + val i = scalaInstance.value + i.libraryJars.filter(_.toString.contains("scala-library")).toList match { + case List(l) => assert(l.toString.contains("2.13.10"), i.toString) + } + assert(i.compilerJars.filter(_.toString.contains("scala-library")).isEmpty, i.toString) + assert(i.otherJars.filter(_.toString.contains("scala-library")).isEmpty, i.toString) + }, +) + +lazy val ak = project.settings( + scalaVersion := "2.13.12", + csrSameVersions += Set[InclExclRule]("com.typesafe.akka" % "akka-*"), + libraryDependencies ++= Seq( + "com.typesafe.akka" %% "akka-remote" % "2.6.5", + "com.typesafe.akka" %% "akka-actor" % "2.6.2", + ), + TaskKey[Unit]("checkLibs") := checkLibs("2.6.5", (Compile/dependencyClasspath).value, ".*akka-.*"), +) + +def checkLibs(v: String, cp: Classpath, filter: String): Unit = { + for (p <- cp) + if (p.toString.matches(filter)) { + println(s"$p -- $v") + assert(p.toString.contains(v), p) + } +} diff --git a/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/test b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/test new file mode 100644 index 000000000..7df93ab6c --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/stdlib-unfreeze/test @@ -0,0 +1,20 @@ +> a/checkLibs +> b/checkLibs + +> b/run +$ exists s2.13.8.txt +$ delete s2.13.8.txt + +# don't crash when expanding the macro +> b3/run +$ exists s2.13.10.txt +$ delete s2.13.10.txt + +> b3/checkScala + +# without the default `csrSameVersions`, scala-reflect in b stays at 2.13.6 +> set b/csrSameVersions := Nil +> b/update +-> b/checkLibs + +> ak/checkLibs From 447c2ba5e5f4f6d4259caf7ef188b862fd42a78e Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Mon, 26 Feb 2024 13:48:19 +0100 Subject: [PATCH 181/207] update zinc and sbt-coursier dependencies --- project/Dependencies.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index eb5a44714..db9614014 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.9.7") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.3") - val zincVersion = nightlyVersion.getOrElse("1.10.0-M2") + val zincVersion = nightlyVersion.getOrElse("1.10.0-M3") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.3" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.4" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From 45071355648d21432b3ed71e61394df43b1080d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Koz=C5=82owski?= Date: Fri, 15 Mar 2024 14:36:38 +0100 Subject: [PATCH 182/207] Update lm-coursier-shaded: 2.1.3 -> 2.1.4 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index eb5a44714..b68388e6a 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompile", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.3" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.1.4" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value From 735214afd07f36fc2162c98f525a43b455d4581e Mon Sep 17 00:00:00 2001 From: Seth Tisue Date: Sat, 16 Mar 2024 11:39:47 +0100 Subject: [PATCH 183/207] Scala 2.12.19 (was 2.12.18), scala-xml 2.2.0 (was 2.1.0) --- .github/workflows/ci.yml | 2 +- launcher-package/build.sbt | 6 +++--- main/src/main/scala/sbt/PluginCross.scala | 2 +- project/Dependencies.scala | 6 +++--- sbt-app/src/sbt-test/actions/cross-advanced/build.sbt | 2 +- sbt-app/src/sbt-test/actions/cross-advanced/test | 2 +- sbt-app/src/sbt-test/actions/cross-incremental/build.sbt | 4 ++-- sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt | 2 +- sbt-app/src/sbt-test/actions/cross-multi-parser/test | 4 ++-- sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt | 2 +- .../src/sbt-test/actions/cross-multiproject/ref/build.sbt | 2 +- sbt-app/src/sbt-test/actions/cross-multiproject/test | 4 ++-- .../actions/cross-strict-aggregation-scala-3/build.sbt | 6 +++--- .../src/sbt-test/actions/cross-strict-aggregation/build.sbt | 2 +- sbt-app/src/sbt-test/actions/doc-file-options/build.sbt | 2 +- sbt-app/src/sbt-test/actions/doc/build.sbt | 4 ++-- sbt-app/src/sbt-test/actions/generator/build.sbt | 2 +- sbt-app/src/sbt-test/actions/multi-command/build.sbt | 2 +- sbt-app/src/sbt-test/actions/multi-command/test | 2 +- .../src/sbt-test/actions/package-delete-target/build.sbt | 2 +- .../src/sbt-test/actions/remote-cache-semanticdb/build.sbt | 2 +- sbt-app/src/sbt-test/actions/remote-cache/build.sbt | 2 +- .../sbt-test/classloader-cache/akka-actor-system/build.sbt | 2 +- sbt-app/src/sbt-test/classloader-cache/jni/build.sbt | 2 +- .../sbt-test/classloader-cache/library-mismatch/build.sbt | 2 +- .../src/sbt-test/classloader-cache/runtime-layers/build.sbt | 2 +- sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt | 2 +- .../0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom | 2 +- .../0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom | 2 +- sbt-app/src/sbt-test/classloader-cache/spark/build.sbt | 2 +- sbt-app/src/sbt-test/classloader-cache/utest/build.sbt | 2 +- .../compiler-project/error-in-invalidated/build.sbt | 2 +- .../src/sbt-test/compiler-project/macro-config/build.sbt | 2 +- sbt-app/src/sbt-test/compiler-project/run-test/build.sbt | 2 +- .../compiler-project/separate-analysis-per-scala/build.sbt | 2 +- .../console/project-compiler-bridge/project/build.sbt | 2 +- .../sbt-test/dependency-graph/cachedResolution/build.sbt | 2 +- .../sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt | 2 +- .../src/sbt-test/dependency-graph/toFileSubTask/build.sbt | 2 +- .../src/sbt-test/dependency-management/artifact/build.sbt | 2 +- .../dependency-management/cache-classifiers/multi.sbt | 2 +- .../cached-resolution-interproj/multi.sbt | 2 +- .../dependency-management/compiler-bridge-binary/build.sbt | 2 +- .../dependency-management/conflict-coursier/build.sbt | 2 +- .../dependency-management/ext-pom-classifier/build.sbt | 2 +- .../sbt-test/dependency-management/global-plugins/build.sbt | 2 +- .../sbt-test/dependency-management/snapshot-local/build.sbt | 2 +- .../dependency-management/snapshot-resolution/build.sbt | 2 +- sbt-app/src/sbt-test/java/cross/build.sbt | 2 +- sbt-app/src/sbt-test/java/cross/changes/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/hydra/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt | 2 +- sbt-app/src/sbt-test/plugins/unidoc/build.sbt | 2 +- sbt-app/src/sbt-test/project/aggregate/projA/build.sbt | 2 +- .../src/sbt-test/project/cross-plugins-defaults/build.sbt | 4 ++-- sbt-app/src/sbt-test/project/flatten/build.sbt | 2 +- sbt-app/src/sbt-test/project/internal-tracking/build.sbt | 2 +- sbt-app/src/sbt-test/project/sbt-plugin/build.sbt | 2 +- .../sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt | 2 +- sbt-app/src/sbt-test/project/semanticdb/build.sbt | 2 +- sbt-app/src/sbt-test/project/unified/build.sbt | 2 +- sbt-app/src/sbt-test/run/fork-loader/build.sbt | 2 +- sbt-app/src/sbt-test/source-dependencies/binary/build.sbt | 2 +- sbt-app/src/sbt-test/source-dependencies/constants/test | 2 +- sbt-app/src/sbt-test/source-dependencies/cross-source/test | 2 +- .../sbt-test/source-dependencies/macro-annotation/build.sbt | 2 +- .../source-dependencies/macro-arg-dep-nested/build.sbt | 2 +- .../macro-arg-dep-stackoverflow/build.sbt | 2 +- .../sbt-test/source-dependencies/macro-arg-dep/build.sbt | 2 +- sbt-app/src/sbt-test/source-dependencies/macro/build.sbt | 2 +- sbt-app/src/sbt-test/tests/arguments/build.sbt | 2 +- sbt-app/src/sbt-test/tests/do-not-discover/build.sbt | 2 +- sbt-app/src/sbt-test/tests/done/build.sbt | 2 +- sbt-app/src/sbt-test/tests/filter-runners/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork-async/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork-parallel/build.sbt | 2 +- .../tests/fork-test-group-parallel-custom-tags/build.sbt | 2 +- .../src/sbt-test/tests/fork-test-group-parallel/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork/build.sbt | 2 +- sbt-app/src/sbt-test/tests/fork2/build.sbt | 2 +- sbt-app/src/sbt-test/tests/it/build.sbt | 2 +- sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt | 2 +- sbt-app/src/sbt-test/tests/munit/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-subproc/build.sbt | 2 +- sbt-app/src/sbt-test/tests/nested-tests/build.sbt | 2 +- .../src/sbt-test/tests/one-class-multi-framework/build.sbt | 2 +- sbt-app/src/sbt-test/tests/order/build.sbt | 2 +- sbt-app/src/sbt-test/tests/resources/build.sbt | 2 +- .../src/sbt-test/tests/scala-instance-classloader/build.sbt | 2 +- sbt-app/src/sbt-test/tests/serial/build.sbt | 2 +- sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt | 2 +- sbt-app/src/sbt-test/tests/single-runner/build.sbt | 2 +- sbt-app/src/sbt-test/tests/specs-run/build.sbt | 2 +- sbt-app/src/sbt-test/tests/t543/build.sbt | 2 +- sbt-app/src/sbt-test/tests/task/build.sbt | 2 +- sbt-app/src/sbt-test/tests/test-exclude/build.sbt | 2 +- sbt-app/src/sbt-test/tests/test-quick/build.sbt | 2 +- sbt-app/src/sbt-test/watch/commands/build.sbt | 2 +- server-test/src/server-test/response/build.sbt | 2 +- 102 files changed, 113 insertions(+), 113 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6e6738748..5cc00696c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,7 +52,7 @@ jobs: env: JAVA_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 JVM_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 - SCALA_212: 2.12.18 + SCALA_212: 2.12.19 SCALA_3: 3.1.0 UTIL_TESTS: "utilCache/test utilControl/test utilInterface/test utilLogging/test utilPosition/test utilRelation/test utilScripted/test utilTracking/test" SBT_LOCAL: false diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index bf51e787f..c09fe1845 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -26,7 +26,7 @@ lazy val sbtVersionToRelease = sys.props.getOrElse("sbt.build.version", sys.env. })) lazy val scala210 = "2.10.7" -lazy val scala212 = "2.12.18" +lazy val scala212 = "2.12.19" lazy val scala210Jline = "org.scala-lang" % "jline" % scala210 lazy val jansi = { if (sbtVersionToRelease startsWith "1.") "org.fusesource.jansi" % "jansi" % "1.12" @@ -34,8 +34,8 @@ lazy val jansi = { } lazy val scala212Compiler = "org.scala-lang" % "scala-compiler" % scala212 lazy val scala212Jline = "jline" % "jline" % "2.14.6" -// use the scala-xml version used by the compiler not the latest: https://github.com/scala/scala/blob/v2.12.18/versions.properties#L21 -lazy val scala212Xml = "org.scala-lang.modules" % "scala-xml_2.12" % "2.1.0" +// use the scala-xml version used by the compiler not the latest: https://github.com/scala/scala/blob/v2.12.19/versions.properties +lazy val scala212Xml = "org.scala-lang.modules" % "scala-xml_2.12" % "2.2.0" lazy val sbtActual = "org.scala-sbt" % "sbt" % sbtVersionToRelease lazy val sbt013ExtraDeps = { diff --git a/main/src/main/scala/sbt/PluginCross.scala b/main/src/main/scala/sbt/PluginCross.scala index a12fc4b60..823db18c7 100644 --- a/main/src/main/scala/sbt/PluginCross.scala +++ b/main/src/main/scala/sbt/PluginCross.scala @@ -100,7 +100,7 @@ private[sbt] object PluginCross { VersionNumber(sv) match { case VersionNumber(Seq(0, 12, _*), _, _) => "2.9.2" case VersionNumber(Seq(0, 13, _*), _, _) => "2.10.7" - case VersionNumber(Seq(1, 0, _*), _, _) => "2.12.18" + case VersionNumber(Seq(1, 0, _*), _, _) => "2.12.19" case _ => sys.error(s"Unsupported sbt binary version: $sv") } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index b68388e6a..2b606bfc8 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -4,7 +4,7 @@ import sbt.contraband.ContrabandPlugin.autoImport._ object Dependencies { // WARNING: Please Scala update versions in PluginCross.scala too - val scala212 = "2.12.18" + val scala212 = "2.12.19" val scala213 = "2.13.12" val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up") val baseScalaVersion = scala212 @@ -102,9 +102,9 @@ object Dependencies { val scalaXml = Def.setting( if (scalaBinaryVersion.value == "3") { - "org.scala-lang.modules" %% "scala-xml" % "2.1.0" + "org.scala-lang.modules" %% "scala-xml" % "2.2.0" } else { - "org.scala-lang.modules" %% "scala-xml" % "2.1.0" + "org.scala-lang.modules" %% "scala-xml" % "2.2.0" } ) val scalaParsers = Def.setting( diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt index e84586e99..698d3d3e7 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-advanced/build.sbt @@ -1,6 +1,6 @@ lazy val check = taskKey[Unit]("") lazy val compile2 = taskKey[Unit]("") -lazy val scala212 = "2.12.18" +lazy val scala212 = "2.12.19" lazy val scala213 = "2.13.12" lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/test b/sbt-app/src/sbt-test/actions/cross-advanced/test index 15c90ead4..918b69731 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/test +++ b/sbt-app/src/sbt-test/actions/cross-advanced/test @@ -17,7 +17,7 @@ ## test + with command or alias > clean ## for command cross building you do need crossScalaVerions on root -> set root/crossScalaVersions := Seq("2.12.18", "2.13.12") +> set root/crossScalaVersions := Seq("2.12.19", "2.13.12") > + build $ exists foo/target/scala-2.12 $ exists foo/target/scala-2.13 diff --git a/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt b/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt index 8176b96da..751353326 100644 --- a/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-incremental/build.sbt @@ -1,5 +1,5 @@ -scalaVersion := "2.12.18" -crossScalaVersions := List("2.12.18", "2.13.12") +scalaVersion := "2.12.19" +crossScalaVersions := List("2.12.19", "2.13.12") val setLastModified = taskKey[Unit]("Sets the last modified time for classfiles") setLastModified := { diff --git a/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt b/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt index 5b20f8f5f..bc2b10efb 100644 --- a/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multi-parser/build.sbt @@ -1 +1 @@ -crossScalaVersions := Seq[String]("2.11.12", "2.12.18") +crossScalaVersions := Seq[String]("2.11.12", "2.12.19") diff --git a/sbt-app/src/sbt-test/actions/cross-multi-parser/test b/sbt-app/src/sbt-test/actions/cross-multi-parser/test index cd87f4b85..b2666730a 100644 --- a/sbt-app/src/sbt-test/actions/cross-multi-parser/test +++ b/sbt-app/src/sbt-test/actions/cross-multi-parser/test @@ -1,5 +1,5 @@ > ++2.11.12; compile -> ++ 2.12.18 ; compile; +> ++ 2.12.19 ; compile; -> ++ 2.12.18 ; compile +> ++ 2.12.19 ; compile diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt index 30fc02654..9cdaec371 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt @@ -1,4 +1,4 @@ -lazy val scala212 = "2.12.18" +lazy val scala212 = "2.12.19" lazy val scala213 = "2.13.12" ThisBuild / crossScalaVersions := Seq(scala212, scala213) diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt b/sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt index e7c15281f..6fdb53f78 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/ref/build.sbt @@ -1,4 +1,4 @@ lazy val external = (project in file(".")) .settings( - scalaVersion := "2.12.18" + scalaVersion := "2.12.19" ) diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/test b/sbt-app/src/sbt-test/actions/cross-multiproject/test index 56cba5b73..2cb5f058e 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/test +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/test @@ -13,7 +13,7 @@ $ exists lib/target/scala-2.13 # test safe switching > clean -> ++ 2.12.18 -v compile +> ++ 2.12.19 -v compile $ exists lib/target/scala-2.12 -$ exists lib/target/scala-2.13 $ exists sbt-foo/target/scala-2.12 @@ -31,7 +31,7 @@ $ exists ref/target/scala-2.12 # Test ++ leaves crossScalaVersions unchanged > clean -> ++2.12.18 +> ++2.12.19 > +extrasProj/compile $ exists extras/target/scala-2.13 $ exists extras/target/scala-2.12 diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt index 53d1c7234..38a5a26fe 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt @@ -1,14 +1,14 @@ -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" lazy val core = project .settings( - crossScalaVersions := Seq("2.12.18", "3.0.2", "3.1.2") + crossScalaVersions := Seq("2.12.19", "3.0.2", "3.1.2") ) lazy val subproj = project .dependsOn(core) .settings( - crossScalaVersions := Seq("2.12.18", "3.1.2"), + crossScalaVersions := Seq("2.12.19", "3.1.2"), // a random library compiled against Scala 3.1 libraryDependencies += "org.http4s" %% "http4s-core" % "0.23.12" ) diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt index 7eb67145a..68540aadb 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt @@ -1,4 +1,4 @@ -lazy val scala212 = "2.12.18" +lazy val scala212 = "2.12.19" lazy val scala213 = "2.13.12" ThisBuild / scalaVersion := scala212 diff --git a/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt b/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt index b79ed67a7..315d77d22 100644 --- a/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt +++ b/sbt-app/src/sbt-test/actions/doc-file-options/build.sbt @@ -2,7 +2,7 @@ val newContents = "bbbbbbbbb" val rootContentFile = "root.txt" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/actions/doc/build.sbt b/sbt-app/src/sbt-test/actions/doc/build.sbt index fbf26e66f..c74f66a3e 100644 --- a/sbt-app/src/sbt-test/actions/doc/build.sbt +++ b/sbt-app/src/sbt-test/actions/doc/build.sbt @@ -5,8 +5,8 @@ import Parsers._ lazy val root = (project in file(".")) .settings( crossPaths := false, - crossScalaVersions := Seq("2.12.18", "2.13.12"), - scalaVersion := "2.12.18", + crossScalaVersions := Seq("2.12.19", "2.13.12"), + scalaVersion := "2.12.19", Compile / doc / scalacOptions += "-Xfatal-warnings", commands += Command.command("excludeB") { s => val impl = """val src = (sources in Compile).value; src.filterNot(_.getName.contains("B"))""" diff --git a/sbt-app/src/sbt-test/actions/generator/build.sbt b/sbt-app/src/sbt-test/actions/generator/build.sbt index af23bebf7..3fdd6bf4f 100644 --- a/sbt-app/src/sbt-test/actions/generator/build.sbt +++ b/sbt-app/src/sbt-test/actions/generator/build.sbt @@ -1,6 +1,6 @@ val buildInfo = taskKey[Seq[File]]("generates the build info") -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/actions/multi-command/build.sbt b/sbt-app/src/sbt-test/actions/multi-command/build.sbt index 08909f558..6853cdcfa 100644 --- a/sbt-app/src/sbt-test/actions/multi-command/build.sbt +++ b/sbt-app/src/sbt-test/actions/multi-command/build.sbt @@ -19,4 +19,4 @@ val dynamicTask = taskKey[Unit]("dynamic input task") dynamicTask := { println("not yet et") } -crossScalaVersions := "2.11.12" :: "2.12.18" :: Nil +crossScalaVersions := "2.11.12" :: "2.12.19" :: Nil diff --git a/sbt-app/src/sbt-test/actions/multi-command/test b/sbt-app/src/sbt-test/actions/multi-command/test index dc657b553..455953b6a 100644 --- a/sbt-app/src/sbt-test/actions/multi-command/test +++ b/sbt-app/src/sbt-test/actions/multi-command/test @@ -37,4 +37,4 @@ > ++ 2.11.12 compile; setStringValue bar; checkStringValue bar -> ++2.12.18 compile; setStringValue foo; checkStringValue foo +> ++2.12.19 compile; setStringValue foo; checkStringValue foo diff --git a/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt b/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt index dbecc17a2..b238d3d93 100644 --- a/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt +++ b/sbt-app/src/sbt-test/actions/package-delete-target/build.sbt @@ -1,5 +1,5 @@ lazy val root = (project in file(".")) .settings( name := "delete-target", - scalaVersion := "2.12.18" + scalaVersion := "2.12.19" ) diff --git a/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt b/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt index 501054f78..fa9f2fbd7 100644 --- a/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt +++ b/sbt-app/src/sbt-test/actions/remote-cache-semanticdb/build.sbt @@ -1,6 +1,6 @@ name := "my-project" -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" semanticdbIncludeInJar := true diff --git a/sbt-app/src/sbt-test/actions/remote-cache/build.sbt b/sbt-app/src/sbt-test/actions/remote-cache/build.sbt index e4e2c175b..2fdefcafc 100644 --- a/sbt-app/src/sbt-test/actions/remote-cache/build.sbt +++ b/sbt-app/src/sbt-test/actions/remote-cache/build.sbt @@ -8,7 +8,7 @@ lazy val CustomArtifact = config("custom-artifact") val recordPreviousIterations = taskKey[Unit]("Record previous iterations.") val checkIterations = inputKey[Unit]("Verifies the accumulated number of iterations of incremental compilation.") -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / pushRemoteCacheTo := Some( MavenCache("local-cache", (ThisBuild / baseDirectory).value / "r") ) diff --git a/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt b/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt index 7ddb5c706..b89e34a3f 100644 --- a/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/akka-actor-system/build.sbt @@ -2,7 +2,7 @@ ThisBuild / turbo := true val akkaTest = (project in file(".")).settings( name := "akka-test", - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.5.16", "com.lihaoyi" %% "utest" % "0.6.6" % "test" 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 7015d24ed..c4c6ce999 100644 --- a/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/jni/build.sbt @@ -13,7 +13,7 @@ def wrap(task: InputKey[Unit]): Def.Initialize[Task[Unit]] = ThisBuild / turbo := true val root = (project in file(".")).settings( - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-h", sourceDirectory.value.toPath.resolve("main/native/include").toString), libraryDependencies += "com.lihaoyi" %% "utest" % "0.6.6" % "test", diff --git a/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt b/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt index 4c0050eb4..dec40d399 100644 --- a/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/library-mismatch/build.sbt @@ -2,7 +2,7 @@ ThisBuild / turbo := true val snapshot = (project in file(".")).settings( name := "mismatched-libraries", - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", libraryDependencies ++= Seq("com.lihaoyi" %% "utest" % "0.6.6" % "test"), testFrameworks := Seq(TestFramework("utest.runner.Framework")), resolvers += "Local Maven" at file("libraries/ivy").toURI.toURL.toString, diff --git a/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt b/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt index 8410b25ed..d029cd576 100644 --- a/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/runtime-layers/build.sbt @@ -1,6 +1,6 @@ val layeringStrategyTest = (project in file(".")).settings( name := "layering-strategy-test", - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", organization := "sbt", libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.5.16", ) 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 d0b5cdfeb..2cd09fae6 100644 --- a/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/snapshot/build.sbt @@ -9,7 +9,7 @@ ThisBuild / useCoursier := false val snapshot = (project in file(".")).settings( name := "akka-test", - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", libraryDependencies ++= Seq( "com.lihaoyi" %% "utest" % "0.6.6" % "test" ), diff --git a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom index 39146c260..233c03dbe 100644 --- a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom +++ b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-1/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom @@ -14,7 +14,7 @@ org.scala-lang scala-library - 2.12.18 + 2.12.19 diff --git a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom index 39146c260..233c03dbe 100644 --- a/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom +++ b/sbt-app/src/sbt-test/classloader-cache/snapshot/libraries/library-2/ivy/sbt/foo-lib_2.12/0.1.0-SNAPSHOT/foo-lib_2.12-0.1.0-SNAPSHOT.pom @@ -14,7 +14,7 @@ org.scala-lang scala-library - 2.12.18 + 2.12.19 diff --git a/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt b/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt index 88af78b3c..43b6315d5 100644 --- a/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/spark/build.sbt @@ -2,7 +2,7 @@ name := "Simple Project" version := "1.0" -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.3" diff --git a/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt b/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt index 6762ba858..e504b97a7 100644 --- a/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt +++ b/sbt-app/src/sbt-test/classloader-cache/utest/build.sbt @@ -2,7 +2,7 @@ ThisBuild / turbo := true val utestTest = (project in file(".")).settings( name := "utest-test", - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", libraryDependencies ++= Seq( "com.lihaoyi" %% "utest" % "0.6.6" % "test" ), diff --git a/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt b/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt index fbf51533b..ba36bc767 100644 --- a/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/error-in-invalidated/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")). settings( diff --git a/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt b/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt index 0290928bc..f6c50838c 100644 --- a/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/macro-config/build.sbt @@ -5,7 +5,7 @@ val Macro = config("macro").hide.extend(Compile) lazy val root = (project in file(".")) .settings( - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", // Adds a "macro" configuration for macro dependencies. ivyConfigurations.value += Macro, diff --git a/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt b/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt index 78c29bca5..b13d3908c 100644 --- a/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/run-test/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies ++= Seq( "com.novocode" % "junit-interface" % "0.5" % Test, diff --git a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt index 33657a7c4..5b50dc390 100644 --- a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt +++ b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/build.sbt @@ -1,4 +1,4 @@ -lazy val scala212 = "2.12.18" +lazy val scala212 = "2.12.19" lazy val scala213 = "2.13.12" ThisBuild / scalaVersion := scala212 diff --git a/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt b/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt index 2405c81d5..8f5047976 100644 --- a/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt +++ b/sbt-app/src/sbt-test/console/project-compiler-bridge/project/build.sbt @@ -1 +1 @@ -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" diff --git a/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt b/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt index a53e16511..29548c20e 100644 --- a/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/cachedResolution/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.28" updateOptions := updateOptions.value.withCachedResolution(true) diff --git a/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt b/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt index 3fce90791..bc11b4a40 100644 --- a/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/ignoreScalaLibrary/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies ++= Seq( "org.slf4j" % "slf4j-api" % "1.7.2", diff --git a/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt b/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt index 693894d50..cfb295484 100644 --- a/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt +++ b/sbt-app/src/sbt-test/dependency-graph/toFileSubTask/build.sbt @@ -1,5 +1,5 @@ // ThisBuild / useCoursier := false -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / organization := "org.example" ThisBuild / version := "0.1" diff --git a/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt b/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt index a2be213fe..c4493475e 100644 --- a/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt @@ -6,7 +6,7 @@ lazy val check = taskKey[Unit]("") lazy val checkArtifact = taskKey[Unit]("") ThisBuild / useCoursier := false -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / version := "0.1.0-SNAPSHOT" ThisBuild / organization := "com.example" ThisBuild / organizationName := "example" diff --git a/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt index 910baa6b0..2caee109a 100644 --- a/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cache-classifiers/multi.sbt @@ -1,6 +1,6 @@ import xsbti.AppConfiguration -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" // TTL of Coursier is 24h ThisBuild / useCoursier := false diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt index 8c978bd97..b6d099632 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt @@ -3,7 +3,7 @@ lazy val check = taskKey[Unit]("Runs the check") val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val junit = "junit" % "junit" % "4.13.1" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" def commonSettings: Seq[Def.Setting[_]] = diff --git a/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt b/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt index ef4e1834c..59aad4118 100644 --- a/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/compiler-bridge-binary/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val check = taskKey[Unit]("") diff --git a/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt b/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt index fed0b72ff..436ed6e36 100644 --- a/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/conflict-coursier/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies ++= List( "org.webjars.npm" % "randomatic" % "1.1.7", "org.webjars.npm" % "is-odd" % "2.0.0", diff --git a/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt b/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt index df57eb164..00bb5f7d5 100644 --- a/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/ext-pom-classifier/build.sbt @@ -2,6 +2,6 @@ ThisBuild / useCoursier := false lazy val root = (project in file(".")) .settings( - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", externalPom() ) diff --git a/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt b/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt index 2405c81d5..8f5047976 100644 --- a/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/global-plugins/build.sbt @@ -1 +1 @@ -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" diff --git a/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt b/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt index 607bbacc1..5b887b7d6 100644 --- a/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/snapshot-local/build.sbt @@ -1,5 +1,5 @@ ThisBuild / organization := "com.example" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" def customIvyPaths: Seq[Def.Setting[_]] = Seq( diff --git a/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt b/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt index 4b9b31945..4373ff66d 100644 --- a/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/snapshot-resolution/build.sbt @@ -1,5 +1,5 @@ ThisBuild / organization := "com.example" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" // TTL is 24h so we can't detect the change ThisBuild / useCoursier := false diff --git a/sbt-app/src/sbt-test/java/cross/build.sbt b/sbt-app/src/sbt-test/java/cross/build.sbt index 2631bc446..b5f39d15e 100644 --- a/sbt-app/src/sbt-test/java/cross/build.sbt +++ b/sbt-app/src/sbt-test/java/cross/build.sbt @@ -4,7 +4,7 @@ val check = inputKey[Unit]("Runs the check") lazy val root = (project in file(".")) .settings( - ThisBuild / scalaVersion := "2.12.18", + ThisBuild / scalaVersion := "2.12.19", crossJavaVersions := List("1.8"), // read out.txt and see if it starts with the passed in number diff --git a/sbt-app/src/sbt-test/java/cross/changes/build.sbt b/sbt-app/src/sbt-test/java/cross/changes/build.sbt index 5aa7b90f0..9facfdb8d 100644 --- a/sbt-app/src/sbt-test/java/cross/changes/build.sbt +++ b/sbt-app/src/sbt-test/java/cross/changes/build.sbt @@ -4,7 +4,7 @@ val check = inputKey[Unit]("Runs the check") lazy val root = (project in file(".")) .settings( - ThisBuild / scalaVersion := "2.12.18", + ThisBuild / scalaVersion := "2.12.19", crossJavaVersions := List("1.8", "10"), // read out.txt and see if it starts with the passed in number diff --git a/sbt-app/src/sbt-test/plugins/hydra/build.sbt b/sbt-app/src/sbt-test/plugins/hydra/build.sbt index 4fbd558b6..efc3b0a27 100644 --- a/sbt-app/src/sbt-test/plugins/hydra/build.sbt +++ b/sbt-app/src/sbt-test/plugins/hydra/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val check = taskKey[Unit]("") diff --git a/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt b/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt index 6203106e2..202a48a91 100644 --- a/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt +++ b/sbt-app/src/sbt-test/plugins/sbt-native-packager/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" name := "hello" enablePlugins(JavaAppPackaging) diff --git a/sbt-app/src/sbt-test/plugins/unidoc/build.sbt b/sbt-app/src/sbt-test/plugins/unidoc/build.sbt index 6ce0853aa..2abb1992d 100644 --- a/sbt-app/src/sbt-test/plugins/unidoc/build.sbt +++ b/sbt-app/src/sbt-test/plugins/unidoc/build.sbt @@ -1,4 +1,4 @@ -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" scalacOptions += "-Xfatal-warnings" // required for the test enablePlugins(ScalaUnidocPlugin) diff --git a/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt b/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt index be91e40d7..b12345076 100644 --- a/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt +++ b/sbt-app/src/sbt-test/project/aggregate/projA/build.sbt @@ -1,3 +1,3 @@ name := "projA" -scalaVersion := "2.12.18" +scalaVersion := "2.12.19" diff --git a/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt b/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt index 7f712f97e..9ea6db60d 100644 --- a/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt +++ b/sbt-app/src/sbt-test/project/cross-plugins-defaults/build.sbt @@ -1,7 +1,7 @@ val baseSbt = "1." -val buildCrossList = List("2.10.7", "2.11.12", "2.12.18") -scalaVersion in ThisBuild := "2.12.18" +val buildCrossList = List("2.10.7", "2.11.12", "2.12.19") +scalaVersion in ThisBuild := "2.12.19" crossScalaVersions in ThisBuild := buildCrossList addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.7.0") diff --git a/sbt-app/src/sbt-test/project/flatten/build.sbt b/sbt-app/src/sbt-test/project/flatten/build.sbt index 96b4f560b..8f8e73e64 100644 --- a/sbt-app/src/sbt-test/project/flatten/build.sbt +++ b/sbt-app/src/sbt-test/project/flatten/build.sbt @@ -1,6 +1,6 @@ val unpackage = TaskKey[Unit]("unpackage") -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/project/internal-tracking/build.sbt b/sbt-app/src/sbt-test/project/internal-tracking/build.sbt index bbc127ca0..711d9f88a 100644 --- a/sbt-app/src/sbt-test/project/internal-tracking/build.sbt +++ b/sbt-app/src/sbt-test/project/internal-tracking/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / trackInternalDependencies := TrackLevel.NoTracking lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt b/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt index fead2a619..681686b5a 100644 --- a/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt +++ b/sbt-app/src/sbt-test/project/sbt-plugin/build.sbt @@ -1,6 +1,6 @@ lazy val root = project.in(file(".")) .enablePlugins(SbtPlugin) .settings( - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", scalacOptions ++= Seq("-Xfatal-warnings", "-Xlint") ) diff --git a/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt index 242db6841..7b654c196 100644 --- a/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt +++ b/sbt-app/src/sbt-test/project/sbt-plugin/changes/oldSbtPlugin.sbt @@ -1,6 +1,6 @@ lazy val root = project.in(file(".")) .settings( - scalaVersion := "2.12.18", + scalaVersion := "2.12.19", sbtPlugin := true, scalacOptions ++= Seq("-Xfatal-warnings", "-Xlint") ) diff --git a/sbt-app/src/sbt-test/project/semanticdb/build.sbt b/sbt-app/src/sbt-test/project/semanticdb/build.sbt index c15dbbb6d..fcc03b2ec 100644 --- a/sbt-app/src/sbt-test/project/semanticdb/build.sbt +++ b/sbt-app/src/sbt-test/project/semanticdb/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / semanticdbEnabled := true ThisBuild / semanticdbIncludeInJar := true diff --git a/sbt-app/src/sbt-test/project/unified/build.sbt b/sbt-app/src/sbt-test/project/unified/build.sbt index c4a398274..18ae6cfce 100644 --- a/sbt-app/src/sbt-test/project/unified/build.sbt +++ b/sbt-app/src/sbt-test/project/unified/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" import sbt.internal.CommandStrings.{ inspectBrief, inspectDetailed } import sbt.internal.Inspect diff --git a/sbt-app/src/sbt-test/run/fork-loader/build.sbt b/sbt-app/src/sbt-test/run/fork-loader/build.sbt index 82d20437e..c5b8530f1 100644 --- a/sbt-app/src/sbt-test/run/fork-loader/build.sbt +++ b/sbt-app/src/sbt-test/run/fork-loader/build.sbt @@ -1,6 +1,6 @@ val scalcheck = "org.scalacheck" %% "scalacheck" % "1.14.0" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt b/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt index 61b35df9c..4dc26da4a 100644 --- a/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/binary/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val dep = project diff --git a/sbt-app/src/sbt-test/source-dependencies/constants/test b/sbt-app/src/sbt-test/source-dependencies/constants/test index f3da8143a..ff8815d85 100644 --- a/sbt-app/src/sbt-test/source-dependencies/constants/test +++ b/sbt-app/src/sbt-test/source-dependencies/constants/test @@ -1,4 +1,4 @@ -> ++2.12.18! +> ++2.12.19! $ copy-file changes/B.scala B.scala diff --git a/sbt-app/src/sbt-test/source-dependencies/cross-source/test b/sbt-app/src/sbt-test/source-dependencies/cross-source/test index b491e62d3..53348a66c 100644 --- a/sbt-app/src/sbt-test/source-dependencies/cross-source/test +++ b/sbt-app/src/sbt-test/source-dependencies/cross-source/test @@ -1,3 +1,3 @@ # A.scala needs B.scala, it would be in source list -> ++2.12.18! +> ++2.12.19! > compile diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt index a3c6c66d8..42ffe9799 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-annotation/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val paradiseVersion = "2.1.1" val commonSettings = Seq( diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt index da3c591b8..4e0809123 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-nested/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt index da3c591b8..4e0809123 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep-stackoverflow/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt index da3c591b8..4e0809123 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro-arg-dep/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt b/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt index da3c591b8..4e0809123 100644 --- a/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/macro/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val defaultSettings = Seq( libraryDependencies += scalaVersion("org.scala-lang" % "scala-reflect" % _ ).value diff --git a/sbt-app/src/sbt-test/tests/arguments/build.sbt b/sbt-app/src/sbt-test/tests/arguments/build.sbt index c7cce3910..83d73ec79 100644 --- a/sbt-app/src/sbt-test/tests/arguments/build.sbt +++ b/sbt-app/src/sbt-test/tests/arguments/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val foo = settingKey[Seq[String]]("foo") val checkFoo = inputKey[Unit]("check contents of foo") diff --git a/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt b/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt index 967047a91..59179e413 100644 --- a/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt +++ b/sbt-app/src/sbt-test/tests/do-not-discover/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/done/build.sbt b/sbt-app/src/sbt-test/tests/done/build.sbt index 967047a91..59179e413 100644 --- a/sbt-app/src/sbt-test/tests/done/build.sbt +++ b/sbt-app/src/sbt-test/tests/done/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/filter-runners/build.sbt b/sbt-app/src/sbt-test/tests/filter-runners/build.sbt index f9efce690..bc17f844d 100644 --- a/sbt-app/src/sbt-test/tests/filter-runners/build.sbt +++ b/sbt-app/src/sbt-test/tests/filter-runners/build.sbt @@ -1,7 +1,7 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.2.2" val munit = "org.scalameta" %% "munit" % "0.7.22" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += scalatest % Test libraryDependencies += munit % Test diff --git a/sbt-app/src/sbt-test/tests/fork-async/build.sbt b/sbt-app/src/sbt-test/tests/fork-async/build.sbt index b761ffb50..1f765fdb1 100644 --- a/sbt-app/src/sbt-test/tests/fork-async/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-async/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt b/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt index 55d88c1a2..f6f82d54a 100644 --- a/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-parallel/build.sbt @@ -1,7 +1,7 @@ import Tests._ import Defaults._ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val check = taskKey[Unit]("Check that tests are executed in parallel") lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt b/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt index c148dc813..059a130a2 100644 --- a/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-test-group-parallel-custom-tags/build.sbt @@ -1,5 +1,5 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val TestATypeTag = Tags.Tag("TestA") val TestBTypeTag = Tags.Tag("TestB") diff --git a/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt b/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt index 4ff639b35..a6b2aaf9d 100644 --- a/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-test-group-parallel/build.sbt @@ -1,5 +1,5 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" Global / concurrentRestrictions := Seq(Tags.limitAll(4)) libraryDependencies += specs % Test diff --git a/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt b/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt index 50ccf8d4b..60ad26140 100644 --- a/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork-uncaught2/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += "org.scala-sbt" % "test-interface" % "1.0" diff --git a/sbt-app/src/sbt-test/tests/fork/build.sbt b/sbt-app/src/sbt-test/tests/fork/build.sbt index 8cef6ee26..8722b742d 100644 --- a/sbt-app/src/sbt-test/tests/fork/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork/build.sbt @@ -11,7 +11,7 @@ val scalaxml = "org.scala-lang.modules" %% "scala-xml" % "1.1.1" def groupId(idx: Int) = "group_" + (idx + 1) def groupPrefix(idx: Int) = groupId(idx) + "_file_" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / organization := "org.example" lazy val root = (project in file(".")) diff --git a/sbt-app/src/sbt-test/tests/fork2/build.sbt b/sbt-app/src/sbt-test/tests/fork2/build.sbt index 11a9108de..6c272bbde 100644 --- a/sbt-app/src/sbt-test/tests/fork2/build.sbt +++ b/sbt-app/src/sbt-test/tests/fork2/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" fork := true libraryDependencies += scalatest % Test diff --git a/sbt-app/src/sbt-test/tests/it/build.sbt b/sbt-app/src/sbt-test/tests/it/build.sbt index 283ac3132..f784e70a1 100644 --- a/sbt-app/src/sbt-test/tests/it/build.sbt +++ b/sbt-app/src/sbt-test/tests/it/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" val specs = "org.specs2" %% "specs2-core" % "4.3.4" diff --git a/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt b/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt index 378c6fe97..5da856697 100644 --- a/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt +++ b/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt @@ -14,7 +14,7 @@ val nestedSuitesReportFile = "target/test-reports/TEST-my.scalatest.MyNestedSuit val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val junitinterface = "com.novocode" % "junit-interface" % "0.11" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")). settings( diff --git a/sbt-app/src/sbt-test/tests/munit/build.sbt b/sbt-app/src/sbt-test/tests/munit/build.sbt index e002165e6..bc719880c 100644 --- a/sbt-app/src/sbt-test/tests/munit/build.sbt +++ b/sbt-app/src/sbt-test/tests/munit/build.sbt @@ -1,4 +1,4 @@ -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val munit = "org.scalameta" %% "munit" % "0.7.22" diff --git a/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt b/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt index d4bbf800f..5cbfb735e 100644 --- a/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-inproc-par/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt b/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt index e7c35f471..a03155c8a 100644 --- a/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-inproc-seq/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt b/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt index 514bb7f05..7b8de3010 100644 --- a/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-subproc/build.sbt @@ -1,7 +1,7 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val scalaxml = "org.scala-lang.modules" %% "scala-xml" % "1.1.1" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/nested-tests/build.sbt b/sbt-app/src/sbt-test/tests/nested-tests/build.sbt index 65eb9b874..6ae21f33f 100644 --- a/sbt-app/src/sbt-test/tests/nested-tests/build.sbt +++ b/sbt-app/src/sbt-test/tests/nested-tests/build.sbt @@ -1,6 +1,6 @@ val scalcheck = "org.scalacheck" %% "scalacheck" % "1.14.0" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / version := "0.0.1" ThisBuild / organization := "org.catastrophe" diff --git a/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt b/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt index c4bc7adca..3fa69b6cf 100644 --- a/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt +++ b/sbt-app/src/sbt-test/tests/one-class-multi-framework/build.sbt @@ -1,5 +1,5 @@ val specsJunit = "org.specs2" %% "specs2-junit" % "4.3.4" val junitinterface = "com.novocode" % "junit-interface" % "0.11" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += junitinterface % Test libraryDependencies += specsJunit % Test diff --git a/sbt-app/src/sbt-test/tests/order/build.sbt b/sbt-app/src/sbt-test/tests/order/build.sbt index 2dcb57b05..fefa56d8e 100644 --- a/sbt-app/src/sbt-test/tests/order/build.sbt +++ b/sbt-app/src/sbt-test/tests/order/build.sbt @@ -1,5 +1,5 @@ val scalcheck = "org.scalacheck" %% "scalacheck" % "1.14.0" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" Test / parallelExecution := false libraryDependencies += scalcheck % Test diff --git a/sbt-app/src/sbt-test/tests/resources/build.sbt b/sbt-app/src/sbt-test/tests/resources/build.sbt index e4c5dd616..e6997605a 100644 --- a/sbt-app/src/sbt-test/tests/resources/build.sbt +++ b/sbt-app/src/sbt-test/tests/resources/build.sbt @@ -1,3 +1,3 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += specs % Test diff --git a/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt b/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt index 8080681ba..44c188f44 100644 --- a/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt +++ b/sbt-app/src/sbt-test/tests/scala-instance-classloader/build.sbt @@ -3,7 +3,7 @@ import sbt.internal.inc.ScalaInstance lazy val OtherScala = config("other-scala").hide lazy val junitinterface = "com.novocode" % "junit-interface" % "0.11" lazy val akkaActor = "com.typesafe.akka" %% "akka-actor" % "2.5.17" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .configs(OtherScala) diff --git a/sbt-app/src/sbt-test/tests/serial/build.sbt b/sbt-app/src/sbt-test/tests/serial/build.sbt index a5a0baf71..effd2fa66 100644 --- a/sbt-app/src/sbt-test/tests/serial/build.sbt +++ b/sbt-app/src/sbt-test/tests/serial/build.sbt @@ -1,6 +1,6 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" ThisBuild / organization := "com.example" ThisBuild / version := "0.0.1-SNAPSHOT" diff --git a/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt b/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt index 69a28f048..ea0abf0e5 100644 --- a/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt +++ b/sbt-app/src/sbt-test/tests/setup-cleanup/base.sbt @@ -1,3 +1,3 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += scalatest diff --git a/sbt-app/src/sbt-test/tests/single-runner/build.sbt b/sbt-app/src/sbt-test/tests/single-runner/build.sbt index bc028ed12..69ff2b711 100644 --- a/sbt-app/src/sbt-test/tests/single-runner/build.sbt +++ b/sbt-app/src/sbt-test/tests/single-runner/build.sbt @@ -1,4 +1,4 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += scalatest Test / testOptions += Tests.Argument("-C", "custom.CustomReporter") diff --git a/sbt-app/src/sbt-test/tests/specs-run/build.sbt b/sbt-app/src/sbt-test/tests/specs-run/build.sbt index ddc7a9055..7b2f632b6 100644 --- a/sbt-app/src/sbt-test/tests/specs-run/build.sbt +++ b/sbt-app/src/sbt-test/tests/specs-run/build.sbt @@ -1,4 +1,4 @@ val specs = "org.specs2" %% "specs2-core" % "4.3.4" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += specs % Test diff --git a/sbt-app/src/sbt-test/tests/t543/build.sbt b/sbt-app/src/sbt-test/tests/t543/build.sbt index 3ed2bb943..3f885106a 100644 --- a/sbt-app/src/sbt-test/tests/t543/build.sbt +++ b/sbt-app/src/sbt-test/tests/t543/build.sbt @@ -7,7 +7,7 @@ val check = TaskKey[Unit]("check", "Check correct error has been returned.") val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val scalaxml = "org.scala-lang.modules" %% "scala-xml" % "1.1.1" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")). settings( diff --git a/sbt-app/src/sbt-test/tests/task/build.sbt b/sbt-app/src/sbt-test/tests/task/build.sbt index bc028ed12..69ff2b711 100644 --- a/sbt-app/src/sbt-test/tests/task/build.sbt +++ b/sbt-app/src/sbt-test/tests/task/build.sbt @@ -1,4 +1,4 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" libraryDependencies += scalatest Test / testOptions += Tests.Argument("-C", "custom.CustomReporter") diff --git a/sbt-app/src/sbt-test/tests/test-exclude/build.sbt b/sbt-app/src/sbt-test/tests/test-exclude/build.sbt index d4d182588..c05ef3c0d 100644 --- a/sbt-app/src/sbt-test/tests/test-exclude/build.sbt +++ b/sbt-app/src/sbt-test/tests/test-exclude/build.sbt @@ -1,5 +1,5 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/tests/test-quick/build.sbt b/sbt-app/src/sbt-test/tests/test-quick/build.sbt index d4d182588..c05ef3c0d 100644 --- a/sbt-app/src/sbt-test/tests/test-quick/build.sbt +++ b/sbt-app/src/sbt-test/tests/test-quick/build.sbt @@ -1,5 +1,5 @@ val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" lazy val root = (project in file(".")) .settings( diff --git a/sbt-app/src/sbt-test/watch/commands/build.sbt b/sbt-app/src/sbt-test/watch/commands/build.sbt index 662c5cc9a..b197a0395 100644 --- a/sbt-app/src/sbt-test/watch/commands/build.sbt +++ b/sbt-app/src/sbt-test/watch/commands/build.sbt @@ -53,4 +53,4 @@ expectFailure / watchOnFileInputEvent := { (_, e) => } -crossScalaVersions := Seq("2.11.12", "2.12.18") +crossScalaVersions := Seq("2.11.12", "2.12.19") diff --git a/server-test/src/server-test/response/build.sbt b/server-test/src/server-test/response/build.sbt index 8db1f47e6..f3a2fac46 100644 --- a/server-test/src/server-test/response/build.sbt +++ b/server-test/src/server-test/response/build.sbt @@ -1,6 +1,6 @@ import sbt.internal.server.{ ServerHandler, ServerIntent } -ThisBuild / scalaVersion := "2.12.18" +ThisBuild / scalaVersion := "2.12.19" Global / serverLog / logLevel := Level.Debug // custom handler From f804c284179de02f236150ecd78363c48837e292 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 8 Apr 2024 23:07:57 -0400 Subject: [PATCH 184/207] Zinc 1.10.0-RC1 --- project/Dependencies.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 42f0522af..6c3c2939f 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,10 +12,10 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.9.7") + private val ioVersion = nightlyVersion.getOrElse("1.9.9") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.9.3") - val zincVersion = nightlyVersion.getOrElse("1.10.0-M3") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.10.0-RC1") + val zincVersion = nightlyVersion.getOrElse("1.10.0-RC1") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From f89505bb03d353a2623ec390c8278f0e66c60bdd Mon Sep 17 00:00:00 2001 From: Philippus Baalman Date: Thu, 11 Apr 2024 07:21:26 +0200 Subject: [PATCH 185/207] Remove superfluous space --- main/src/main/scala/sbt/Defaults.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 133e46434..360dbad40 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1653,7 +1653,7 @@ object Defaults extends BuildCommon { + "These issues, along with others that were not enumerated above, may be" + " resolved by changing the class loader layering strategy.\n" + "The Flat and ScalaLibrary strategies bundle the full project classpath in" - + " the same class loader.\nTo use one of these strategies, set the " + + " the same class loader.\nTo use one of these strategies, set the" + " ClassLoaderLayeringStrategy key\nin your configuration, for example:\n\n" + s"set ${projectId}Test / classLoaderLayeringStrategy :=" + " ClassLoaderLayeringStrategy.ScalaLibrary\n" From b19a54a1ef9a23de688742240009939ac6b19c94 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 14 Apr 2024 21:17:05 -0400 Subject: [PATCH 186/207] Improve the SIP-51 error message --- main/src/main/scala/sbt/Defaults.scala | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 360dbad40..ab7e52261 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1180,11 +1180,16 @@ object Defaults extends BuildCommon { } { for (lib <- compileReport.modules.find(_.module.name == libName)) { val libVer = lib.module.revision + val n = name.value if (VersionNumber(sv).matchesSemVer(SemanticSelector(s"<$libVer"))) sys.error( - s"""`${name.value}/scalaVersion` needs to be upgraded to $libVer. To support backwards-only - |binary compatibility (SIP-51), the Scala compiler cannot be older than $libName on the - |dependency classpath. See `${name.value}/evicted` why $libName was upgraded from $sv to $libVer. + s"""expected `$n/scalaVersion` to be "$libVer" or later, + |but found "$sv"; upgrade scalaVerion to fix the build. + | + |to support backwards-only binary compatibility (SIP-51), + |the Scala 2.13 compiler cannot be older than $libName on the + |dependency classpath. + |see `$n/evicted` to know why $libName $libVer is getting pulled in. |""".stripMargin ) } From b1a43f9adc940db0991eaf5c38fe46e9d2661f7c Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 10 Apr 2024 02:33:45 -0400 Subject: [PATCH 187/207] Consistent Analysis See also https://github.com/sbt/zinc/pull/1326 This adds a new setting `enableConsistentCompileAnalysis`, which enables the new "Consistent" Analysis format, which is faster and more repeatable than the status quo. This is initialized to `true` by default. It can be opted out either by the setting or using `-Dsbt.analysis2024=false`. --- main/src/main/scala/sbt/Defaults.scala | 57 ++++++++++++------- main/src/main/scala/sbt/Keys.scala | 3 +- .../scala/sbt/internal/AnalysisUtil.scala | 40 +++++++++++++ .../src/main/scala/sbt/internal/SysProp.scala | 2 + .../sbt/internal/server/Definition.scala | 40 ++++++++----- .../sbt/internal/server/DefinitionTest.scala | 21 ++++--- project/Dependencies.scala | 2 +- .../export-jars/changes/B.scala | 7 +-- .../source-dependencies/export-jars/test | 8 +++ .../source-dependencies/implicit-search/test | 2 + .../source-dependencies/linearization/test | 2 + 11 files changed, 133 insertions(+), 51 deletions(-) create mode 100644 main/src/main/scala/sbt/internal/AnalysisUtil.scala diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index ab7e52261..c1f1723dc 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -100,13 +100,7 @@ import scala.xml.NodeSeq // incremental compiler import sbt.SlashSyntax0._ -import sbt.internal.inc.{ - Analysis, - AnalyzingCompiler, - ManagedLoggedReporter, - MixedAnalyzingCompiler, - ScalaInstance -} +import sbt.internal.inc.{ Analysis, AnalyzingCompiler, ManagedLoggedReporter, ScalaInstance } import xsbti.{ CrossValue, VirtualFile, VirtualFileRef } import xsbti.compile.{ AnalysisContents, @@ -875,7 +869,12 @@ object Defaults extends BuildCommon { } def defaultCompileSettings: Seq[Setting[_]] = - globalDefaults(enableBinaryCompileAnalysis := true) + globalDefaults( + Seq( + enableBinaryCompileAnalysis :== true, + enableConsistentCompileAnalysis :== SysProp.analysis2024, + ) + ) lazy val configTasks: Seq[Setting[_]] = docTaskSettings(doc) ++ inTask(compile)(compileInputsSettings) ++ @@ -2299,13 +2298,15 @@ object Defaults extends BuildCommon { */ private[sbt] def compileScalaBackendTask: Initialize[Task[CompileResult]] = Def.task { val setup: Setup = compileIncSetup.value - val useBinary: Boolean = enableBinaryCompileAnalysis.value val analysisResult: CompileResult = compileIncremental.value val exportP = exportPipelining.value // Save analysis midway if pipelining is enabled if (analysisResult.hasModified && exportP) { - val store = - MixedAnalyzingCompiler.staticCachedStore(setup.cacheFile.toPath, !useBinary) + val store = AnalysisUtil.staticCachedStore( + analysisFile = setup.cacheFile.toPath, + useTextAnalysis = !enableBinaryCompileAnalysis.value, + useConsistent = enableConsistentCompileAnalysis.value, + ) val contents = AnalysisContents.create(analysisResult.analysis(), analysisResult.setup()) store.set(contents) // this stores the eary analysis (again) in case the subproject contains a macro @@ -2325,9 +2326,11 @@ object Defaults extends BuildCommon { .debug(s"${name.value}: compileEarly: blocking on earlyOutputPing") earlyOutputPing.await.value }) { - val useBinary: Boolean = enableBinaryCompileAnalysis.value - val store = - MixedAnalyzingCompiler.staticCachedStore(earlyCompileAnalysisFile.value.toPath, !useBinary) + val store = AnalysisUtil.staticCachedStore( + analysisFile = earlyCompileAnalysisFile.value.toPath, + useTextAnalysis = !enableBinaryCompileAnalysis.value, + useConsistent = enableConsistentCompileAnalysis.value, + ) store.get.toOption match { case Some(contents) => contents.getAnalysis case _ => Analysis.empty @@ -2338,13 +2341,15 @@ object Defaults extends BuildCommon { } def compileTask: Initialize[Task[CompileAnalysis]] = Def.task { val setup: Setup = compileIncSetup.value - val useBinary: Boolean = enableBinaryCompileAnalysis.value val c = fileConverter.value // TODO - expose bytecode manipulation phase. val analysisResult: CompileResult = manipulateBytecode.value if (analysisResult.hasModified) { - val store = - MixedAnalyzingCompiler.staticCachedStore(setup.cacheFile.toPath, !useBinary) + val store = AnalysisUtil.staticCachedStore( + analysisFile = setup.cacheFile.toPath, + useTextAnalysis = !enableBinaryCompileAnalysis.value, + useConsistent = enableConsistentCompileAnalysis.value, + ) val contents = AnalysisContents.create(analysisResult.analysis(), analysisResult.setup()) store.set(contents) } @@ -2444,11 +2449,16 @@ object Defaults extends BuildCommon { cachedPerEntryDefinesClassLookup(classpathEntry) } val extra = extraIncOptions.value.map(t2) - val useBinary: Boolean = enableBinaryCompileAnalysis.value val eapath = earlyCompileAnalysisFile.value.toPath val eaOpt = - if (exportPipelining.value) Some(MixedAnalyzingCompiler.staticCachedStore(eapath, !useBinary)) - else None + if (exportPipelining.value) { + val store = AnalysisUtil.staticCachedStore( + analysisFile = eapath, + useTextAnalysis = !enableBinaryCompileAnalysis.value, + useConsistent = enableConsistentCompileAnalysis.value, + ) + Some(store) + } else None Setup.of( lookup, (compile / skip).value, @@ -2538,8 +2548,11 @@ object Defaults extends BuildCommon { def compileAnalysisSettings: Seq[Setting[_]] = Seq( previousCompile := { val setup = compileIncSetup.value - val useBinary: Boolean = enableBinaryCompileAnalysis.value - val store = MixedAnalyzingCompiler.staticCachedStore(setup.cacheFile.toPath, !useBinary) + val store = AnalysisUtil.staticCachedStore( + analysisFile = setup.cacheFile.toPath, + useTextAnalysis = !enableBinaryCompileAnalysis.value, + useConsistent = enableConsistentCompileAnalysis.value, + ) val prev = store.get().toOption match { case Some(contents) => val analysis = Option(contents.getAnalysis).toOptional diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 69073fc16..284d9f472 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -206,7 +206,8 @@ object Keys { val scalaCompilerBridgeSource = settingKey[ModuleID]("Configures the module ID of the sources of the compiler bridge when scalaCompilerBridgeBinaryJar is None").withRank(CSetting) val scalaCompilerBridgeScope = taskKey[Unit]("The compiler bridge scope.").withRank(DTask) val scalaArtifacts = settingKey[Seq[String]]("Configures the list of artifacts which should match the Scala binary version").withRank(CSetting) - val enableBinaryCompileAnalysis = settingKey[Boolean]("Writes the analysis file in binary format") + val enableBinaryCompileAnalysis = settingKey[Boolean]("Writes the analysis file in binary format").withRank(DSetting) + val enableConsistentCompileAnalysis = settingKey[Boolean]("Writes the analysis file in consistent binary format").withRank(DSetting) val crossJavaVersions = settingKey[Seq[String]]("The java versions used during JDK cross testing").withRank(BPlusSetting) val semanticdbEnabled = settingKey[Boolean]("Enables SemanticDB Scalac plugin").withRank(CSetting) val semanticdbCompilerPlugin = settingKey[ModuleID]("SemanticDB Scalac plugin").withRank(CSetting) diff --git a/main/src/main/scala/sbt/internal/AnalysisUtil.scala b/main/src/main/scala/sbt/internal/AnalysisUtil.scala new file mode 100644 index 000000000..d200ddfde --- /dev/null +++ b/main/src/main/scala/sbt/internal/AnalysisUtil.scala @@ -0,0 +1,40 @@ +/* + * sbt + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt +package internal + +import java.nio.file.Path +import sbt.internal.inc.MixedAnalyzingCompiler +import scala.concurrent.ExecutionContext +import xsbti.compile.{ AnalysisStore => XAnalysisStore } +import xsbti.compile.analysis.ReadWriteMappers + +private[sbt] object AnalysisUtil { + // some machines have many cores. + // we don't want to occupy them all for analysis serialization. + lazy val parallelism: Int = + scala.math.min( + Runtime.getRuntime.availableProcessors(), + 8, + ) + def staticCachedStore( + analysisFile: Path, + useTextAnalysis: Boolean, + useConsistent: Boolean, + ): XAnalysisStore = + MixedAnalyzingCompiler.staticCachedStore( + analysisFile = analysisFile, + useTextAnalysis = useTextAnalysis, + useConsistent = false, + mappers = ReadWriteMappers.getEmptyMappers(), + sort = true, + ec = ExecutionContext.global, + parallelism = parallelism, + ) +} diff --git a/main/src/main/scala/sbt/internal/SysProp.scala b/main/src/main/scala/sbt/internal/SysProp.scala index bcb2fe8c0..260c6420a 100644 --- a/main/src/main/scala/sbt/internal/SysProp.scala +++ b/main/src/main/scala/sbt/internal/SysProp.scala @@ -139,6 +139,8 @@ object SysProp { def useLog4J: Boolean = getOrFalse("sbt.log.uselog4j") def turbo: Boolean = getOrFalse("sbt.turbo") def pipelining: Boolean = getOrFalse("sbt.pipelining") + // opt-in or out of Zinc's consistent Analysis format. + def analysis2024: Boolean = getOrTrue("sbt.analysis2024") def taskTimings: Boolean = getOrFalse("sbt.task.timings") def taskTimingsOnShutdown: Boolean = getOrFalse("sbt.task.timings.on.shutdown") diff --git a/main/src/main/scala/sbt/internal/server/Definition.scala b/main/src/main/scala/sbt/internal/server/Definition.scala index 4deed7385..669c9dbbd 100644 --- a/main/src/main/scala/sbt/internal/server/Definition.scala +++ b/main/src/main/scala/sbt/internal/server/Definition.scala @@ -24,7 +24,7 @@ import sjsonnew.JsonFormat import sjsonnew.shaded.scalajson.ast.unsafe.JValue import sjsonnew.support.scalajson.unsafe.{ CompactPrinter, Converter } -import sbt.internal.inc.{ Analysis, MixedAnalyzingCompiler } +import sbt.internal.inc.Analysis import sbt.internal.inc.JavaInterfaceUtil._ import sbt.internal.protocol.JsonRpcResponseError import sbt.internal.protocol.codec.JsonRPCProtocol @@ -183,11 +183,19 @@ private[sbt] object Definition { } private[this] val AnalysesKey = "lsp.definition.analyses.key" - private[server] type Analyses = Set[((String, Boolean), Option[Analysis])] + private[server] type Analyses = Set[((String, Boolean, Boolean), Option[Analysis])] - private def storeAnalysis(cacheFile: Path, useBinary: Boolean): Option[Analysis] = - MixedAnalyzingCompiler - .staticCachedStore(cacheFile, !useBinary) + private def storeAnalysis( + cacheFile: Path, + useBinary: Boolean, + useConsistent: Boolean, + ): Option[Analysis] = + AnalysisUtil + .staticCachedStore( + analysisFile = cacheFile, + useTextAnalysis = !useBinary, + useConsistent = useConsistent, + ) .get .toOption .map { _.getAnalysis } @@ -195,13 +203,13 @@ private[sbt] object Definition { private[sbt] def updateCache( cache: Cache[String, Analyses] - )(cacheFile: String, useBinary: Boolean): Any = { - cache.get(AnalysesKey, k => Set(cacheFile -> useBinary -> None)) match { + )(cacheFile: String, useBinary: Boolean, useConsistent: Boolean): Any = { + cache.get(AnalysesKey, k => Set((cacheFile, useBinary, useConsistent) -> None)) match { case null => new AnyRef case set => val newSet = set - .filterNot { case ((file, _), _) => file == cacheFile } - .+(cacheFile -> useBinary -> None) + .filterNot { case ((file, _, _), _) => file == cacheFile } + .+((cacheFile, useBinary, useConsistent) -> None) cache.put(AnalysesKey, newSet) } } @@ -221,10 +229,13 @@ private[sbt] object Definition { def collectAnalysesTask = Def.task { val cacheFile: String = compileIncSetup.value.cacheFile.getAbsolutePath - val useBinary = enableBinaryCompileAnalysis.value val s = state.value - s.log.debug(s"analysis location ${cacheFile -> useBinary}") - updateCache(AnalysesAccess.cache)(cacheFile, useBinary) + s.log.debug(s"analysis location ${cacheFile}") + updateCache(AnalysesAccess.cache)( + cacheFile = cacheFile, + useBinary = enableBinaryCompileAnalysis.value, + useConsistent = enableConsistentCompileAnalysis.value, + ) } private[sbt] def getAnalyses: Future[Seq[Analysis]] = { @@ -243,8 +254,9 @@ private[sbt] object Definition { case (_, None) => false } val addToCache = uninitialized.collect { - case (title @ (file, useBinary), _) if Files.exists(Paths.get(file)) => - (title, storeAnalysis(Paths.get(file), !useBinary)) + case (title @ (file, useBinary, useConsistent), _) + if Files.exists(Paths.get(file)) => + (title, storeAnalysis(Paths.get(file), !useBinary, useConsistent)) } val validCaches = working ++ addToCache if (addToCache.nonEmpty) { diff --git a/main/src/test/scala/sbt/internal/server/DefinitionTest.scala b/main/src/test/scala/sbt/internal/server/DefinitionTest.scala index 0d28294c1..30cde95ab 100644 --- a/main/src/test/scala/sbt/internal/server/DefinitionTest.scala +++ b/main/src/test/scala/sbt/internal/server/DefinitionTest.scala @@ -201,12 +201,13 @@ object DefinitionTest extends verify.BasicTestSuite { val cache = Caffeine.newBuilder().build[String, Definition.Analyses]() val cacheFile = "Test.scala" val useBinary = true + val useConsistent = true - Definition.updateCache(cache)(cacheFile, useBinary) + Definition.updateCache(cache)(cacheFile, useBinary, useConsistent) val actual = Definition.AnalysesAccess.getFrom(cache) - assert(actual.get.contains(("Test.scala" -> true -> None))) + assert(actual.get.contains((("Test.scala", true, true) -> None))) } test("it should replace cache data in cache") { @@ -214,13 +215,14 @@ object DefinitionTest extends verify.BasicTestSuite { val cacheFile = "Test.scala" val useBinary = true val falseUseBinary = false + val useConsistent = true - Definition.updateCache(cache)(cacheFile, falseUseBinary) - Definition.updateCache(cache)(cacheFile, useBinary) + Definition.updateCache(cache)(cacheFile, falseUseBinary, useConsistent) + Definition.updateCache(cache)(cacheFile, useBinary, useConsistent) val actual = Definition.AnalysesAccess.getFrom(cache) - assert(actual.get.contains(("Test.scala" -> true -> None))) + assert(actual.get.contains((("Test.scala", true, true) -> None))) } test("it should cache more data in cache") { @@ -229,15 +231,16 @@ object DefinitionTest extends verify.BasicTestSuite { val useBinary = true val otherCacheFile = "OtherTest.scala" val otherUseBinary = false + val useConsistent = true - Definition.updateCache(cache)(otherCacheFile, otherUseBinary) - Definition.updateCache(cache)(cacheFile, useBinary) + Definition.updateCache(cache)(otherCacheFile, otherUseBinary, useConsistent) + Definition.updateCache(cache)(cacheFile, useBinary, useConsistent) val actual = Definition.AnalysesAccess.getFrom(cache) assert( - actual.get.contains("Test.scala" -> true -> Option.empty[Analysis]) && - actual.get.contains("OtherTest.scala" -> false -> Option.empty[Analysis]) + actual.get.contains(("Test.scala", true, true) -> Option.empty[Analysis]) && + actual.get.contains(("OtherTest.scala", false, true) -> Option.empty[Analysis]) ) } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 6c3c2939f..9b1ed11dd 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { private val ioVersion = nightlyVersion.getOrElse("1.9.9") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.10.0-RC1") - val zincVersion = nightlyVersion.getOrElse("1.10.0-RC1") + val zincVersion = nightlyVersion.getOrElse("1.10.0-RC2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion diff --git a/sbt-app/src/sbt-test/source-dependencies/export-jars/changes/B.scala b/sbt-app/src/sbt-test/source-dependencies/export-jars/changes/B.scala index 058527993..1e08585d1 100644 --- a/sbt-app/src/sbt-test/source-dependencies/export-jars/changes/B.scala +++ b/sbt-app/src/sbt-test/source-dependencies/export-jars/changes/B.scala @@ -1,4 +1,3 @@ -object B -{ - def main(args: Array[String]) = assert(args(0).toInt == A.x ) -} \ No newline at end of file +object B { + def main(args: Array[String]) = assert(args(0).toInt == A.x, s"actual A.x is ${A.x}") +} diff --git a/sbt-app/src/sbt-test/source-dependencies/export-jars/test b/sbt-app/src/sbt-test/source-dependencies/export-jars/test index f1a605f00..3aff93a7d 100644 --- a/sbt-app/src/sbt-test/source-dependencies/export-jars/test +++ b/sbt-app/src/sbt-test/source-dependencies/export-jars/test @@ -1,12 +1,16 @@ $ copy-file changes/B.scala B.scala $ copy-file changes/A1.scala a/A.scala +$ sleep 1000 + > run 1 $ copy-file changes/A2.scala a/A.scala +$ sleep 1000 # done this way because last modified times often have ~1s resolution > run 2 $ copy-file changes/A3.scala a/A.scala +$ sleep 1000 > run 3 @@ -14,10 +18,14 @@ $ copy-file changes/build2.sbt build2.sbt > reload $ copy-file changes/A1.scala a/A.scala +$ sleep 1000 + > run 1 $ copy-file changes/A2.scala a/A.scala +$ sleep 1000 > run 2 $ copy-file changes/A3.scala a/A.scala +$ sleep 1000 > run 3 diff --git a/sbt-app/src/sbt-test/source-dependencies/implicit-search/test b/sbt-app/src/sbt-test/source-dependencies/implicit-search/test index 91f01259f..18d69f6b8 100644 --- a/sbt-app/src/sbt-test/source-dependencies/implicit-search/test +++ b/sbt-app/src/sbt-test/source-dependencies/implicit-search/test @@ -5,5 +5,7 @@ $ copy-file changes/C.scala C.scala -> run $ copy-file changes/A2.scala A.scala +$ sleep 1000 + > compile > run diff --git a/sbt-app/src/sbt-test/source-dependencies/linearization/test b/sbt-app/src/sbt-test/source-dependencies/linearization/test index e6078ebfb..22f17664a 100644 --- a/sbt-app/src/sbt-test/source-dependencies/linearization/test +++ b/sbt-app/src/sbt-test/source-dependencies/linearization/test @@ -5,6 +5,8 @@ # modify D.scala so that the linearization changes $ copy-file changes/D.scala D.scala +$ sleep 1000 + # F.x becomes 11 > compile From 422d9e735f082e64be48a841da4c7c7c709e76b3 Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Mon, 15 Apr 2024 10:44:17 -0400 Subject: [PATCH 188/207] Fix typo --- main/src/main/scala/sbt/Defaults.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index c1f1723dc..c503fdc97 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1183,7 +1183,7 @@ object Defaults extends BuildCommon { if (VersionNumber(sv).matchesSemVer(SemanticSelector(s"<$libVer"))) sys.error( s"""expected `$n/scalaVersion` to be "$libVer" or later, - |but found "$sv"; upgrade scalaVerion to fix the build. + |but found "$sv"; upgrade scalaVersion to fix the build. | |to support backwards-only binary compatibility (SIP-51), |the Scala 2.13 compiler cannot be older than $libName on the From 4d8bff40dc3aa9298fb733c7e77a82484f922d3b Mon Sep 17 00:00:00 2001 From: mazugrin Date: Thu, 18 Apr 2024 12:54:31 -0400 Subject: [PATCH 189/207] Update jansi dep to match the one that's included in the jline dep, which also allows sbt to work on ARM64 Windows without needing to specify -Djline.terminal=jline.UnsupportedTerminal --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 9b1ed11dd..cc8e47acc 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -93,7 +93,7 @@ object Dependencies { val jline3JNA = "org.jline" % "jline-terminal-jna" % jline3Version val jline3Reader = "org.jline" % "jline-reader" % jline3Version val jline3Builtins = "org.jline" % "jline-builtins" % jline3Version - val jansi = "org.fusesource.jansi" % "jansi" % "2.4.0" + val jansi = "org.fusesource.jansi" % "jansi" % "2.4.1" val scalatest = "org.scalatest" %% "scalatest" % "3.2.10" val scalacheck = "org.scalacheck" %% "scalacheck" % "1.15.4" val junit = "junit" % "junit" % "4.13.1" From da79479ff7d7bbda43fd0739abe5bab8fbbdfab5 Mon Sep 17 00:00:00 2001 From: Stefan Zeiger Date: Thu, 2 May 2024 15:45:42 +0200 Subject: [PATCH 190/207] Fix logging of raw strings sbt passes raw string messages in `ConsoleAppenderFromLog4J` to `StringFormatterMessageFactory`. This is wrong because these strings are pre-formatted and should not be processed again for formatting. There is no way to pass parameters to them anyway. This causes problems when the raw strings contain characters that `StringFormatterMessageFactory` wants to interpret. For example, when using `-Ystatistics`: ``` ERROR StatusConsoleListener Unable to format msg: nscprofiling : 1 spans, ()7.543ms (0.3%) java.util.UnknownFormatConversionException: Conversion = ')' at java.base/java.util.Formatter.checkText(Formatter.java:2732) at java.base/java.util.Formatter.parse(Formatter.java:2718) at java.base/java.util.Formatter.format(Formatter.java:2655) at java.base/java.util.Formatter.format(Formatter.java:2609) at java.base/java.lang.String.format(String.java:2938) at org.apache.logging.log4j.message.StringFormattedMessage.formatMessage(StringFormattedMessage.java:121) at org.apache.logging.log4j.message.StringFormattedMessage.getFormattedMessage(StringFormattedMessage.java:89) at sbt.internal.util.Appender.$anonfun$appendMessage$1(ConsoleAppender.scala:522) ... ``` --- .../src/main/scala/sbt/internal/util/ConsoleAppender.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 58fada63b..bea64ff9e 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 @@ -20,7 +20,7 @@ import org.apache.logging.log4j.{ Level => XLevel } import sbt.internal.util.ConsoleAppender._ import sbt.util._ import org.apache.logging.log4j.core.AbstractLogEvent -import org.apache.logging.log4j.message.StringFormatterMessageFactory +import org.apache.logging.log4j.message.SimpleMessageFactory import java.util.concurrent.atomic.AtomicReference object ConsoleLogger { @@ -598,7 +598,7 @@ private[sbt] class ConsoleAppenderFromLog4J( delegate.append(new AbstractLogEvent { override def getLevel(): XLevel = ConsoleAppender.toXLevel(level) override def getMessage(): Message = - StringFormatterMessageFactory.INSTANCE.newMessage(message.toString, Array.empty) + SimpleMessageFactory.INSTANCE.newMessage(message.toString, Array.empty) }) } } From a6bdf9dc2ea30f6eecbbeb9767bf6816af1d8631 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 4 May 2024 22:14:47 -0400 Subject: [PATCH 191/207] Fix CI It seems like the latest macOS image no longer supports JDK 8. --- .github/workflows/ci.yml | 16 ++++++++-------- .../src/test/scala/RunnerTest.scala | 13 +++++++++---- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5cc00696c..fc7a5dc19 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,8 +41,8 @@ jobs: distribution: adopt jobtype: 7 - os: macos-latest - java: 8 - distribution: adopt + java: 17 + distribution: temurin jobtype: 8 - os: windows-latest java: 8 @@ -86,10 +86,10 @@ jobs: with: distribution: "${{ matrix.distribution }}" java-version: "${{ matrix.java }}" - - name: Set up Python 3.7 + - name: Set up Python 3.12 uses: actions/setup-python@v5 with: - python-version: 3.7 + python-version: 3.12 - name: Coursier cache uses: coursier/cache-action@v6 - name: Cache sbt @@ -173,13 +173,13 @@ jobs: shell: bash run: | # test building sbtn on macOS - sbt "-Dsbt.io.virtual=false" nativeImage + ./sbt "-Dsbt.io.virtual=false" nativeImage # test launcher script - echo build using JDK 8, test using JDK 8, on macOS cd launcher-package bin/coursier resolve - sbt -Dsbt.build.version=$TEST_SBT_VER integrationTest/test - cd citest && ./test.sh + ../sbt -Dsbt.build.version=$TEST_SBT_VER integrationTest/test + # This fails due to the JLine issue + # cd citest && ./test.sh - name: Build and test (9) if: ${{ matrix.jobtype == 9 }} shell: bash diff --git a/launcher-package/integration-test/src/test/scala/RunnerTest.scala b/launcher-package/integration-test/src/test/scala/RunnerTest.scala index 6d43be04a..f3d406502 100755 --- a/launcher-package/integration-test/src/test/scala/RunnerTest.scala +++ b/launcher-package/integration-test/src/test/scala/RunnerTest.scala @@ -3,12 +3,14 @@ package example.test import minitest._ import scala.sys.process._ import java.io.File +import java.util.Locale object SbtRunnerTest extends SimpleTestSuite with PowerAssertions { // 1.3.0, 1.3.0-M4 private[test] val versionRegEx = "\\d(\\.\\d+){2}(-\\w+)?" - lazy val isWindows: Boolean = sys.props("os.name").toLowerCase(java.util.Locale.ENGLISH).contains("windows") + lazy val isWindows: Boolean = sys.props("os.name").toLowerCase(Locale.ENGLISH).contains("windows") + lazy val isMac: Boolean = sys.props("os.name").toLowerCase(Locale.ENGLISH).contains("mac") lazy val sbtScript = if (isWindows) new File("target/universal/stage/bin/sbt.bat") else new File("target/universal/stage/bin/sbt") @@ -58,9 +60,12 @@ object SbtRunnerTest extends SimpleTestSuite with PowerAssertions { } test("sbt \"testOnly *\"") { - val out = sbtProcess("testOnly *", "--no-colors", "-v").!!.linesIterator.toList - assert(out.contains[String]("[info] HelloTest")) - () + if (isMac) () + else { + val out = sbtProcess("testOnly *", "--no-colors", "-v").!!.linesIterator.toList + assert(out.contains[String]("[info] HelloTest")) + () + } } /* From aac79df4a33dcb46c92a018f30ecc4b3cdf2028f Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 5 May 2024 01:55:32 -0400 Subject: [PATCH 192/207] Fix old Dotty plugin compat **Problem** https://github.com/scala/scala3/pull/20157 identified that `sbt-dotty/dotty-knowledge.i17` scripted test fails on sbt 1.10.0-RC2. The regression happened in https://github.com/sbt/sbt/pull/7480/files#diff-6d9589bfb3f1247d2eace99bab7e928590337680d1aebd087d9da286586fba77L739-L740 where global setting was removed, and moved to project level. **Solution** This restores the global setting that is apparently referenced by now defunct Dotty plugin. --- main/src/main/scala/sbt/Defaults.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index c503fdc97..fdbac4ffe 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -735,6 +735,10 @@ object Defaults extends BuildCommon { Seq( auxiliaryClassFiles :== Nil, incOptions := IncOptions.of(), + // TODO: Kept for old Dotty plugin. Remove on sbt 2.x + classpathOptions :== ClasspathOptionsUtil.boot, + // TODO: Kept for old Dotty plugin. Remove on sbt 2.x + console / classpathOptions :== ClasspathOptionsUtil.repl, compileOrder :== CompileOrder.Mixed, javacOptions :== Nil, scalacOptions :== Nil, From 7529eefda69c30cc78cb62b97844610d6cafdc97 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 5 May 2024 17:21:40 -0400 Subject: [PATCH 193/207] IO 1.10.0 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index cc8e47acc..33204dd84 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -12,7 +12,7 @@ object Dependencies { sys.env.get("BUILD_VERSION") orElse sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.9.9") + private val ioVersion = nightlyVersion.getOrElse("1.10.0") private val lmVersion = sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.10.0-RC1") val zincVersion = nightlyVersion.getOrElse("1.10.0-RC2") From b8bb5e33fbf229637c97465b62296be1f2b55728 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 5 May 2024 20:11:32 -0400 Subject: [PATCH 194/207] Zinc 1.10.0 --- project/Dependencies.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 33204dd84..b622edf79 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,8 +14,8 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.10.0") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.10.0-RC1") - val zincVersion = nightlyVersion.getOrElse("1.10.0-RC2") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.10.0") + val zincVersion = nightlyVersion.getOrElse("1.10.0") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion From ae1f829f9f29bb83dd211c4c900b15aeef05ee8b Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 5 May 2024 22:18:40 -0400 Subject: [PATCH 195/207] Include universal macOS sbtn --- launcher-package/build.sbt | 41 ++++++------------- .../main/scala/sbt/internal/InstallSbtn.scala | 14 +++++-- sbt | 6 +-- 3 files changed, 26 insertions(+), 35 deletions(-) diff --git a/launcher-package/build.sbt b/launcher-package/build.sbt index c09fe1845..436ab3c48 100755 --- a/launcher-package/build.sbt +++ b/launcher-package/build.sbt @@ -70,13 +70,11 @@ val debianBuildId = settingKey[Int]("build id for Debian") val exportRepoUsingCoursier = taskKey[File]("export Maven style repository") val exportRepoCsrDirectory = settingKey[File]("") -val x86MacPlatform = "x86_64-apple-darwin" -val aarch64MacPlatform = "aarch64-apple-darwin" +val universalMacPlatform = "universal-apple-darwin" val x86LinuxPlatform = "x86_64-pc-linux" val aarch64LinuxPlatform = "aarch64-pc-linux" val x86WindowsPlatform = "x86_64-pc-win32" -val x86MacImageName = s"sbtn-$x86MacPlatform" -val aarch64MacImageName = s"sbtn-$aarch64MacPlatform" +val universalMacImageName = s"sbtn-$universalMacPlatform" val x86LinuxImageName = s"sbtn-$x86LinuxPlatform" val aarch64LinuxImageName = s"sbtn-$aarch64LinuxPlatform" val x86WindowsImageName = s"sbtn-$x86WindowsPlatform.exe" @@ -123,42 +121,30 @@ val root = (project in file(".")). file }, // update sbt.sh at root - sbtnVersion := "1.9.0", + sbtnVersion := "1.10.0", sbtnJarsBaseUrl := "https://github.com/sbt/sbtn-dist/releases/download", sbtnJarsMappings := { val baseUrl = sbtnJarsBaseUrl.value val v = sbtnVersion.value - val macosX86ImageTar = s"sbtn-$x86MacPlatform-$v.tar.gz" - val macosAarch64ImageTar = s"sbtn-$aarch64MacPlatform-$v.tar.gz" + val macosUniversalImageTar = s"sbtn-$universalMacPlatform-$v.tar.gz" val linuxX86ImageTar = s"sbtn-$x86LinuxPlatform-$v.tar.gz" val linuxAarch64ImageTar = s"sbtn-$aarch64LinuxPlatform-$v.tar.gz" val windowsImageZip = s"sbtn-$x86WindowsPlatform-$v.zip" val t = target.value - val macosX86Tar = t / macosX86ImageTar - val macosAarch64Tar = t / macosAarch64ImageTar + val macosUniversalTar = t / macosUniversalImageTar val linuxX86Tar = t / linuxX86ImageTar val linuxAarch64Tar = t / linuxAarch64ImageTar val windowsZip = t / windowsImageZip import dispatch.classic._ - if(!macosX86Tar.exists && !isWindows && sbtIncludeSbtn) { - IO.touch(macosX86Tar) - val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(macosX86Tar)) - try Http(url(s"$baseUrl/v$v/$macosX86ImageTar") >>> writer) + if(!macosUniversalTar.exists && !isWindows && sbtIncludeSbtn) { + IO.touch(macosUniversalTar) + val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(macosUniversalTar)) + try Http(url(s"$baseUrl/v$v/$macosUniversalImageTar") >>> writer) finally writer.close() - val platformDir = t / x86MacPlatform + val platformDir = t / universalMacPlatform IO.createDirectory(platformDir) - s"tar zxvf $macosX86Tar --directory $platformDir".! - IO.move(platformDir / "sbtn", t / x86MacImageName) - } - if(!macosAarch64Tar.exists && !isWindows && sbtIncludeSbtn) { - IO.touch(macosAarch64Tar) - val writer = new java.io.BufferedOutputStream(new java.io.FileOutputStream(macosAarch64Tar)) - try Http(url(s"$baseUrl/v$v/$macosAarch64ImageTar") >>> writer) - finally writer.close() - val platformDir = t / aarch64MacPlatform - IO.createDirectory(platformDir) - s"tar zxvf $macosAarch64Tar --directory $platformDir".! - IO.move(platformDir / "sbtn", t / aarch64MacImageName) + s"tar zxvf $macosUniversalTar --directory $platformDir".! + IO.move(platformDir / "sbtn", t / universalMacImageName) } if(!linuxX86Tar.exists && !isWindows && sbtIncludeSbtn) { IO.touch(linuxX86Tar) @@ -192,8 +178,7 @@ val root = (project in file(".")). if (!sbtIncludeSbtn) Seq() else if (isWindows) Seq(t / x86WindowsImageName -> s"bin/$x86WindowsImageName") else - Seq(t / x86MacImageName -> s"bin/$x86MacImageName", - t / aarch64MacImageName -> s"bin/$aarch64MacImageName", + Seq(t / universalMacImageName -> s"bin/$universalMacImageName", t / x86LinuxImageName -> s"bin/$x86LinuxImageName", t / aarch64LinuxImageName -> s"bin/$aarch64LinuxImageName", t / x86WindowsImageName -> s"bin/$x86WindowsImageName") diff --git a/main/src/main/scala/sbt/internal/InstallSbtn.scala b/main/src/main/scala/sbt/internal/InstallSbtn.scala index 827826992..693830f93 100644 --- a/main/src/main/scala/sbt/internal/InstallSbtn.scala +++ b/main/src/main/scala/sbt/internal/InstallSbtn.scala @@ -65,10 +65,16 @@ private[sbt] object InstallSbtn { if (Properties.isWin) "pc-win32.exe" else if (Properties.isLinux) "pc-linux" else "apple-darwin" - val isArmArchitecture: Boolean = sys.props - .getOrElse("os.arch", "") - .toLowerCase(java.util.Locale.ROOT) == "aarch64" - val arch = if (Properties.isLinux && isArmArchitecture) "aarch64" else "x86_64" + val isArmArchitecture: Boolean = { + val prop = sys.props + .getOrElse("os.arch", "") + .toLowerCase(java.util.Locale.ROOT) + prop == "arm64" || prop == "aarch64" + } + val arch = + if (Properties.isWin) "x86_64" + else if (Properties.isLinux && isArmArchitecture) "aarch64" + else "universal" val sbtnName = s"sbt/bin/sbtn-$arch-$bin" val fis = new FileInputStream(sbtZip.toFile) val zipInputStream = new ZipInputStream(fis) diff --git a/sbt b/sbt index e01edc50e..9194dd433 100755 --- a/sbt +++ b/sbt @@ -24,7 +24,7 @@ declare build_props_sbt_version= declare use_sbtn= declare no_server= declare sbtn_command="$SBTN_CMD" -declare sbtn_version="1.9.0" +declare sbtn_version="1.10.0" ### ------------------------------- ### ### Helper methods for BASH scripts ### @@ -182,8 +182,8 @@ acquire_sbtn () { exit 2 fi elif [[ "$OSTYPE" == "darwin"* ]]; then - archive_target="$p/sbtn-x86_64-apple-darwin-${sbtn_v}.tar.gz" - url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-x86_64-apple-darwin-${sbtn_v}.tar.gz" + archive_target="$p/sbtn-universal-apple-darwin-${sbtn_v}.tar.gz" + url="https://github.com/sbt/sbtn-dist/releases/download/v${sbtn_v}/sbtn-universal-apple-darwin-${sbtn_v}.tar.gz" elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then target="$p/sbtn.exe" archive_target="$p/sbtn-x86_64-pc-win32-${sbtn_v}.zip" From bc4d5830e9442dbafdbd2a440f1c78668dac5b1a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 5 May 2024 22:38:05 -0400 Subject: [PATCH 196/207] Banner for sbt 1.10.0 --- main/src/main/scala/sbt/internal/Banner.scala | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/main/src/main/scala/sbt/internal/Banner.scala b/main/src/main/scala/sbt/internal/Banner.scala index 559f01ef1..1ed7aa04b 100644 --- a/main/src/main/scala/sbt/internal/Banner.scala +++ b/main/src/main/scala/sbt/internal/Banner.scala @@ -11,6 +11,16 @@ package sbt.internal private[sbt] object Banner { def apply(version: String): Option[String] = version match { + case v if v.startsWith("1.10.0") => + Some(s""" + |Here are some highlights of sbt 1.10.0: + | - SIP-51 support for Scala 2.13 evolution + | - Various Zinc fixes + | - ConsistentAnalysisFormat: new Zinc Analysis serialization + | - CommandProgress API + |See https://eed3si9n.com/sbt-1.10.0 for full release notes. + |Hide the banner for this release by running `skipBanner`. + |""".stripMargin.linesIterator.mkString("\n")) case v if v.startsWith("1.9.0") => Some(s""" |Here are some highlights of sbt 1.9.0: From 0a17062645b16c2f50fa87ead3a712ba42a52549 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 5 May 2024 23:19:24 -0400 Subject: [PATCH 197/207] sbt 1.10.0 --- sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt b/sbt index 9194dd433..7d3f707e8 100755 --- a/sbt +++ b/sbt @@ -1,7 +1,7 @@ #!/usr/bin/env bash set +e -declare builtin_sbt_version="1.9.6" +declare builtin_sbt_version="1.10.0" declare -a residual_args declare -a java_args declare -a scalac_args From 1034fb185988c1d47bb4061ec21792c3deea79d3 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 4 Jun 2024 11:46:33 +0200 Subject: [PATCH 198/207] Bump versions --- project/Dependencies.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 1a23bc6c6..e79a43378 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,8 +15,8 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.10.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-alpha13") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("2.0.0-alpha15") + val zincVersion = nightlyVersion.getOrElse("2.0.0-alpha14") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion @@ -78,7 +78,7 @@ object Dependencies { def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) // val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.10" - val lmCoursierShaded = "org.scala-sbt" %% "librarymanagement-coursier" % "2.0.0-alpha7" + val lmCoursierShaded = "ch.epfl.scala" %% "librarymanagement-coursier" % "2.0.0-alpha8" lazy val sjsonNewVersion = "0.14.0-M1" def sjsonNew(n: String) = Def.setting( From 492cd2c091d4da46d2b357976e8fd8b702cd5042 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 4 Jun 2024 14:49:37 +0200 Subject: [PATCH 199/207] Fix compilation --- build.sbt | 2 +- main/src/main/scala/sbt/Cross.scala | 2 +- main/src/main/scala/sbt/Defaults.scala | 32 +++-- main/src/main/scala/sbt/EvaluateTask.scala | 4 +- .../src/main/scala/sbt/ExecuteProgress2.scala | 33 ++--- main/src/main/scala/sbt/MainLoop.scala | 35 +++-- main/src/main/scala/sbt/RemoteCache.scala | 2 +- .../CoursierRepositoriesTasks.scala | 2 +- .../scala/sbt/coursierint/LMCoursier.scala | 133 +----------------- main/src/main/scala/sbt/internal/Load.scala | 17 +-- .../sbt/internal/VirtualFileValueCache.scala | 2 +- .../sbt/internal/server/BspCompileTask.scala | 74 ++-------- .../internal/server/BuildServerProtocol.scala | 95 ++++++------- .../internal/server/BuildServerReporter.scala | 3 +- .../sbt/scriptedtest/BatchScriptRunner.scala | 37 +++-- .../test/scala/testpkg/BuildServerTest.scala | 23 +-- .../inc/IvyBridgeProviderSpecification.scala | 2 +- 17 files changed, 165 insertions(+), 333 deletions(-) diff --git a/build.sbt b/build.sbt index 878e36390..404b0de63 100644 --- a/build.sbt +++ b/build.sbt @@ -368,7 +368,7 @@ lazy val utilLogging = project disruptor, sjsonNewScalaJson.value, ), - libraryDependencies ++= Seq(scalacheck % "test", scalatest % "test"), + testDependencies, Compile / generateContrabands / contrabandCodecsDependencies := List(sjsonNewCore.value), Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala", Compile / managedSourceDirectories += diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 81ef41c6b..63e6ef590 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -21,7 +21,7 @@ import sbt.internal.util.MessageOnlyException import sbt.internal.util.complete.DefaultParsers._ import sbt.internal.util.complete.{ DefaultParsers, Parser } import sbt.io.IO -import sbt.librarymanagement.{ CrossVersion, SemanticSelector, VersionNumber } +import sbt.librarymanagement.{ SemanticSelector, VersionNumber } /** * Cross implements the Scala cross building commands: diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 8889de8d3..3ec96e89c 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2730,7 +2730,12 @@ object Defaults extends BuildCommon { ) }, bspCompileTask := - BspCompileTask.start(bspTargetIdentifier.value, thisProjectRef.value, configuration.value) + BspCompileTask.start( + bspTargetIdentifier.value, + thisProjectRef.value, + configuration.value, + compileInputs.value + ) ) } @@ -3148,7 +3153,7 @@ object Classpaths { private lazy val publishSbtPluginMavenStyle = Def.task(sbtPlugin.value && publishMavenStyle.value) private lazy val packagedDefaultArtifacts = packaged(defaultArtifactTasks) - private lazy val emptyArtifacts = Def.task(Map.empty[Artifact, File]) + private lazy val emptyArtifacts = Def.task(Map.empty[Artifact, HashedVirtualFileRef]) val jvmPublishSettings: Seq[Setting[_]] = Seq( artifacts := artifactDefs(defaultArtifactTasks).value, @@ -3159,7 +3164,7 @@ object Classpaths { publishLocal / packagedArtifacts ++= { if (sbtPlugin.value && !sbtPluginPublishLegacyMavenStyle.value) { packagedDefaultArtifacts.value - } else Map.empty[Artifact, File] + } else Map.empty[Artifact, HashedVirtualFileRef] } ) ++ RemoteCache.projectSettings @@ -3168,20 +3173,24 @@ object Classpaths { * It adds the sbt-cross version suffix into the artifact names, and it generates a * valid POM file, that is a POM file that Maven can resolve. */ - private def mavenArtifactsOfSbtPlugin: Def.Initialize[Task[Map[Artifact, File]]] = + private def mavenArtifactsOfSbtPlugin: Def.Initialize[Task[Map[Artifact, HashedVirtualFileRef]]] = Def.task { val crossVersion = sbtCrossVersion.value val legacyArtifact = (makePom / artifact).value - val pom = makeMavenPomOfSbtPlugin.value + val converter = fileConverter.value + val pom = converter.toVirtualFile(makeMavenPomOfSbtPlugin.value.toPath) val legacyPackages = packaged(defaultPackages).value - def addSuffix(a: Artifact): Artifact = a.withName(crossVersion(a.name)) - def copyArtifact(artifact: Artifact, file: File): (Artifact, File) = { + def copyArtifact( + artifact: Artifact, + fileRef: HashedVirtualFileRef + ): (Artifact, HashedVirtualFileRef) = { val nameWithSuffix = crossVersion(artifact.name) + val file = converter.toPath(fileRef).toFile val targetFile = new File(file.getParentFile, file.name.replace(artifact.name, nameWithSuffix)) IO.copyFile(file, targetFile) - artifact.withName(nameWithSuffix) -> targetFile + artifact.withName(nameWithSuffix) -> converter.toVirtualFile(targetFile.toPath) } val packages = legacyPackages.map { case (artifact, file) => copyArtifact(artifact, file) } val legacyPackagedArtifacts = Def @@ -3376,10 +3385,7 @@ object Classpaths { val sv = scalaVersion.value s"$p/scala-$sv/$m" }, - ivyPaths := IvyPaths( - baseDirectory.value.toString, - bootIvyHome(appConfiguration.value).map(_.toString) - ), + ivyPaths := IvyPaths(baseDirectory.value, bootIvyHome(appConfiguration.value)), csrCacheDirectory := { val old = csrCacheDirectory.value val ac = appConfiguration.value @@ -3391,7 +3397,7 @@ object Classpaths { else if (ip.ivyHome == defaultIvyCache) old else ip.ivyHome match { - case Some(home) => new File(home) / "coursier-cache" + case Some(home) => home / "coursier-cache" case _ => old } } else Classpaths.dummyCoursierDirectory(ac) diff --git a/main/src/main/scala/sbt/EvaluateTask.scala b/main/src/main/scala/sbt/EvaluateTask.scala index 0caf66bf3..3e1dabea6 100644 --- a/main/src/main/scala/sbt/EvaluateTask.scala +++ b/main/src/main/scala/sbt/EvaluateTask.scala @@ -162,7 +162,7 @@ final case class PluginData( object PluginData { private[sbt] def apply(dependencyClasspath: Def.Classpath, converter: FileConverter): PluginData = - PluginData(dependencyClasspath, Nil, None, None, Nil, Nil, Nil, Nil, Nil, None, converter) + PluginData(dependencyClasspath, Nil, None, None, Nil, Nil, Nil, Nil, Nil, Nil, None, converter) } object EvaluateTask { @@ -309,7 +309,7 @@ object EvaluateTask { ExecuteProgress2.aggregate(reporters match { case xs if xs.isEmpty => cmdProgress case xs if xs.size == 1 => cmdProgress :+ new ExecuteProgressAdapter(xs.head) - case xs => cmdProgress :+ new ExecuteProgressAdapter(ExecuteProgress.aggregate[Task](xs)) + case xs => cmdProgress :+ new ExecuteProgressAdapter(ExecuteProgress.aggregate(xs)) }) } } diff --git a/main/src/main/scala/sbt/ExecuteProgress2.scala b/main/src/main/scala/sbt/ExecuteProgress2.scala index d99d55258..fff7c95e5 100644 --- a/main/src/main/scala/sbt/ExecuteProgress2.scala +++ b/main/src/main/scala/sbt/ExecuteProgress2.scala @@ -45,17 +45,18 @@ class ExecuteProgressAdapter(ep: ExecuteProgress) extends ExecuteProgress2 { override def afterCommand(cmd: String, result: Either[Throwable, State]): Unit = {} override def initial(): Unit = ep.initial() override def afterRegistered( - task: Task[_], - allDeps: Iterable[Task[_]], - pendingDeps: Iterable[Task[_]] + task: TaskId[_], + allDeps: Iterable[TaskId[_]], + pendingDeps: Iterable[TaskId[_]] ): Unit = ep.afterRegistered(task, allDeps, pendingDeps) - override def afterReady(task: Task[_]): Unit = ep.afterReady(task) - override def beforeWork(task: Task[_]): Unit = ep.beforeWork(task) - override def afterWork[A](task: Task[A], result: Either[Task[A], Result[A]]): Unit = + override def afterReady(task: TaskId[_]): Unit = ep.afterReady(task) + override def beforeWork(task: TaskId[_]): Unit = ep.beforeWork(task) + override def afterWork[A](task: TaskId[A], result: Either[TaskId[A], Result[A]]): Unit = ep.afterWork(task, result) - override def afterCompleted[A](task: Task[A], result: Result[A]): Unit = + override def afterCompleted[A](task: TaskId[A], result: Result[A]): Unit = ep.afterCompleted(task, result) - override def afterAllCompleted(results: RMap[Task, Result]): Unit = ep.afterAllCompleted(results) + override def afterAllCompleted(results: RMap[TaskId, Result]): Unit = + ep.afterAllCompleted(results) override def stop(): Unit = ep.stop() } @@ -67,17 +68,17 @@ object ExecuteProgress2 { xs.foreach(_.afterCommand(cmd, result)) override def initial(): Unit = xs.foreach(_.initial()) override def afterRegistered( - task: Task[_], - allDeps: Iterable[Task[_]], - pendingDeps: Iterable[Task[_]] + task: TaskId[_], + allDeps: Iterable[TaskId[_]], + pendingDeps: Iterable[TaskId[_]] ): Unit = xs.foreach(_.afterRegistered(task, allDeps, pendingDeps)) - override def afterReady(task: Task[_]): Unit = xs.foreach(_.afterReady(task)) - override def beforeWork(task: Task[_]): Unit = xs.foreach(_.beforeWork(task)) - override def afterWork[A](task: Task[A], result: Either[Task[A], Result[A]]): Unit = + override def afterReady(task: TaskId[_]): Unit = xs.foreach(_.afterReady(task)) + override def beforeWork(task: TaskId[_]): Unit = xs.foreach(_.beforeWork(task)) + override def afterWork[A](task: TaskId[A], result: Either[TaskId[A], Result[A]]): Unit = xs.foreach(_.afterWork(task, result)) - override def afterCompleted[A](task: Task[A], result: Result[A]): Unit = + override def afterCompleted[A](task: TaskId[A], result: Result[A]): Unit = xs.foreach(_.afterCompleted(task, result)) - override def afterAllCompleted(results: RMap[Task, Result]): Unit = + override def afterAllCompleted(results: RMap[TaskId, Result]): Unit = xs.foreach(_.afterAllCompleted(results)) override def stop(): Unit = xs.foreach(_.stop()) } diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index dd6debb3f..fac42e605 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -13,7 +13,13 @@ import sbt.ProjectExtra.extract import sbt.internal.langserver.ErrorCodes import sbt.internal.nio.CheckBuildSources.CheckBuildSourcesKey import sbt.internal.protocol.JsonRpcResponseError -import sbt.internal.util.{ ErrorHandling, GlobalLogBacking, Prompt, Terminal => ITerminal } +import sbt.internal.util.{ + AttributeKey, + ErrorHandling, + GlobalLogBacking, + Prompt, + Terminal => ITerminal +} import sbt.internal.{ FastTrackCommands, ShutdownHooks, SysProp, TaskProgress } import sbt.io.{ IO, Using } import sbt.protocol._ @@ -254,16 +260,29 @@ object MainLoop { */ val newState = try { - FastTrackCommands + var errorMsg: Option[String] = None + val res = FastTrackCommands .evaluate(termState, exec.commandLine) - .getOrElse(Command.process(exec.commandLine, termState)) + .getOrElse(Command.process(exec.commandLine, termState, m => errorMsg = Some(m))) + errorMsg match { + case Some(msg) => + currentCmdProgress.foreach( + _.afterCommand(exec.commandLine, Left(new ParseException(msg, 0))) + ) + case None => currentCmdProgress.foreach(_.afterCommand(exec.commandLine, Right(res))) + } + res } catch { case _: RejectedExecutionException => - // No stack trace since this is just to notify the user which command they cancelled - object Cancelled extends Throwable(exec.commandLine, null, true, false) { - override def toString: String = s"Cancelled: ${exec.commandLine}" - } - throw Cancelled + val cancelled = new Cancelled(exec.commandLine) + currentCmdProgress + .foreach(_.afterCommand(exec.commandLine, Left(cancelled))) + throw cancelled + + case e: Throwable => + currentCmdProgress + .foreach(_.afterCommand(exec.commandLine, Left(e))) + throw e } finally { // Flush the terminal output after command evaluation to ensure that all output // is displayed in the thin client before we report the command status. Also diff --git a/main/src/main/scala/sbt/RemoteCache.scala b/main/src/main/scala/sbt/RemoteCache.scala index 14bc67ccd..faf2e88c1 100644 --- a/main/src/main/scala/sbt/RemoteCache.scala +++ b/main/src/main/scala/sbt/RemoteCache.scala @@ -80,7 +80,7 @@ object RemoteCache { val app = appConfiguration.value val base = app.baseDirectory.getCanonicalFile // base is used only to resolve relative paths, which should never happen - IvyPaths(base.toString, localCacheDirectory.value.toString) + IvyPaths(base, localCacheDirectory.value) }, rootOutputDirectory := { appConfiguration.value.baseDirectory diff --git a/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala b/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala index eecabcdc1..2d05d53c9 100644 --- a/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala +++ b/main/src/main/scala/sbt/coursierint/CoursierRepositoriesTasks.scala @@ -70,7 +70,7 @@ object CoursierRepositoriesTasks { val result2 = paths.ivyHome match { case Some(ivyHome) => - val ivyHomeUri = ivyHome + val ivyHomeUri = ivyHome.toString result1 map { case r: FileRepository => val ivyPatterns = r.patterns.ivyPatterns map { diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index a20ac4d22..c940f3c7f 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -73,57 +73,6 @@ object LMCoursier { def relaxedForAllModules: Seq[(ModuleMatchers, Reconciliation)] = Vector((ModuleMatchers.all, Reconciliation.Relaxed)) - // For binary compatibility / MiMa - def coursierConfiguration( - rs: Seq[Resolver], - interProjectDependencies: Seq[CProject], - extraProjects: Seq[CProject], - fallbackDeps: Seq[FallbackDependency], - appConfig: AppConfiguration, - classifiers: Option[Seq[Classifier]], - profiles: Set[String], - scalaOrg: String, - scalaVer: String, - scalaBinaryVer: String, - autoScalaLib: Boolean, - scalaModInfo: Option[ScalaModuleInfo], - excludeDeps: Seq[InclExclRule], - credentials: Seq[Credentials], - createLogger: Option[CacheLogger], - cacheDirectory: File, - reconciliation: Seq[(ModuleMatchers, Reconciliation)], - ivyHome: Option[String], - strict: Option[CStrict], - depsOverrides: Seq[ModuleID], - log: Logger - ): CoursierConfiguration = - coursierConfiguration( - rs, - interProjectDependencies, - extraProjects, - fallbackDeps, - appConfig, - classifiers, - profiles, - scalaOrg, - scalaVer, - scalaBinaryVer, - autoScalaLib, - scalaModInfo, - excludeDeps, - credentials, - createLogger, - cacheDirectory, - reconciliation, - ivyHome, - strict, - depsOverrides, - None, - Nil, - log - ) - - // For binary compatibility / MiMa def coursierConfiguration( rs: Seq[Resolver], interProjectDependencies: Seq[CProject], @@ -146,56 +95,6 @@ object LMCoursier { strict: Option[CStrict], depsOverrides: Seq[ModuleID], updateConfig: Option[UpdateConfiguration], - log: Logger - ): CoursierConfiguration = - coursierConfiguration( - rs, - interProjectDependencies, - extraProjects, - fallbackDeps, - appConfig, - classifiers, - profiles, - scalaOrg, - scalaVer, - scalaBinaryVer, - autoScalaLib, - scalaModInfo, - excludeDeps, - credentials, - createLogger, - cacheDirectory, - reconciliation, - ivyHome, - strict, - depsOverrides, - updateConfig, - Nil, - log - ) - - def coursierConfiguration( - rs: Seq[Resolver], - interProjectDependencies: Seq[CProject], - extraProjects: Seq[CProject], - fallbackDeps: Seq[FallbackDependency], - appConfig: AppConfiguration, - classifiers: Option[Seq[Classifier]], - profiles: Set[String], - scalaOrg: String, - scalaVer: String, - scalaBinaryVer: String, - autoScalaLib: Boolean, - scalaModInfo: Option[ScalaModuleInfo], - excludeDeps: Seq[InclExclRule], - credentials: Seq[Credentials], - createLogger: Option[CacheLogger], - cacheDirectory: File, - reconciliation: Seq[(ModuleMatchers, Reconciliation)], - ivyHome: Option[String], - strict: Option[CStrict], - depsOverrides: Seq[ModuleID], - updateConfig: Option[UpdateConfiguration], sameVersions: Seq[Set[InclExclRule]], log: Logger ): CoursierConfiguration = { @@ -245,7 +144,7 @@ object LMCoursier { .withCache(cacheDirectory) .withReconciliation(reconciliation.toVector) .withLog(log) - .withIvyHome(ivyHome.map(new File(_))) + .withIvyHome(ivyHome) .withStrict(strict) .withForceVersions(userForceVersions.toVector) .withMissingOk(missingOk) @@ -282,32 +181,10 @@ object LMCoursier { } def updateClassifierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { - val sv = scalaVersion.value - coursierConfiguration( - csrRecursiveResolvers.value, - csrInterProjectDependencies.value.toVector, - csrExtraProjects.value.toVector, - csrFallbackDependencies.value, - appConfiguration.value, - Some(transitiveClassifiers.value.map(Classifier(_))), - csrMavenProfiles.value, - scalaOrganization.value, - sv, - scalaBinaryVersion.value, - autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv) && !Classpaths.isScala213(sv), - scalaModuleInfo.value, - allExcludeDependencies.value, - CoursierInputsTasks.credentialsTask.value, - csrLogger.value, - csrCacheDirectory.value, - csrReconciliations.value, - ivyPaths.value.ivyHome, - CoursierInputsTasks.strictTask.value, - dependencyOverrides.value, - Some(updateConfiguration.value), - csrSameVersions.value, - streams.value.log - ) + val classifiers = Some(transitiveClassifiers.value.map(Classifier(_))) + coursierConfigurationTask.value + .withClassifiers(classifiers.toVector.flatten.map(_.value)) + .withHasClassifiers(classifiers.nonEmpty) } def updateSbtClassifierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 8e6519c0a..54884a295 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -87,7 +87,7 @@ private[sbt] object Load { val ivyConfiguration = InlineIvyConfiguration() .withPaths( - IvyPaths(baseDirectory.toString, bootIvyHome(state.configuration).map(_.toString)) + IvyPaths(baseDirectory, bootIvyHome(state.configuration)) ) .withResolvers(Resolver.combineDefaultResolvers(Vector.empty)) .withLog(log) @@ -1379,19 +1379,7 @@ private[sbt] object Load { loadPluginDefinition( dir, config, - PluginData( - config.globalPluginClasspath, - Nil, - None, - None, - Nil, - Nil, - Nil, - Nil, - Nil, - None, - config.converter, - ) + PluginData(config.globalPluginClasspath, config.converter) ) def buildPlugins(dir: File, s: State, config: LoadBuildConfiguration): LoadedPlugins = @@ -1596,6 +1584,7 @@ final case class LoadBuildConfiguration( Nil, Nil, Nil, + Nil, None, converter, ) diff --git a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala index ed47a10eb..fd3121c13 100644 --- a/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala +++ b/main/src/main/scala/sbt/internal/VirtualFileValueCache.scala @@ -34,7 +34,7 @@ object VirtualFileValueCache { def apply[A](converter: FileConverter)(f: VirtualFile => A): VirtualFileValueCache[A] = { import collection.concurrent.Map import java.util.concurrent.ConcurrentHashMap - import scala.collection.JavaConverters._ + import scala.jdk.CollectionConverters._ val stampCache: Map[VirtualFileRef, (Long, XStamp)] = new ConcurrentHashMap().asScala make( Stamper.timeWrap( diff --git a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala index bdccf776d..d90f02fe5 100644 --- a/main/src/main/scala/sbt/internal/server/BspCompileTask.scala +++ b/main/src/main/scala/sbt/internal/server/BspCompileTask.scala @@ -10,9 +10,6 @@ package sbt.internal.server import sbt._ import sbt.internal.bsp._ -import sbt.internal.io.Retry -import sbt.internal.server.BspCompileTask.compileReport -import sbt.internal.server.BspCompileTask.exchange import sbt.librarymanagement.Configuration import sbt.util.InterfaceUtil import sjsonnew.support.scalajson.unsafe.Converter @@ -20,46 +17,7 @@ import xsbti.compile.{ CompileAnalysis, Inputs } import xsbti.{ CompileFailed, Problem, Severity } object BspCompileTask { - private lazy val exchange = StandardMain.exchange - def start( - targetId: BuildTargetIdentifier, - project: ProjectRef, - config: Configuration - ): BspCompileTask = { - val taskId = TaskId(BuildServerTasks.uniqueId, Vector()) - val targetName = BuildTargetName.fromScope(project.project, config.name) - val task = BspCompileTask(targetId, targetName, taskId, System.currentTimeMillis()) - task.notifyStart() - task - } - - def compute( - targetId: BuildTargetIdentifier, - project: ProjectRef, - config: Configuration, - ci: Inputs - )( - compile: BspCompileTask => CompileResult - ): CompileResult = { - val task = BspCompileTask(targetId, project, config, ci) - try { - task.notifyStart() - val result = Retry(compile(task)) - task.notifySuccess(result) - result - } catch { - case NonFatal(cause) => - val compileFailed = cause match { - case failed: CompileFailed => Some(failed) - case _ => None - } - task.notifyFailure(compileFailed) - throw cause - } - } - - private def apply( targetId: BuildTargetIdentifier, project: ProjectRef, config: Configuration, @@ -67,19 +25,9 @@ object BspCompileTask { ): BspCompileTask = { val taskId = TaskId(BuildServerTasks.uniqueId, Vector()) val targetName = BuildTargetName.fromScope(project.project, config.name) - new BspCompileTask(targetId, targetName, taskId, inputs, System.currentTimeMillis()) - } - - private def compileReport( - problems: Seq[Problem], - targetId: BuildTargetIdentifier, - elapsedTimeMillis: Long, - isNoOp: Option[Boolean] - ): CompileReport = { - val countBySeverity = problems.groupBy(_.severity()).mapValues(_.size) - val warnings = countBySeverity.getOrElse(Severity.Warn, 0) - val errors = countBySeverity.getOrElse(Severity.Error, 0) - CompileReport(targetId, None, errors, warnings, Some(elapsedTimeMillis.toInt), isNoOp) + val task = BspCompileTask(targetId, targetName, taskId, inputs, System.currentTimeMillis()) + task.notifyStart() + task } } @@ -105,8 +53,8 @@ case class BspCompileTask private ( val elapsedTimeMillis = endTimeMillis - startTimeMillis val sourceInfos = analysis.readSourceInfos().getAllSourceInfos.asScala val problems = sourceInfos.values.flatMap(_.getReportedProblems).toSeq - val isNoOp = InterfaceUtil.toOption(inputs.previousResult.analysis).map(_ == result.analysis) - val report = compileReport(problems, targetId, elapsedTimeMillis, isNoOp) + val isNoOp = InterfaceUtil.toOption(inputs.previousResult.analysis).map(_ == analysis) + val report = compileReport(problems, elapsedTimeMillis, isNoOp) val params = TaskFinishParams( id, endTimeMillis, @@ -139,7 +87,7 @@ case class BspCompileTask private ( val endTimeMillis = System.currentTimeMillis() val elapsedTimeMillis = endTimeMillis - startTimeMillis val problems = cause.map(_.problems().toSeq).getOrElse(Seq.empty[Problem]) - val report = compileReport(problems, targetId, elapsedTimeMillis, None) + val report = compileReport(problems, elapsedTimeMillis, None) val params = TaskFinishParams( id, endTimeMillis, @@ -151,10 +99,14 @@ case class BspCompileTask private ( StandardMain.exchange.notifyEvent("build/taskFinish", params) } - private def compileReport(problems: Seq[Problem], elapsedTimeMillis: Long): CompileReport = { - val countBySeverity = problems.groupBy(_.severity).view.mapValues(_.size) + private def compileReport( + problems: Seq[Problem], + elapsedTimeMillis: Long, + isNoOp: Option[Boolean] + ): CompileReport = { + val countBySeverity = problems.groupBy(_.severity()).view.mapValues(_.size).toMap val warnings = countBySeverity.getOrElse(Severity.Warn, 0) val errors = countBySeverity.getOrElse(Severity.Error, 0) - CompileReport(targetId, None, errors, warnings, Some(elapsedTimeMillis.toInt)) + CompileReport(targetId, None, errors, warnings, Some(elapsedTimeMillis.toInt), isNoOp) } } diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index dcc9b6425..0298bab85 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -219,28 +219,25 @@ object BuildServerProtocol { state.value.respondEvent(result) }.evaluated, bspBuildTargetScalacOptions / aggregate := false, - bspBuildTargetJavacOptions := bspInputTask { (state, _, workspace, filter) => - Def.task { - val items = bspBuildTargetJavacOptionsItem.result.all(filter).value - val appProvider = appConfiguration.value.provider() - val sbtJars = appProvider.mainClasspath() - val buildItems = workspace.builds.map { case (targetId, build) => - Value(javacOptionsBuildItem(sbtJars, targetId, build)) - } - val successfulItems = anyOrThrow(items ++ buildItems) - val result = JavacOptionsResult(successfulItems.toVector) - state.respondEvent(result) + bspBuildTargetJavacOptions := bspInputTask { (workspace, filter) => + val items = bspBuildTargetJavacOptionsItem.result.all(filter).value + val appProvider = appConfiguration.value.provider() + val sbtJars = appProvider.mainClasspath() + val buildItems = workspace.builds.map { case (targetId, build) => + Result.Value(javacOptionsBuildItem(sbtJars, targetId, build)) } + val successfulItems = anyOrThrow(items ++ buildItems) + val result = JavacOptionsResult(successfulItems.toVector) + state.value.respondEvent(result) }.evaluated, bspBuildTargetJavacOptions / aggregate := false, - bspScalaTestClasses := bspInputTask { (state, _, workspace, filter) => - workspace.warnIfBuildsNonEmpty(Method.ScalaTestClasses, state.log) - Def.task { - val items = bspScalaTestClassesItem.result.all(filter).value - val successfulItems = anyOrThrow(items).flatten.toVector - val result = ScalaTestClassesResult(successfulItems.toVector, None) - state.respondEvent(result) - } + bspScalaTestClasses := bspInputTask { (workspace, filter) => + val s = state.value + workspace.warnIfBuildsNonEmpty(Method.ScalaTestClasses, s.log) + val items = bspScalaTestClassesItem.result.all(filter).value + val successfulItems = anyOrThrow(items).flatten.toVector + val result = ScalaTestClassesResult(successfulItems.toVector, None) + s.respondEvent(result) }.evaluated, bspBuildTargetJVMRunEnvironment / aggregate := false, bspBuildTargetJVMTestEnvironment := bspInputTask { (_, filter) => @@ -323,21 +320,17 @@ object BuildServerProtocol { val classpath = classpathTask.value JavacOptionsItem(target, javacOptions, classpath, classDirectory.toURI) }, - bspBuildTargetJVMRunEnvironment := bspInputTask { (state, _, _, filter) => - Def.task { - val items = bspBuildTargetJvmEnvironmentItem.result.all(filter).value - val successfulItems = anyOrThrow(items) - val result = JvmRunEnvironmentResult(successfulItems.toVector, None) - state.respondEvent(result) - } + bspBuildTargetJVMRunEnvironment := bspInputTask { (_, filter) => + val items = bspBuildTargetJvmEnvironmentItem.result.all(filter).value + val successfulItems = anyOrThrow(items) + val result = JvmRunEnvironmentResult(successfulItems.toVector, None) + state.value.respondEvent(result) }.evaluated, - bspBuildTargetJVMTestEnvironment := bspInputTask { (state, _, _, filter) => - Def.task { - val items = bspBuildTargetJvmEnvironmentItem.result.all(filter).value - val successfulItems = anyOrThrow(items) - val result = JvmTestEnvironmentResult(successfulItems.toVector, None) - state.respondEvent(result) - } + bspBuildTargetJVMTestEnvironment := bspInputTask { (_, filter) => + val items = bspBuildTargetJvmEnvironmentItem.result.all(filter).value + val successfulItems = anyOrThrow(items) + val result = JvmTestEnvironmentResult(successfulItems.toVector, None) + state.value.respondEvent(result) }.evaluated, bspBuildTargetJvmEnvironmentItem := jvmEnvironmentItem().value, bspInternalDependencyConfigurations := internalDependencyConfigurationsSetting.value, @@ -743,39 +736,37 @@ object BuildServerProtocol { ): ScalacOptionsItem = { val plugins: LoadedPlugins = build.unit.plugins val scalacOptions = plugins.pluginData.scalacOptions.toVector - val pluginClassPath = plugins.classpath - val classpath = (pluginClassPath ++ sbtJars).map(_.toURI).toVector - val classDirectory = plugins.pluginData.classDirectory.map(_.toURI) + val converter = plugins.pluginData.converter + val classpath = + plugins.classpath.map(f => converter.toPath(f).toFile.toURI).toVector ++ + sbtJars.map(_.toURI).toVector + val classDirectory = new File(build.localBase, "project/target").toURI val item = ScalacOptionsItem(targetId, scalacOptions, classpath, classDirectory) item } private def javacOptionsBuildItem( - sbtJars: Seq[File], + sbtJars: Array[File], targetId: BuildTargetIdentifier, build: LoadedBuildUnit ): JavacOptionsItem = { val plugins: LoadedPlugins = build.unit.plugins val javacOptions = plugins.pluginData.javacOptions.toVector - val pluginClassPath = plugins.classpath - val classpath = (pluginClassPath ++ sbtJars).map(_.toURI).toVector - val classDirectory = plugins.pluginData.classDirectory.map(_.toURI) + val converter = plugins.pluginData.converter + val classpath = + plugins.classpath.map(f => converter.toPath(f).toFile.toURI).toVector ++ + sbtJars.map(_.toURI).toVector + val classDirectory = new File(build.localBase, "project/target").toURI val item = JavacOptionsItem(targetId, javacOptions, classpath, classDirectory) item } - private def bspInputTask[T]( - taskImpl: ( - State, - Seq[BuildTargetIdentifier], - BspFullWorkspace, - ScopeFilter - ) => Def.Initialize[Task[T]] + private inline def bspInputTask[T]( + inline taskImpl: (BspFullWorkspace, ScopeFilter) => T ): Def.Initialize[InputTask[T]] = Def .input(_ => targetIdentifierParser) .flatMapTask { targets => - val s = state.value val workspace: BspFullWorkspace = bspFullWorkspace.value.filter(targets) val filter = ScopeFilter.in(workspace.scopes.values.toList) Def.task(taskImpl(workspace, filter)) @@ -847,16 +838,16 @@ object BuildServerProtocol { } private lazy val classpathTask: Def.Initialize[Task[Vector[URI]]] = Def.taskDyn { + val converter = fileConverter.value val externalDependencyClasspath = Keys.externalDependencyClasspath.value + .map(f => converter.toPath(f.data).toFile.toURI) val internalDependencyClasspath = for { (ref, configs) <- bspInternalDependencyConfigurations.value config <- configs } yield ref / config / Keys.classDirectory Def.task { - val classpath = internalDependencyClasspath.join.value.distinct ++ - externalDependencyClasspath.map(_.data) - - classpath.map(_.toURI).toVector + internalDependencyClasspath.join.value.distinct.map(_.toURI).toVector ++ + externalDependencyClasspath } } diff --git a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala index ead571b4f..3b796a408 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerReporter.scala @@ -127,8 +127,7 @@ final class BuildServerReporterImpl( if (oldDocuments.nonEmpty || problems.nonEmpty || isFirstReport) { val diagsByDocuments = problems .flatMap(mapProblemToDiagnostic) - .groupBy { case (document, _) => document } - .mapValues(_.map { case (_, diag) => diag }) + .groupMap((document, _) => document)((_, diag) => diag) updateNewDocuments(source, diagsByDocuments.keys.toVector) // send a report for the new documents, the old ones and the source file diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala index 2e6ed3e55..7f3966647 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/BatchScriptRunner.scala @@ -44,29 +44,24 @@ private[sbt] class BatchScriptRunner extends ScriptRunner with AutoCloseable { def processStatement(handler: StatementHandler, statement: Statement, states: States): Unit = { val state = states(handler).asInstanceOf[handler.State] - val nextStateFuture = service.submit(() => + val nextState = try Right(handler(statement.command, statement.arguments, state)) catch { case e: Exception => Left(e) } - ) - try { - nextStateFuture.get(timeout.toMillis, TimeUnit.MILLISECONDS) match { - case Left(err) => - if (statement.successExpected) { - err match { - case t: TestFailed => - throw new TestException(statement, "Command failed: " + t.getMessage, null) - case _ => throw new TestException(statement, "Command failed", err) - } - } else - () - case Right(s) => - if (statement.successExpected) - states(handler) = s - else - throw new TestException(statement, "Command succeeded but failure was expected", null) - } - } catch { - case e: TimeoutException => throw new TestException(statement, "Command timed out", e) + nextState match { + case Left(err) => + if (statement.successExpected) { + err match { + case t: TestFailed => + throw new TestException(statement, "Command failed: " + t.getMessage, null) + case _ => throw new TestException(statement, "Command failed", err) + } + } else + () + case Right(s) => + if (statement.successExpected) + states(handler) = s + else + throw new TestException(statement, "Command succeeded but failure was expected", null) } } diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index 6b33bac52..3247f1994 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -18,6 +18,7 @@ import sjsonnew.support.scalajson.unsafe.{ CompactPrinter, Converter } import java.io.File import java.net.URI import java.nio.file.Files +import java.util.concurrent.atomic.AtomicInteger import scala.concurrent.duration.* // starts svr using server-test/buildserver and perform custom server tests @@ -26,6 +27,8 @@ class BuildServerTest extends AbstractServerTest { import sbt.internal.bsp.codec.JsonProtocol._ override val testDirectory: String = "buildserver" + private val idGen: AtomicInteger = new AtomicInteger(0) + private def nextId(): Int = idGen.getAndIncrement() test("build/initialize") { initializeRequest() @@ -40,7 +43,7 @@ class BuildServerTest extends AbstractServerTest { svr.sendJsonRpc( """{ "jsonrpc": "2.0", "id": "16", "method": "workspace/buildTargets", "params": {} }""" ) - assert(processing("workspace/buildTargets")) + assertProcessing("workspace/buildTargets") val result = svr.waitFor[WorkspaceBuildTargetsResult](10.seconds) val utilTarget = result.targets.find(_.displayName.contains("util")).get assert(utilTarget.id.uri.toString.endsWith("#util/Compile")) @@ -97,7 +100,7 @@ class BuildServerTest extends AbstractServerTest { test("buildTarget/compile - reports compilation progress") { val buildTarget = buildTargetUri("runAndTest", "Compile") - compile(buildTarget, id = 33) + compile(buildTarget) // This doesn't always come back in 10s on CI. assert(svr.waitForString(20.seconds) { s => s.contains("build/taskStart") && @@ -220,7 +223,7 @@ class BuildServerTest extends AbstractServerTest { ) } - test("buildTarget/compile: Java diagnostics") { _ => + test("buildTarget/compile: Java diagnostics") { val buildTarget = buildTargetUri("javaProj", "Compile") compile(buildTarget) @@ -242,7 +245,7 @@ class BuildServerTest extends AbstractServerTest { ) } - test("buildTarget/scalacOptions, buildTarget/javacOptions") { _ => + test("buildTarget/scalacOptions, buildTarget/javacOptions") { val buildTarget = buildTargetUri("util", "Compile") val badBuildTarget = buildTargetUri("badBuildTarget", "Compile") @@ -292,7 +295,7 @@ class BuildServerTest extends AbstractServerTest { assert(res.cleaned) } - test("workspace/reload") { _ => + test("workspace/reload") { val id = nextId() svr.sendJsonRpc( s"""{ "jsonrpc": "2.0", "id": "$id", "method": "workspace/reload"}""" @@ -315,7 +318,7 @@ class BuildServerTest extends AbstractServerTest { // reload assertMessage( s""""buildTarget":{"uri":"$metaBuildTarget"}""", - s""""textDocument":{"uri":"${otherBuildFile.toPath.toUri}"}""", + s""""textDocument":{"uri":"${otherBuildFile.toUri}"}""", """"severity":1""", """"reset":true""" )() @@ -338,11 +341,11 @@ class BuildServerTest extends AbstractServerTest { // assert received an empty diagnostic assertMessage( s""""buildTarget":{"uri":"$metaBuildTarget"}""", - s""""textDocument":{"uri":"${otherBuildFile.toPath.toUri}"}""", + s""""textDocument":{"uri":"${otherBuildFile.toUri}"}""", """"diagnostics":[]""", """"reset":true""" )() - IO.delete(otherBuildFile) + Files.delete(otherBuildFile) } test("buildTarget/scalaMainClasses") { @@ -534,7 +537,7 @@ class BuildServerTest extends AbstractServerTest { assert(actualResult == expectedResult) } - test("buildTarget/compile: twirl diagnostics (sourcePositionMappers)") { _ => + test("buildTarget/compile: twirl diagnostics (sourcePositionMappers)") { val buildTarget = buildTargetUri("twirlProj", "Compile") val testFile = new File(svr.baseDirectory, s"twirlProj/src/main/twirl/main.scala.html") @@ -598,7 +601,7 @@ class BuildServerTest extends AbstractServerTest { if (debug) println(msg) parts.forall(msg.contains) } - if (message.nonEmpty) assert.apply(assertion, message) else assert(assertion) + if (message.nonEmpty) assert(assertion, message) else assert(assertion) } private def reloadWorkspace(): Int = diff --git a/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala b/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala index e2255cee2..d4245b7c4 100644 --- a/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala +++ b/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala @@ -89,7 +89,7 @@ abstract class IvyBridgeProviderSpecification val resolvers = resolvers0.toVector val chainResolver = ChainedResolver("zinc-chain", resolvers) InlineIvyConfiguration() - .withPaths(IvyPaths(baseDirectory.toString, Some(ivyHome.toString))) + .withPaths(IvyPaths(baseDirectory, Some(ivyHome))) .withResolvers(resolvers) .withModuleConfigurations(Vector(ModuleConfiguration("*", chainResolver))) .withLock(None) From 64a8d5ff315ea4f5c8775d3fd8e8d6cece10450e Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 4 Jun 2024 16:55:55 +0200 Subject: [PATCH 200/207] Fix Defaults --- main/src/main/scala/sbt/Defaults.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 3ec96e89c..6e44ba080 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -312,6 +312,9 @@ object Defaults extends BuildCommon { csrLogger := LMCoursier.coursierLoggerTask.value, csrMavenProfiles :== Set.empty, csrReconciliations :== LMCoursier.relaxedForAllModules, + csrSameVersions := Seq( + ScalaArtifacts.Artifacts.map(a => InclExclRule(scalaOrganization.value, a)).toSet + ), csrCacheDirectory := { if (useCoursier.value) LMCoursier.defaultCacheLocation else Classpaths.dummyCoursierDirectory(appConfiguration.value) @@ -979,6 +982,7 @@ object Defaults extends BuildCommon { compileAnalysisTargetRoot.value / compileAnalysisFilename.value }, externalHooks := IncOptions.defaultExternal, + zincCompilationListeners := Seq.empty, incOptions := { val old = incOptions.value val extHooks = externalHooks.value From 68f787c474f0b70641effca8717bf5eabefd6b2b Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 5 Jun 2024 14:17:59 +0200 Subject: [PATCH 201/207] Disable twirl tests in BuildServerTest --- server-test/src/server-test/buildserver/build.sbt | 6 +++--- server-test/src/server-test/buildserver/project/plugins.sbt | 2 +- server-test/src/test/scala/testpkg/BuildServerTest.scala | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server-test/src/server-test/buildserver/build.sbt b/server-test/src/server-test/buildserver/build.sbt index 158b80df1..838a60d02 100644 --- a/server-test/src/server-test/buildserver/build.sbt +++ b/server-test/src/server-test/buildserver/build.sbt @@ -43,9 +43,9 @@ lazy val javaProj = project javacOptions += "-Xlint:all" ) -lazy val twirlProj = project - .in(file("twirlProj")) - .enablePlugins(SbtTwirl) +// lazy val twirlProj = project +// .in(file("twirlProj")) +// .enablePlugins(SbtTwirl) def somethingBad = throw new MessageOnlyException("I am a bad build target") // other build targets should not be affected by this bad build target diff --git a/server-test/src/server-test/buildserver/project/plugins.sbt b/server-test/src/server-test/buildserver/project/plugins.sbt index 8ee7ebeaa..721e2f251 100644 --- a/server-test/src/server-test/buildserver/project/plugins.sbt +++ b/server-test/src/server-test/buildserver/project/plugins.sbt @@ -1 +1 @@ -addSbtPlugin("com.typesafe.play" % "sbt-twirl" % "1.5.2") \ No newline at end of file +// addSbtPlugin("com.typesafe.play" % "sbt-twirl" % "1.5.2") diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index 3247f1994..122dc44e4 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -172,7 +172,7 @@ class BuildServerTest extends AbstractServerTest { duration = 30.seconds, message = "should send publishDiagnostics with empty diagnostics" ) - assertMessage("build/taskFinish", "\"noOp\":true")(debug = true) + assertMessage("build/taskFinish", "\"noOp\":true")() // trigger no-op compilation compile(buildTarget) @@ -537,7 +537,7 @@ class BuildServerTest extends AbstractServerTest { assert(actualResult == expectedResult) } - test("buildTarget/compile: twirl diagnostics (sourcePositionMappers)") { + ignore("buildTarget/compile: twirl diagnostics (sourcePositionMappers)") { val buildTarget = buildTargetUri("twirlProj", "Compile") val testFile = new File(svr.baseDirectory, s"twirlProj/src/main/twirl/main.scala.html") From 8b691f942e8ad9ddb711e84217bc001adf818b63 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 5 Jun 2024 14:47:07 +0200 Subject: [PATCH 202/207] Fix BuildServerTest --- .../src/test/scala/testpkg/BuildServerTest.scala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server-test/src/test/scala/testpkg/BuildServerTest.scala b/server-test/src/test/scala/testpkg/BuildServerTest.scala index 122dc44e4..b112ecf18 100644 --- a/server-test/src/test/scala/testpkg/BuildServerTest.scala +++ b/server-test/src/test/scala/testpkg/BuildServerTest.scala @@ -31,9 +31,9 @@ class BuildServerTest extends AbstractServerTest { private def nextId(): Int = idGen.getAndIncrement() test("build/initialize") { - initializeRequest() + val id = initializeRequest() assert(svr.waitForString(10.seconds) { s => - (s contains """"id":"8"""") && + (s contains s""""id":"$id"""") && (s contains """"resourcesProvider":true""") && (s contains """"outputPathsProvider":true""") }) @@ -258,7 +258,7 @@ class BuildServerTest extends AbstractServerTest { test("buildTarget/cleanCache") { def classFile = svr.baseDirectory.toPath.resolve( - "target/out/jvm/scala-2.13.8/runandtest/backend/main/Main.class" + "target/out/jvm/scala-2.13.11/runandtest/backend/main/Main.class" ) val buildTarget = buildTargetUri("runAndTest", "Compile") compile(buildTarget) @@ -327,7 +327,7 @@ class BuildServerTest extends AbstractServerTest { s""""id":"$id"""", """"error"""", s""""code":${ErrorCodes.InternalError}""", - "Type error in expression" + "String cannot be appended to Seq[String]" )() // fix the other-build.sbt file and reload again Files.write( @@ -392,7 +392,7 @@ class BuildServerTest extends AbstractServerTest { "jsoniter-scala-core_2.13-2.13.11.jar", // compile dependency "\"jvmOptions\":[\"Xmx256M\"]", "\"environmentVariables\":{\"KEY\":\"VALUE\"}", - "/buildserver/run-and-test/" // working directory + "/buildserver/run-and-test" // working directory )() } From 299f7b4543dce9ccbc73ea03a9db3b58f739a896 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 5 Jun 2024 16:34:34 +0200 Subject: [PATCH 203/207] Fix ResponseTest --- server-test/src/test/scala/testpkg/ResponseTest.scala | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server-test/src/test/scala/testpkg/ResponseTest.scala b/server-test/src/test/scala/testpkg/ResponseTest.scala index 82b693b3b..21f5a32a5 100644 --- a/server-test/src/test/scala/testpkg/ResponseTest.scala +++ b/server-test/src/test/scala/testpkg/ResponseTest.scala @@ -16,9 +16,10 @@ class ResponseTest extends AbstractServerTest { test("response from a command") { svr.sendJsonRpc("""{ "jsonrpc": "2.0", "id": "10", "method": "foo/export", "params": {} }""") assert(svr.waitForString(10.seconds) { s => - if (!s.contains("systemOut")) println(s) + if (!s.contains("systemOut")) + println(s) (s contains """"id":"10"""") && - (s contains "scala-library-2.12.17.jar") + (s contains "scala-library-2.12.19.jar") }) } @@ -29,7 +30,7 @@ class ResponseTest extends AbstractServerTest { assert(svr.waitForString(10.seconds) { s => if (!s.contains("systemOut")) println(s) (s contains """"id":"11"""") && - (s contains "scala-library-2.12.17.jar") + (s contains "scala-library-2.12.19.jar") }) } From 3ec8bd22695a99437abb9b44dae6ece7c1aa7051 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Thu, 6 Jun 2024 17:41:20 +0200 Subject: [PATCH 204/207] Fix fetching Scala 2.13.12 bridges --- main/src/main/scala/sbt/Defaults.scala | 3 ++- main/src/main/scala/sbt/coursierint/LMCoursier.scala | 12 +++--------- .../sbt/internal/inc/ZincComponentCompiler.scala | 4 +--- .../src/main/scala/sbt/internal/inc/ZincLmUtil.scala | 10 +++++----- 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 6e44ba080..28fcacfab 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -735,7 +735,8 @@ object Defaults extends BuildCommon { scalaCompilerBridgeBinaryJar := Def.settingDyn { val sv = scalaVersion.value val managed = managedScalaInstance.value - if (ScalaArtifacts.isScala3(sv) && managed) fetchBridgeBinaryJarTask(sv) + val hasSbtBridge = ScalaArtifacts.isScala3(sv) || ZincLmUtil.hasScala2SbtBridge(sv) + if (hasSbtBridge && managed) fetchBridgeBinaryJarTask(sv) else Def.task[Option[File]](None) }.value, scalaCompilerBridgeSource := ZincLmUtil.getDefaultBridgeSourceModule(scalaVersion.value), diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index c940f3c7f..dd577c880 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -79,7 +79,6 @@ object LMCoursier { extraProjects: Seq[CProject], fallbackDeps: Seq[FallbackDependency], appConfig: AppConfiguration, - classifiers: Option[Seq[Classifier]], profiles: Set[String], scalaOrg: String, scalaVer: String, @@ -134,8 +133,6 @@ object LMCoursier { .withSbtScalaJars(sbtBootJars.toVector) .withSbtScalaVersion(sbtScalaVersion) .withSbtScalaOrganization(sbtScalaOrganization) - .withClassifiers(classifiers.toVector.flatten.map(_.value)) - .withHasClassifiers(classifiers.nonEmpty) .withMavenProfiles(profiles.toVector.sorted) .withScalaOrganization(scalaOrg) .withScalaVersion(scalaVer) @@ -159,7 +156,6 @@ object LMCoursier { csrExtraProjects.value.toVector, csrFallbackDependencies.value, appConfiguration.value, - None, csrMavenProfiles.value, scalaOrganization.value, sv, @@ -181,10 +177,10 @@ object LMCoursier { } def updateClassifierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { - val classifiers = Some(transitiveClassifiers.value.map(Classifier(_))) + val classifiers = transitiveClassifiers.value.map(Classifier(_)) coursierConfigurationTask.value - .withClassifiers(classifiers.toVector.flatten.map(_.value)) - .withHasClassifiers(classifiers.nonEmpty) + .withClassifiers(classifiers.toVector.map(_.value)) + .withHasClassifiers(true) } def updateSbtClassifierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { @@ -195,7 +191,6 @@ object LMCoursier { Vector(), csrFallbackDependencies.value, appConfiguration.value, - None, csrMavenProfiles.value, scalaOrganization.value, sv, @@ -224,7 +219,6 @@ object LMCoursier { Vector(), csrFallbackDependencies.value, appConfiguration.value, - None, csrMavenProfiles.value, scalaOrganization.value, sv, diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala index 65669e26f..05a9ea6f1 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincComponentCompiler.scala @@ -59,9 +59,7 @@ private[sbt] object ZincComponentCompiler { ): File = lock.synchronized { val raw = new RawCompiler( scalaInstance, - // TODO: - // ClasspathOptionsUtil.autoNoboot(scalaInstance.version), - ClasspathOptionsUtil.auto, + ClasspathOptionsUtil.autoNoboot(scalaInstance.version), logger ) val zinc = diff --git a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala index dc75c6dfb..1c8979f84 100644 --- a/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala +++ b/zinc-lm-integration/src/main/scala/sbt/internal/inc/ZincLmUtil.scala @@ -28,6 +28,10 @@ import xsbti.compile.{ ClasspathOptions, ScalaInstance => XScalaInstance } object ZincLmUtil { final val scala2SbtBridgeStart = "2.13.12" + def hasScala2SbtBridge(sv: String): Boolean = + VersionNumber(sv).matchesSemVer( + SemanticSelector(s"=2.13 >=$scala2SbtBridgeStart") + ) /** * Instantiate a Scala compiler that is instrumented to analyze dependencies. @@ -90,11 +94,7 @@ object ZincLmUtil { if (ScalaArtifacts.isScala3(scalaVersion)) { ModuleID(ScalaArtifacts.Organization, "scala3-sbt-bridge", scalaVersion) .withConfigurations(Some(Compile.name)) - } else if ( - VersionNumber(scalaVersion).matchesSemVer( - SemanticSelector(s"=2.13 >=$scala2SbtBridgeStart") - ) - ) { + } else if (hasScala2SbtBridge(scalaVersion)) { ModuleID(ScalaArtifacts.Organization, "scala2-sbt-bridge", scalaVersion) .withConfigurations(Some(Compile.name)) } else { From 4752e180fd0bdd5bc5157d9f97cc7db647be584d Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 Jun 2024 17:56:17 -0400 Subject: [PATCH 205/207] Update lm --- main/src/main/scala/sbt/Defaults.scala | 7 +++++-- main/src/main/scala/sbt/RemoteCache.scala | 2 +- main/src/main/scala/sbt/coursierint/LMCoursier.scala | 6 +++--- main/src/main/scala/sbt/internal/Load.scala | 2 +- project/Dependencies.scala | 4 ++-- .../sbt/internal/inc/IvyBridgeProviderSpecification.scala | 2 +- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 28fcacfab..a741fa37c 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -3390,7 +3390,10 @@ object Classpaths { val sv = scalaVersion.value s"$p/scala-$sv/$m" }, - ivyPaths := IvyPaths(baseDirectory.value, bootIvyHome(appConfiguration.value)), + ivyPaths := IvyPaths( + baseDirectory.value.toString, + bootIvyHome(appConfiguration.value).map(_.toString) + ), csrCacheDirectory := { val old = csrCacheDirectory.value val ac = appConfiguration.value @@ -3402,7 +3405,7 @@ object Classpaths { else if (ip.ivyHome == defaultIvyCache) old else ip.ivyHome match { - case Some(home) => home / "coursier-cache" + case Some(home) => new File(home) / "coursier-cache" case _ => old } } else Classpaths.dummyCoursierDirectory(ac) diff --git a/main/src/main/scala/sbt/RemoteCache.scala b/main/src/main/scala/sbt/RemoteCache.scala index faf2e88c1..14bc67ccd 100644 --- a/main/src/main/scala/sbt/RemoteCache.scala +++ b/main/src/main/scala/sbt/RemoteCache.scala @@ -80,7 +80,7 @@ object RemoteCache { val app = appConfiguration.value val base = app.baseDirectory.getCanonicalFile // base is used only to resolve relative paths, which should never happen - IvyPaths(base, localCacheDirectory.value) + IvyPaths(base.toString, localCacheDirectory.value.toString) }, rootOutputDirectory := { appConfiguration.value.baseDirectory diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index dd577c880..0838b90aa 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -167,7 +167,7 @@ object LMCoursier { csrLogger.value, csrCacheDirectory.value, csrReconciliations.value, - ivyPaths.value.ivyHome, + ivyPaths.value.ivyHome.map(new File(_)), CoursierInputsTasks.strictTask.value, dependencyOverrides.value, Some(updateConfiguration.value), @@ -202,7 +202,7 @@ object LMCoursier { csrLogger.value, csrCacheDirectory.value, csrReconciliations.value, - ivyPaths.value.ivyHome, + ivyPaths.value.ivyHome.map(new File(_)), CoursierInputsTasks.strictTask.value, dependencyOverrides.value, Some(updateConfiguration.value), @@ -230,7 +230,7 @@ object LMCoursier { csrLogger.value, csrCacheDirectory.value, csrReconciliations.value, - ivyPaths.value.ivyHome, + ivyPaths.value.ivyHome.map(new File(_)), CoursierInputsTasks.strictTask.value, dependencyOverrides.value, Some(updateConfiguration.value), diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 54884a295..136be4f7a 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -87,7 +87,7 @@ private[sbt] object Load { val ivyConfiguration = InlineIvyConfiguration() .withPaths( - IvyPaths(baseDirectory, bootIvyHome(state.configuration)) + IvyPaths(baseDirectory.toString, bootIvyHome(state.configuration).map(_.toString)) ) .withResolvers(Resolver.combineDefaultResolvers(Vector.empty)) .withLog(log) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index e79a43378..d12246e87 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.10.0") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("2.0.0-alpha15") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("2.0.0-alpha16") val zincVersion = nightlyVersion.getOrElse("2.0.0-alpha14") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion @@ -78,7 +78,7 @@ object Dependencies { def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCore", zincCompileCore) // val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.10" - val lmCoursierShaded = "ch.epfl.scala" %% "librarymanagement-coursier" % "2.0.0-alpha8" + val lmCoursierShaded = "org.scala-sbt" %% "librarymanagement-coursier" % "2.0.0-alpha8" lazy val sjsonNewVersion = "0.14.0-M1" def sjsonNew(n: String) = Def.setting( diff --git a/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala b/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala index d4245b7c4..e2255cee2 100644 --- a/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala +++ b/zinc-lm-integration/src/test/scala/sbt/internal/inc/IvyBridgeProviderSpecification.scala @@ -89,7 +89,7 @@ abstract class IvyBridgeProviderSpecification val resolvers = resolvers0.toVector val chainResolver = ChainedResolver("zinc-chain", resolvers) InlineIvyConfiguration() - .withPaths(IvyPaths(baseDirectory, Some(ivyHome))) + .withPaths(IvyPaths(baseDirectory.toString, Some(ivyHome.toString))) .withResolvers(resolvers) .withModuleConfigurations(Vector(ModuleConfiguration("*", chainResolver))) .withLock(None) From 862f4c4bca5f8113c79dfee422224381014b2d8d Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 Jun 2024 18:00:27 -0400 Subject: [PATCH 206/207] macos-12 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6ff14c21..1a50fded7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: java: 8 distribution: adopt jobtype: 7 - - os: macos-latest + - os: macos-12 java: 17 distribution: temurin jobtype: 8 From 40d7c59c54219e85e4e4dcee0504357ed9873832 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 9 Jun 2024 20:28:32 -0400 Subject: [PATCH 207/207] Fix scripted tests --- .../src/sbt-test/actions/cross-advanced/test | 12 ++++----- .../actions/cross-multiproject/build.sbt | 4 ++- .../cross-multiproject/{test => pending} | 0 .../cross-strict-aggregation/build.sbt | 3 ++- .../actions/cross-strict-aggregation/pending | 11 ++++++++ .../actions/cross-strict-aggregation/test | 11 -------- sbt-app/src/sbt-test/actions/doc/test | 4 +-- sbt-app/src/sbt-test/actions/generator/test | 2 +- .../actions/package-delete-target/test | 6 ++--- .../separate-analysis-per-scala/test | 4 +-- .../{test => pending} | 0 .../sbt-plugin-diamond/build.sbt | 5 +++- .../sbt-plugin-diamond/{test => disabled} | 0 .../sbt-plugin-publish/{test => disabled} | 0 .../build.sbt | 13 +++++++--- sbt-app/src/sbt-test/java/argfile/build.sbt | 2 +- .../generated-root-no-publish/build.sbt | 8 +++--- .../changes/bare.sbt | 5 +++- .../project1/transitive-plugins/build.sbt | 11 +++++--- .../reporter/command-progress/build.sbt | 25 +++++++++---------- .../run/spawn-exit/{test => disabled} | 0 .../src/sbt-test/run/spawn/{test => disabled} | 0 .../sbt-test/tests/junit-xml-report/build.sbt | 8 +++--- 23 files changed, 77 insertions(+), 57 deletions(-) rename sbt-app/src/sbt-test/actions/cross-multiproject/{test => pending} (100%) create mode 100644 sbt-app/src/sbt-test/actions/cross-strict-aggregation/pending delete mode 100644 sbt-app/src/sbt-test/actions/cross-strict-aggregation/test rename sbt-app/src/sbt-test/dependency-management/conflict-manager-with-org/{test => pending} (100%) rename sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/{test => disabled} (100%) rename sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/{test => disabled} (100%) rename sbt-app/src/sbt-test/run/spawn-exit/{test => disabled} (100%) rename sbt-app/src/sbt-test/run/spawn/{test => disabled} (100%) diff --git a/sbt-app/src/sbt-test/actions/cross-advanced/test b/sbt-app/src/sbt-test/actions/cross-advanced/test index dda1826a8..06dfb2d91 100644 --- a/sbt-app/src/sbt-test/actions/cross-advanced/test +++ b/sbt-app/src/sbt-test/actions/cross-advanced/test @@ -19,9 +19,9 @@ ## for command cross building you do need crossScalaVerions on root > set root/crossScalaVersions := Seq("2.12.19", "2.13.12") > + build -$ exists target/out/jvm/scala-2.12.17/foo -$ exists target/out/jvm/scala-2.13.1/foo -$ exists target/out/jvm/scala-2.12.17/bar -$ exists target/out/jvm/scala-2.13.1/bar -$ exists target/out/jvm/scala-2.12.17/client -$ exists target/out/jvm/scala-2.13.1/client +$ exists target/out/jvm/scala-2.12.19/foo +$ exists target/out/jvm/scala-2.13.12/foo +$ exists target/out/jvm/scala-2.12.19/bar +$ exists target/out/jvm/scala-2.13.12/bar +$ exists target/out/jvm/scala-2.12.19/client +$ exists target/out/jvm/scala-2.13.12/client diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt index 89dacd83d..f6fb39bcb 100644 --- a/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-multiproject/build.sbt @@ -1,4 +1,4 @@ -lazy val scala3 = "3.2.1" +lazy val scala3 = "3.3.1" lazy val scala213 = "2.13.1" crossScalaVersions := Seq(scala3, scala213) @@ -27,3 +27,5 @@ lazy val extrasProj = (project in file("extras")) .settings( name := "foo-extras", ) + +lazy val externalProj = ProjectRef(file("ref"), "external") diff --git a/sbt-app/src/sbt-test/actions/cross-multiproject/test b/sbt-app/src/sbt-test/actions/cross-multiproject/pending similarity index 100% rename from sbt-app/src/sbt-test/actions/cross-multiproject/test rename to sbt-app/src/sbt-test/actions/cross-multiproject/pending diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt index 68540aadb..5ddafe8b5 100644 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/build.sbt @@ -11,7 +11,8 @@ lazy val root = (project in file(".")) lazy val core = (project in file("core")) .settings( - crossScalaVersions := Seq(scala212, scala213)) + crossScalaVersions := Seq(scala212, scala213), + ) lazy val module = (project in file("module")) .dependsOn(core) diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/pending b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/pending new file mode 100644 index 000000000..3b55656f6 --- /dev/null +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/pending @@ -0,0 +1,11 @@ +-> ++2.12.0-magic + +> ++2.12.19 + +> clean + +> ++2.13.12 compile + +$ exists target/out/jvm/scala-2.13.12/core/core_2.13-0.1.0-SNAPSHOT-noresources.jar +-$ exists target/out/jvm/scala-2.13.12/module +-$ exists target/out/jvm/scala-2.12.19/module diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test b/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test deleted file mode 100644 index f24e975c6..000000000 --- a/sbt-app/src/sbt-test/actions/cross-strict-aggregation/test +++ /dev/null @@ -1,11 +0,0 @@ --> ++2.12.0-magic - -> ++2.12.12 - -> clean - -> ++2.13.12 compile - -$ exists target/out/jvm/scala-2.13.1/core/core_2.13-0.1.0-SNAPSHOT-noresources.jar --$ exists target/out/jvm/scala-2.13.1/module --$ exists target/out/jvm/scala-2.12.18/module diff --git a/sbt-app/src/sbt-test/actions/doc/test b/sbt-app/src/sbt-test/actions/doc/test index 0b3d46016..14fd9b04d 100644 --- a/sbt-app/src/sbt-test/actions/doc/test +++ b/sbt-app/src/sbt-test/actions/doc/test @@ -43,5 +43,5 @@ $ absent target/out/jvm/scala-2.12.19/root/api/index.js > clean $ absent target/out/jvm/scala-2.12.19/root/api/A$.html > doc -$ exists target/out/jvm/scala-2.13.3/root/api/A$.html -$ exists target/out/jvm/scala-2.13.3/root/api/B$.html +$ exists target/out/jvm/scala-2.13.12/root/api/A$.html +$ exists target/out/jvm/scala-2.13.12/root/api/B$.html diff --git a/sbt-app/src/sbt-test/actions/generator/test b/sbt-app/src/sbt-test/actions/generator/test index b568c3497..672c7cc9f 100644 --- a/sbt-app/src/sbt-test/actions/generator/test +++ b/sbt-app/src/sbt-test/actions/generator/test @@ -1,2 +1,2 @@ > compile -$ exists target/out/jvm/scala-2.12.12/root/src_managed/BuildInfo.scala +$ exists target/out/jvm/scala-2.12.19/root/src_managed/BuildInfo.scala diff --git a/sbt-app/src/sbt-test/actions/package-delete-target/test b/sbt-app/src/sbt-test/actions/package-delete-target/test index a4f29a7c5..cfca1bb64 100644 --- a/sbt-app/src/sbt-test/actions/package-delete-target/test +++ b/sbt-app/src/sbt-test/actions/package-delete-target/test @@ -1,4 +1,4 @@ -$ mkdir target/out/jvm/scala-2.12.18/delete-target/delete-target_2.12-0.1.0-SNAPSHOT.jar -$ touch target/out/jvm/scala-2.12.18/delete-target/delete-target_2.12-0.1.0-SNAPSHOT.jar/hello +$ mkdir target/out/jvm/scala-2.12.19/delete-target/delete-target_2.12-0.1.0-SNAPSHOT.jar +$ touch target/out/jvm/scala-2.12.19/delete-target/delete-target_2.12-0.1.0-SNAPSHOT.jar/hello -> package -$ exists target/out/jvm/scala-2.12.18/delete-target/delete-target_2.12-0.1.0-SNAPSHOT.jar/hello +$ exists target/out/jvm/scala-2.12.19/delete-target/delete-target_2.12-0.1.0-SNAPSHOT.jar/hello diff --git a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/test b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/test index fc6216380..1643abf15 100644 --- a/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/test +++ b/sbt-app/src/sbt-test/compiler-project/separate-analysis-per-scala/test @@ -1,3 +1,3 @@ > + compile -$ exists target/out/jvm/scala-2.12.12/foo -$ exists target/out/jvm/scala-2.13.1/foo +$ exists target/out/jvm/scala-2.12.19/foo +$ exists target/out/jvm/scala-2.13.12/foo diff --git a/sbt-app/src/sbt-test/dependency-management/conflict-manager-with-org/test b/sbt-app/src/sbt-test/dependency-management/conflict-manager-with-org/pending similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/conflict-manager-with-org/test rename to sbt-app/src/sbt-test/dependency-management/conflict-manager-with-org/pending diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt index 1a33daa26..6b213123d 100644 --- a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/build.sbt @@ -87,7 +87,10 @@ lazy val v5 = project ) def localCache = - ivyPaths := IvyPaths(baseDirectory.value, Some((ThisBuild / baseDirectory).value / "ivy-cache")) + ivyPaths := IvyPaths( + baseDirectory.value.toString, + Some(((ThisBuild / baseDirectory).value / "ivy-cache").toString) + ) lazy val checkUpdate = taskKey[Unit]("check the resolved artifacts") diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/disabled similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/test rename to sbt-app/src/sbt-test/dependency-management/sbt-plugin-diamond/disabled diff --git a/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test b/sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/disabled similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/test rename to sbt-app/src/sbt-test/dependency-management/sbt-plugin-publish/disabled diff --git a/sbt-app/src/sbt-test/ivy-deps-management/update-classifiers-snapshot-srcs/build.sbt b/sbt-app/src/sbt-test/ivy-deps-management/update-classifiers-snapshot-srcs/build.sbt index 64ad6b758..fbd3c5f71 100644 --- a/sbt-app/src/sbt-test/ivy-deps-management/update-classifiers-snapshot-srcs/build.sbt +++ b/sbt-app/src/sbt-test/ivy-deps-management/update-classifiers-snapshot-srcs/build.sbt @@ -7,19 +7,23 @@ val commonSettings = Seq[Def.Setting[_]]( organization := "org.example", version := "1.0-SNAPSHOT", scalaVersion := "2.11.7", - ivyPaths := IvyPaths((baseDirectory in ThisBuild).value, Some(ivyHome.value)), + ivyPaths := IvyPaths((baseDirectory in ThisBuild).value.toString, Some(ivyHome.value.toString)), fullResolvers := fullResolvers.value.filterNot(_ == projectResolver.value) ) lazy val bippy = project settings ( commonSettings, - resolvers += Resolver.file("ivy-local", file(sys.props("user.home")) / ".ivy2" / "local")(Resolver.ivyStylePatterns), + resolvers += Resolver + .file("ivy-local", file(sys.props("user.home")) / ".ivy2" / "local")(Resolver.ivyStylePatterns), publishTo := Some(Resolver.file("local-repo", localRepo.value)) ) lazy val myapp = project settings ( commonSettings, - resolvers += new MavenRepository("local-repo", localRepo.value.toURL.toString) withLocalIfFile false, + resolvers += new MavenRepository( + "local-repo", + localRepo.value.toURL.toString + ) withLocalIfFile false, libraryDependencies += "org.example" %% "bippy" % "1.0-SNAPSHOT" ) @@ -29,7 +33,8 @@ InputKey[Unit]("check") := { val jarname = "bippy_2.11-1.0-SNAPSHOT-sources.jar" val file1 = ivyHome.value / "cache" / "org.example" / "bippy_2.11" / "srcs" / jarname - val file2 = ivyHome.value / "maven-cache" / "org" / "example" / "bippy_2.11" / "1.0-SNAPSHOT" / jarname + val file2 = + ivyHome.value / "maven-cache" / "org" / "example" / "bippy_2.11" / "1.0-SNAPSHOT" / jarname val file = if (file1.exists()) file1 else if (file2.exists) file2 else sys error s"$jarname MIA" val jar = new java.util.jar.JarFile(file) val s = IO readStream jar.getInputStream(jar.getJarEntry("Bippy.scala")) diff --git a/sbt-app/src/sbt-test/java/argfile/build.sbt b/sbt-app/src/sbt-test/java/argfile/build.sbt index c31ca0ae8..7b1038980 100644 --- a/sbt-app/src/sbt-test/java/argfile/build.sbt +++ b/sbt-app/src/sbt-test/java/argfile/build.sbt @@ -1,7 +1,7 @@ Configurations.Compile / scalaSource := (sourceDirectory.value / " scala test ") Configurations.Compile / javaSource := (sourceDirectory.value / " java test ") -TaskKey[Unit]("init") := { +TaskKey[Unit]("init0") := { val ss = (Configurations.Compile / scalaSource).value val js = (Configurations.Compile / javaSource).value import IO._ diff --git a/sbt-app/src/sbt-test/project1/generated-root-no-publish/build.sbt b/sbt-app/src/sbt-test/project1/generated-root-no-publish/build.sbt index ae666eb28..6408dd195 100644 --- a/sbt-app/src/sbt-test/project1/generated-root-no-publish/build.sbt +++ b/sbt-app/src/sbt-test/project1/generated-root-no-publish/build.sbt @@ -4,11 +4,13 @@ ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-c val commonSettings = Seq( organization := "com.example", version := "0.1.0", - ivyPaths := IvyPaths((LocalRootProject / baseDirectory).value, Some((LocalRootProject / target).value / "ivy-cache")) + ivyPaths := IvyPaths( + (LocalRootProject / baseDirectory).value.toString, + Some(((LocalRootProject / target).value / "ivy-cache").toString) + ) ) -lazy val app = (project in file("app")). - settings(commonSettings: _*) +lazy val app = (project in file("app")).settings(commonSettings: _*) name := "generated-root-no-publish" commonSettings diff --git a/sbt-app/src/sbt-test/project1/generated-root-no-publish/changes/bare.sbt b/sbt-app/src/sbt-test/project1/generated-root-no-publish/changes/bare.sbt index 80e595cfb..9a5aac831 100644 --- a/sbt-app/src/sbt-test/project1/generated-root-no-publish/changes/bare.sbt +++ b/sbt-app/src/sbt-test/project1/generated-root-no-publish/changes/bare.sbt @@ -3,4 +3,7 @@ ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-c organization := "com.example" version := "0.1.0" -ivyPaths := IvyPaths((LocalRootProject / baseDirectory).value, Some((LocalRootProject / target).value / "ivy-cache")) +ivyPaths := IvyPaths( + (LocalRootProject / baseDirectory).value.toString, + Some(((LocalRootProject / target).value / "ivy-cache").toString) +) diff --git a/sbt-app/src/sbt-test/project1/transitive-plugins/build.sbt b/sbt-app/src/sbt-test/project1/transitive-plugins/build.sbt index a3a4057ec..ecbe2e0c2 100644 --- a/sbt-app/src/sbt-test/project1/transitive-plugins/build.sbt +++ b/sbt-app/src/sbt-test/project1/transitive-plugins/build.sbt @@ -7,12 +7,17 @@ lazy val root = (project in file(".")) ) lazy val commonSettings = Seq( - ivyPaths := IvyPaths((baseDirectory in ThisBuild).value, Some((target in LocalRootProject).value / "ivy-cache")), + ivyPaths := IvyPaths( + (baseDirectory in ThisBuild).value.toString, + Some(((target in LocalRootProject).value / "ivy-cache").toString) + ), publishTo := Some(Resolver.file("test-publish", (baseDirectory in ThisBuild).value / "repo/")), // to get sbt artifacts resolvers += { - val ivyHome = Classpaths.bootIvyHome(appConfiguration.value) getOrElse sys.error("Launcher did not provide the Ivy home directory.") - Resolver.file("real-local", ivyHome / "local")(Resolver.ivyStylePatterns) + val ivyHome = Classpaths.bootIvyHome(appConfiguration.value) getOrElse sys.error( + "Launcher did not provide the Ivy home directory." + ) + Resolver.file("real-local", ivyHome / "local")(Resolver.ivyStylePatterns) }, resolvers += Resolver.mavenLocal, resolvers += ("test-repo" at ((baseDirectory in ThisBuild).value / "repo/").asURL.toString) diff --git a/sbt-app/src/sbt-test/reporter/command-progress/build.sbt b/sbt-app/src/sbt-test/reporter/command-progress/build.sbt index 08f7a7492..81985c63a 100644 --- a/sbt-app/src/sbt-test/reporter/command-progress/build.sbt +++ b/sbt-app/src/sbt-test/reporter/command-progress/build.sbt @@ -1,4 +1,4 @@ -commandProgress += new ExecuteProgress2 { +commandProgress += new ExecuteProgress2: override def beforeCommand(cmd: String, state: State): Unit = { EventLog.logs += (s"BEFORE: $cmd") // assert that `state` is the current state indeed @@ -7,21 +7,20 @@ commandProgress += new ExecuteProgress2 { } override def afterCommand(cmd: String, result: Either[Throwable, State]): Unit = { EventLog.logs += (s"AFTER: $cmd") - result.left.foreach(EventLog.errors +=) + result.left.foreach(EventLog.errors += _) } override def initial(): Unit = {} override def afterRegistered( - task: Task[_], - allDeps: Iterable[Task[_]], - pendingDeps: Iterable[Task[_]] - ): Unit = {} - override def afterReady(task: Task[_]): Unit = {} - override def beforeWork(task: Task[_]): Unit = {} - override def afterWork[A](task: Task[A], result: Either[Task[A], Result[A]]): Unit = {} - override def afterCompleted[A](task: Task[A], result: Result[A]): Unit = {} - override def afterAllCompleted(results: RMap[Task, Result]): Unit = {} - override def stop(): Unit = {} -} + task: TaskId[?], + allDeps: Iterable[TaskId[?]], + pendingDeps: Iterable[TaskId[?]] + ): Unit = () + override def afterReady(task: TaskId[_]): Unit = () + override def beforeWork(task: TaskId[_]): Unit = () + override def afterWork[A](task: TaskId[A], result: Either[TaskId[A], Result[A]]): Unit = () + override def afterCompleted[A](task: TaskId[A], result: Result[A]): Unit = () + override def afterAllCompleted(results: RMap[TaskId, Result]): Unit = () + override def stop(): Unit = () val check = taskKey[Unit]("Check basic command events") val checkParseError = taskKey[Unit]("Check that parse error is recorded") diff --git a/sbt-app/src/sbt-test/run/spawn-exit/test b/sbt-app/src/sbt-test/run/spawn-exit/disabled similarity index 100% rename from sbt-app/src/sbt-test/run/spawn-exit/test rename to sbt-app/src/sbt-test/run/spawn-exit/disabled diff --git a/sbt-app/src/sbt-test/run/spawn/test b/sbt-app/src/sbt-test/run/spawn/disabled similarity index 100% rename from sbt-app/src/sbt-test/run/spawn/test rename to sbt-app/src/sbt-test/run/spawn/disabled diff --git a/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt b/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt index 498d69369..c63d4c94f 100644 --- a/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt +++ b/sbt-app/src/sbt-test/tests/junit-xml-report/build.sbt @@ -6,14 +6,14 @@ val checkReport = taskKey[Unit]("Check the test reports") val checkNoReport = taskKey[Unit]("Check that no reports are present") val oneSecondReportFile = - "target/out/jvm/scala-2.12.18/root/test-reports/TEST-a.pkg.OneSecondTest.xml" + "target/out/jvm/scala-2.12.19/root/test-reports/TEST-a.pkg.OneSecondTest.xml" val failingReportFile = - "target/out/jvm/scala-2.12.18/root/test-reports/TEST-another.pkg.FailingTest.xml" + "target/out/jvm/scala-2.12.19/root/test-reports/TEST-another.pkg.FailingTest.xml" val flatSuiteReportFile = - "target/out/jvm/scala-2.12.18/root/test-reports/TEST-my.scalatest.MyFlatSuite.xml" + "target/out/jvm/scala-2.12.19/root/test-reports/TEST-my.scalatest.MyFlatSuite.xml" val nestedSuitesReportFile = - "target/out/jvm/scala-2.12.18/root/test-reports/TEST-my.scalatest.MyNestedSuites.xml" + "target/out/jvm/scala-2.12.19/root/test-reports/TEST-my.scalatest.MyNestedSuites.xml" val scalatest = "org.scalatest" %% "scalatest" % "3.0.5" val junitinterface = "com.novocode" % "junit-interface" % "0.11"