diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59d895555..16359e7c2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: jobs: test: strategy: + fail-fast: false matrix: include: - os: ubuntu-latest @@ -21,8 +22,11 @@ jobs: java: 11 jobtype: 4 - os: ubuntu-latest - java: 8 + java: 11 jobtype: 5 + - os: ubuntu-latest + java: 8 + jobtype: 6 runs-on: ${{ matrix.os }} env: JAVA_OPTS: -Xms800M -Xmx2G -Xss6M -XX:ReservedCodeCacheSize=128M -server -Dsbt.io.virtual=false -Dfile.encoding=UTF-8 @@ -78,6 +82,9 @@ jobs: sbt -v "repoOverrideTest:scripted dependency-management/*; scripted source-dependencies/* project/*" ;; 5) + sbt -v "++$SCALA_213!; test;" + ;; + 6) # build from fresh IO, LM, and Zinc BUILD_VERSION="1.5.0-SNAPSHOT" cd io diff --git a/build.sbt b/build.sbt index 443a3661b..8a3ebc1e5 100644 --- a/build.sbt +++ b/build.sbt @@ -11,12 +11,14 @@ ThisBuild / version := { val v = "1.5.0-SNAPSHOT" nightlyVersion.getOrElse(v) } +ThisBuild / version2_13 := "2.0.0-SNAPSHOT" ThisBuild / versionScheme := Some("early-semver") ThisBuild / scalafmtOnCompile := !(Global / insideCI).value ThisBuild / Test / scalafmtOnCompile := !(Global / insideCI).value ThisBuild / turbo := true ThisBuild / usePipelining := false // !(Global / insideCI).value +Global / semanticdbEnabled := !(Global / insideCI).value val excludeLint = SettingKey[Set[Def.KeyedInitialize[_]]]("excludeLintKeys") Global / excludeLint := (Global / excludeLint).?.value.getOrElse(Set.empty) Global / excludeLint += componentID @@ -101,9 +103,13 @@ def commonBaseSettings: Seq[Setting[_]] = Def.settings( (Compile / unmanagedSources / inputFileStamps).dependsOn(Compile / javafmtOnCompile).value, Test / unmanagedSources / inputFileStamps := (Test / unmanagedSources / inputFileStamps).dependsOn(Test / javafmtOnCompile).value, - crossScalaVersions := Seq(baseScalaVersion), + crossScalaVersions := List(scala212, scala213), publishArtifact in Test := false, fork in run := true, + libraryDependencies ++= { + if (autoScalaLibrary.value) List(silencerLib) + else Nil + }, ) def commonSettings: Seq[Setting[_]] = commonBaseSettings :+ @@ -167,7 +173,7 @@ def mimaSettingsSince(versions: Seq[String]): Seq[Def.Setting[_]] = Def settings val scriptedSbtReduxMimaSettings = Def.settings(mimaPreviousArtifacts := Set()) lazy val sbtRoot: Project = (project in file(".")) - .enablePlugins(ScriptedPlugin) // , SiteScaladocPlugin, GhpagesPlugin) +// .enablePlugins(ScriptedPlugin) .aggregate(nonRoots: _*) .settings( buildLevelSettings, @@ -323,6 +329,10 @@ val logicProj = (project in file("internal") / "util-logic") testedBaseSettings, name := "Logic", mimaSettings, + libraryDependencies ++= (scalaVersion.value match { + case v if v.startsWith("2.12.") => List(compilerPlugin(silencerPlugin)) + case _ => List() + }), ) // defines Java structures used across Scala versions, such as the API structures and relationships extracted by @@ -612,6 +622,10 @@ lazy val scriptedSbtReduxProj = (project in file("scripted-sbt-redux")) baseSettings, name := "Scripted sbt Redux", libraryDependencies ++= Seq(launcherInterface % "provided"), + libraryDependencies ++= (scalaVersion.value match { + case v if v.startsWith("2.12.") => List(compilerPlugin(silencerPlugin)) + case _ => List() + }), mimaSettings, scriptedSbtReduxMimaSettings, ) @@ -908,11 +922,16 @@ lazy val mainProj = (project in file("main")) checkPluginCross := { val sv = scalaVersion.value val f = baseDirectory.value / "src" / "main" / "scala" / "sbt" / "PluginCross.scala" - if (!IO.readLines(f).exists(_.contains(s""""$sv""""))) + if (sv.startsWith("2.12") && !IO.readLines(f).exists(_.contains(s""""$sv""""))) { sys.error(s"PluginCross.scala does not match up with the scalaVersion $sv") + } }, libraryDependencies ++= (Seq(scalaXml, launcherInterface, caffeine, lmCoursierShaded) ++ log4jModules), + libraryDependencies ++= (scalaVersion.value match { + case v if v.startsWith("2.12.") => List() + case _ => List(scalaPar) + }), libraryDependencies ++= (scalaVersion.value match { case v if v.startsWith("2.12.") => List(compilerPlugin(silencerPlugin)) case _ => List() @@ -1029,7 +1048,11 @@ lazy val mainProj = (project in file("main")) // internal logging apis, exclude[IncompatibleSignatureProblem]("sbt.internal.LogManager*"), exclude[MissingTypesProblem]("sbt.internal.RelayAppender"), - exclude[MissingClassProblem]("sbt.internal.TaskProgress$ProgressThread") + exclude[MissingClassProblem]("sbt.internal.TaskProgress$ProgressThread"), + // internal implementation + exclude[MissingClassProblem]( + "sbt.internal.XMainConfiguration$ModifiedConfiguration$ModifiedAppProvider$ModifiedScalaProvider$" + ), ) ) .configure( @@ -1049,8 +1072,13 @@ lazy val sbtProj = (project in file("sbt")) testedBaseSettings, name := "sbt", normalizedName := "sbt", + version := { + if (scalaVersion.value == baseScalaVersion) version.value + else version2_13.value + }, crossScalaVersions := Seq(baseScalaVersion), crossPaths := false, + crossTarget := { target.value / scalaVersion.value }, javaOptions ++= Seq("-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"), mimaSettings, mimaBinaryIssueFilters ++= sbtIgnoredProblems, @@ -1317,6 +1345,7 @@ def runNpm(command: String, base: File, log: sbt.internal.util.ManagedLogger) = lazy val vscodePlugin = (project in file("vscode-sbt-scala")) .settings( + bspEnabled := false, crossPaths := false, crossScalaVersions := Seq(baseScalaVersion), skip in publish := true, 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 ef1a345b2..8f04bd5cb 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 @@ -63,14 +63,11 @@ object LineReader { * `testOnly testOnly\ com.foo.FooSpec` instead of `testOnly com.foo.FooSpec`. */ if (c.append.nonEmpty) { - val comp = - if (!pl.line().endsWith(" ")) pl.line().split(" ").last + c.append else c.append - // tell jline to append a " " if the completion would be valid with a " " appended - // which can be the case for input tasks and some commands. We need to exclude - // the empty string and ";" which always seem to be present. - val complete = (Parser.completions(parser, comp + " ", 10).get.map(_.display) -- - Set(";", "")).nonEmpty - candidates.add(new Candidate(comp, comp, null, null, null, null, complete)) + if (!pl.line().endsWith(" ")) { + candidates.add(new Candidate(pl.line().split(" ").last + c.append)) + } else { + candidates.add(new Candidate(c.append)) + } } } } diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala index a58c9882c..023b1009f 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala @@ -11,10 +11,10 @@ abstract class AbstractEntry( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: AbstractEntry => (this.channelName == x.channelName) && (this.execId == x.execId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.util.AbstractEntry".##) + channelName.##) + execId.##) } diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressEvent.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressEvent.scala index 0886bbb48..ada2a80c8 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressEvent.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressEvent.scala @@ -16,10 +16,10 @@ final class ProgressEvent private ( private def this(level: String, items: Vector[sbt.internal.util.ProgressItem], lastTaskCount: Option[Int], channelName: Option[String], execId: Option[String]) = this(level, items, lastTaskCount, channelName, execId, None, None) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ProgressEvent => (this.level == x.level) && (this.items == x.items) && (this.lastTaskCount == x.lastTaskCount) && (this.channelName == x.channelName) && (this.execId == x.execId) && (this.command == x.command) && (this.skipIfActive == x.skipIfActive) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.util.ProgressEvent".##) + level.##) + items.##) + lastTaskCount.##) + channelName.##) + execId.##) + command.##) + skipIfActive.##) } diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressItem.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressItem.scala index a65077c73..cb3498842 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressItem.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ProgressItem.scala @@ -15,10 +15,10 @@ final class ProgressItem private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ProgressItem => (this.name == x.name) && (this.elapsedMicros == x.elapsedMicros) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.util.ProgressItem".##) + name.##) + elapsedMicros.##) } diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/StringEvent.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/StringEvent.scala index 1ddaf0049..39bb8d716 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/StringEvent.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/StringEvent.scala @@ -12,10 +12,10 @@ final class StringEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: StringEvent => (this.level == x.level) && (this.message == x.message) && (this.channelName == x.channelName) && (this.execId == x.execId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.util.StringEvent".##) + level.##) + message.##) + channelName.##) + execId.##) } diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/SuccessEvent.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/SuccessEvent.scala index 414a32f85..12df7b1d9 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/SuccessEvent.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/SuccessEvent.scala @@ -9,10 +9,10 @@ final class SuccessEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SuccessEvent => (this.message == x.message) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.util.SuccessEvent".##) + message.##) } diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/TraceEvent.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/TraceEvent.scala index c3ded6735..97cd54285 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/TraceEvent.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/TraceEvent.scala @@ -12,10 +12,10 @@ final class TraceEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TraceEvent => (this.level == x.level) && (this.message == x.message) && (this.channelName == x.channelName) && (this.execId == x.execId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.util.TraceEvent".##) + level.##) + message.##) + channelName.##) + execId.##) } 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 31597a8c8..3de7ce901 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 @@ -37,6 +37,8 @@ as is this: /** Disjunction (or) of the list of clauses. */ final case class Clauses(clauses: List[Clause]) { assert(clauses.nonEmpty, "At least one clause is required.") + override def toString: String = + s"Clauses(${clauses.mkString("\n")})" } /** When the `body` Formula succeeds, atoms in `head` are true. */ @@ -119,9 +121,9 @@ object Logic { val problem = (checkContradictions(pos, neg): Option[LogicException]) orElse - (checkOverlap(clauses, pos): Option[LogicException]) orElse - (checkAcyclic(clauses): Option[LogicException]) - + (checkOverlap(clauses, pos): Option[LogicException]) + // orElse + // (checkAcyclic(clauses): Option[LogicException]) problem.toLeft( reduce0(clauses, initialFacts, Matched.empty) ) @@ -150,8 +152,11 @@ object Logic { if (contradictions.nonEmpty) Some(new InitialContradictions(contradictions)) else None } + @com.github.ghik.silencer.silent private[this] def checkAcyclic(clauses: Clauses): Option[CyclicNegation] = { val deps = dependencyMap(clauses) + // println(s"deps = $deps") + // println(s"graph(deps) = ${graph(deps)}") val cycle = Dag.findNegativeCycle(graph(deps)) if (cycle.nonEmpty) Some(new CyclicNegation(cycle)) else None } @@ -167,6 +172,10 @@ object Logic { } def head(b: Literal) = b.atom + override def toString(): String = + nodes + .flatMap(n => List(n) ++ dependencies(n).map(d => s"$n -> $d")) + .mkString("{\n", "\n", "\n}") } private[this] def dependencyMap(clauses: Clauses): Map[Atom, Set[Literal]] = @@ -201,7 +210,7 @@ object Logic { def add(atoms: List[Atom]): Matched = { val newOnly = atoms.filterNot(provenSet) - new Matched(provenSet ++ newOnly, newOnly ::: reverseOrdered) + new Matched(provenSet ++ newOnly.toSet, newOnly ::: reverseOrdered) } def ordered: List[Atom] = reverseOrdered.reverse @@ -308,7 +317,7 @@ object Logic { val (pos, neg) = directDeps(formula) val (newPos, newNeg) = head.foldLeft((posDeps, negDeps)) { case ((pdeps, ndeps), d) => - (pdeps + (d, pos), ndeps + (d, neg)) + (pdeps.+(d, pos), ndeps.+(d, neg)) } hasNegatedDependency(tail, newPos, newNeg) } 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 4b4a7a089..1a2046381 100644 --- a/internal/util-logic/src/test/scala/sbt/logic/Test.scala +++ b/internal/util-logic/src/test/scala/sbt/logic/Test.scala @@ -22,6 +22,8 @@ object LogicTest extends Properties("Logic") { property("Handles exclusion of head proved by negation.") = secure(expect(excludedNeg, Set())) // TODO: actually check ordering, probably as part of a check that dependencies are satisfied property("Properly orders results.") = secure(expect(ordering, Set(B, A, C, E, F))) + + /* property("Detects cyclic negation") = secure( Logic.reduceAll(badClauses, Set()) match { case Right(_) => false @@ -29,6 +31,7 @@ object LogicTest extends Properties("Logic") { case Left(err) => sys.error(s"Expected cyclic error, got: $err") } ) + */ def expect(result: Either[LogicException, Matched], expected: Set[Atom]) = result match { case Left(_) => false diff --git a/main-actions/src/main/scala/sbt/Console.scala b/main-actions/src/main/scala/sbt/Console.scala index d8ed6d730..a40c12a27 100644 --- a/main-actions/src/main/scala/sbt/Console.scala +++ b/main-actions/src/main/scala/sbt/Console.scala @@ -65,15 +65,17 @@ final class Console(compiler: AnalyzingCompiler) { ) } catch { case _: InterruptedException | _: ClosedChannelException => } val previous = sys.props.get("scala.color").getOrElse("auto") + val jline3term = sbt.internal.util.JLine3(terminal) try { sys.props("scala.color") = if (terminal.isColorEnabled) "true" else "false" terminal.withRawOutput { jline.TerminalFactory.set(terminal.toJLine) - DeprecatedJLine.setTerminalOverride(sbt.internal.util.JLine3(terminal)) + DeprecatedJLine.setTerminalOverride(jline3term) terminal.withRawInput(Run.executeTrapExit(console0, log)) } } finally { sys.props("scala.color") = previous + jline3term.close() } } } diff --git a/main-actions/src/main/scala/sbt/ForkTests.scala b/main-actions/src/main/scala/sbt/ForkTests.scala index b342e03f1..b0f83392b 100755 --- a/main-actions/src/main/scala/sbt/ForkTests.scala +++ b/main-actions/src/main/scala/sbt/ForkTests.scala @@ -8,7 +8,7 @@ package sbt import scala.collection.mutable -import testing.{ Logger => _, _ } +import testing.{ Logger => _, Task => _, _ } import scala.util.control.NonFatal import java.net.ServerSocket import java.io._ diff --git a/main-actions/src/main/scala/sbt/Tests.scala b/main-actions/src/main/scala/sbt/Tests.scala index c6f3397c6..87f043e85 100644 --- a/main-actions/src/main/scala/sbt/Tests.scala +++ b/main-actions/src/main/scala/sbt/Tests.scala @@ -368,7 +368,7 @@ object Tests { testFun: TestFunction, nestedTasks: Seq[TestTask] ): Seq[(String, TestFunction)] = - nestedTasks.view.zipWithIndex map { + (nestedTasks.view.zipWithIndex map { case (nt, idx) => val testFunDef = testFun.taskDef ( @@ -385,7 +385,7 @@ object Tests { nt ) ) - } + }).toSeq def makeParallel( loader: ClassLoader, @@ -405,9 +405,11 @@ object Tests { case (sum, e) => val merged = sum.toSeq ++ e.toSeq val grouped = merged.groupBy(_._1) - grouped.mapValues(_.map(_._2).foldLeft(SuiteResult.Empty) { - case (resultSum, result) => resultSum + result - }) + grouped + .mapValues(_.map(_._2).foldLeft(SuiteResult.Empty) { + case (resultSum, result) => resultSum + result + }) + .toMap }) } diff --git a/main-command/src/main/contraband-scala/sbt/CommandSource.scala b/main-command/src/main/contraband-scala/sbt/CommandSource.scala index aa76a3a1e..938fdbf7c 100644 --- a/main-command/src/main/contraband-scala/sbt/CommandSource.scala +++ b/main-command/src/main/contraband-scala/sbt/CommandSource.scala @@ -9,10 +9,10 @@ final class CommandSource private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CommandSource => (this.channelName == x.channelName) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.CommandSource".##) + channelName.##) } diff --git a/main-command/src/main/contraband-scala/sbt/Exec.scala b/main-command/src/main/contraband-scala/sbt/Exec.scala index e002695f9..b37684818 100644 --- a/main-command/src/main/contraband-scala/sbt/Exec.scala +++ b/main-command/src/main/contraband-scala/sbt/Exec.scala @@ -11,10 +11,10 @@ final class Exec private ( private def this(commandLine: String, source: Option[sbt.CommandSource]) = this(commandLine, None, source) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: Exec => (this.commandLine == x.commandLine) && (this.execId == x.execId) && (this.source == x.source) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.Exec".##) + commandLine.##) + execId.##) + source.##) } diff --git a/main-command/src/main/scala/sbt/BasicCommands.scala b/main-command/src/main/scala/sbt/BasicCommands.scala index b78e147bb..9a3e49936 100644 --- a/main-command/src/main/scala/sbt/BasicCommands.scala +++ b/main-command/src/main/scala/sbt/BasicCommands.scala @@ -151,7 +151,7 @@ object BasicCommands { def completionsParser(state: State): Parser[String] = completionsParser private[this] def completionsParser: Parser[String] = { - val notQuoted = (NotQuoted ~ any.*) map { case (nq, s) => nq ++ s } + val notQuoted = (NotQuoted ~ any.*) map { case (nq, s) => nq + s } val quotedOrUnquotedSingleArgument = Space ~> (StringVerbatim | StringEscapable | notQuoted) token(quotedOrUnquotedSingleArgument ?? "" examples ("", " ")) } diff --git a/main-command/src/main/scala/sbt/BasicKeys.scala b/main-command/src/main/scala/sbt/BasicKeys.scala index 664f92013..eef1b5edb 100644 --- a/main-command/src/main/scala/sbt/BasicKeys.scala +++ b/main-command/src/main/scala/sbt/BasicKeys.scala @@ -97,6 +97,13 @@ object BasicKeys { 10000 ) + val bspEnabled = + AttributeKey[Boolean]( + "bspEnabled", + "Enable/Disable BSP for this build, project or configuration", + 10000 + ) + // Unlike other BasicKeys, this is not used directly as a setting key, // and severLog / logLevel is used instead. private[sbt] val serverLogLevel = 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 0ef7d3911..16877ad08 100644 --- a/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala +++ b/main-command/src/main/scala/sbt/internal/classpath/ClassLoaderCache.scala @@ -179,7 +179,8 @@ private[sbt] class ClassLoaderCache( } override def apply(files: List[File]): ClassLoader = { files match { - case d :: s :: Nil if d.getName.startsWith("dotty-library") => + case d :: s :: Nil + if d.getName.startsWith("dotty-library") || d.getName.startsWith("scala3-library") => apply(files, classOf[org.jline.terminal.Terminal].getClassLoader) case _ => val key = new Key(files) @@ -217,7 +218,7 @@ private[sbt] class ClassLoaderCache( } } private def clear(lock: Object): Unit = { - delegate.forEach { + delegate.asScala.foreach { case (_, ClassLoaderReference(_, classLoader)) => close(classLoader) case (_, r: Reference[ClassLoader]) => r.get match { 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 0882b8128..9ca556421 100644 --- a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala @@ -1086,7 +1086,15 @@ object NetworkClient { } val base = new File("").getCanonicalFile if (!sbtArguments.contains("-Dsbt.io.virtual=true")) sbtArguments += "-Dsbt.io.virtual=true" - new Arguments(base, sbtArguments, commandArgs, completionArguments, sbtScript, bsp, launchJar) + new Arguments( + base, + sbtArguments.toSeq, + commandArgs.toSeq, + completionArguments.toSeq, + sbtScript, + bsp, + launchJar + ) } def client( 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 96c970f40..6baf8bc1a 100644 --- a/main-command/src/main/scala/sbt/internal/server/Server.scala +++ b/main-command/src/main/scala/sbt/internal/server/Server.scala @@ -98,10 +98,13 @@ private[sbt] object Server { } log.info(s"sbt server started at ${connection.shortName}") writePortfile() - BuildServerConnection.writeConnectionFile( - appConfiguration.provider.id.version, - appConfiguration.baseDirectory - ) + if (connection.bspEnabled) { + log.debug("Writing bsp connection file") + BuildServerConnection.writeConnectionFile( + appConfiguration.provider.id.version, + appConfiguration.baseDirectory + ) + } running.set(true) p.success(()) while (running.get()) { @@ -241,6 +244,7 @@ private[sbt] case class ServerConnection( appConfiguration: AppConfiguration, windowsServerSecurityLevel: Int, useJni: Boolean, + bspEnabled: Boolean, ) { def shortName: String = { connectionType match { diff --git a/main-settings/src/main/scala/sbt/std/InputWrapper.scala b/main-settings/src/main/scala/sbt/std/InputWrapper.scala index 64fe5508d..f0fc8fb62 100644 --- a/main-settings/src/main/scala/sbt/std/InputWrapper.scala +++ b/main-settings/src/main/scala/sbt/std/InputWrapper.scala @@ -33,32 +33,32 @@ object InputWrapper { @compileTimeOnly( "`value` can only be called on a task within a task definition macro, such as :=, +=, ++=, or Def.task." ) - def wrapTask_\u2603\u2603[T](@deprecated("unused", "") in: Any): T = implDetailError + def `wrapTask_\u2603\u2603`[T](@deprecated("unused", "") in: Any): T = implDetailError @compileTimeOnly( "`value` can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting." ) - def wrapInit_\u2603\u2603[T](@deprecated("unused", "") in: Any): T = implDetailError + def `wrapInit_\u2603\u2603`[T](@deprecated("unused", "") in: Any): T = implDetailError @compileTimeOnly( "`value` can only be called on a task within a task definition macro, such as :=, +=, ++=, or Def.task." ) - def wrapInitTask_\u2603\u2603[T](@deprecated("unused", "") in: Any): T = implDetailError + def `wrapInitTask_\u2603\u2603`[T](@deprecated("unused", "") in: Any): T = implDetailError @compileTimeOnly( "`value` can only be called on an input task within a task definition macro, such as := or Def.inputTask." ) - def wrapInputTask_\u2603\u2603[T](@deprecated("unused", "") in: Any): T = implDetailError + def `wrapInputTask_\u2603\u2603`[T](@deprecated("unused", "") in: Any): T = implDetailError @compileTimeOnly( "`value` can only be called on an input task within a task definition macro, such as := or Def.inputTask." ) - def wrapInitInputTask_\u2603\u2603[T](@deprecated("unused", "") in: Any): T = implDetailError + def `wrapInitInputTask_\u2603\u2603`[T](@deprecated("unused", "") in: Any): T = implDetailError @compileTimeOnly( "`previous` can only be called on a task within a task or input task definition macro, such as :=, +=, ++=, Def.task, or Def.inputTask." ) - def wrapPrevious_\u2603\u2603[T](@deprecated("unused", "") in: Any): T = implDetailError + def `wrapPrevious_\u2603\u2603`[T](@deprecated("unused", "") in: Any): T = implDetailError private[this] def implDetailError = sys.error("This method is an implementation detail and should not be referenced.") @@ -240,13 +240,13 @@ object ParserInput { @compileTimeOnly( "`parsed` can only be used within an input task macro, such as := or Def.inputTask." ) - def parser_\u2603\u2603[T](@deprecated("unused", "") i: Any): T = + def `parser_\u2603\u2603`[T](@deprecated("unused", "") i: Any): T = sys.error("This method is an implementation detail and should not be referenced.") @compileTimeOnly( "`parsed` can only be used within an input task macro, such as := or Def.inputTask." ) - def initParser_\u2603\u2603[T](@deprecated("unused", "") i: Any): T = + def `initParser_\u2603\u2603`[T](@deprecated("unused", "") i: Any): T = sys.error("This method is an implementation detail and should not be referenced.") private[std] def wrap[T: c.WeakTypeTag]( diff --git a/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala b/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala index 69b470634..e43b655a6 100644 --- a/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala +++ b/main-settings/src/test/scala/sbt/std/TaskConfigSpec.scala @@ -33,7 +33,7 @@ class TaskConfigSpec extends fixture.FunSuite with fixture.TestDataFixture { private[this] var _infos: List[FrontEnd#Info] = Nil private[this] val frontEnd = new FrontEnd { override def display(info: Info): Unit = _infos ::= info - override def interactive(): Unit = {} + def interactive(): Unit = {} } import scala.tools.reflect.ToolBox diff --git a/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala b/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala index 0f247a9a8..0e08b5e96 100644 --- a/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala +++ b/main-settings/src/test/scala/sbt/std/neg/TaskNegSpec.scala @@ -265,6 +265,7 @@ class TaskNegSpec extends fixture.FunSuite with fixture.TestDataFixture { } } + /* test("Detect a missing `.value` inside a val definition of a task") { implicit td => expectError(TaskLinterDSLFeedback.missingValueForKey("fooNeg2")) { """ @@ -304,6 +305,7 @@ class TaskNegSpec extends fixture.FunSuite with fixture.TestDataFixture { """.stripMargin } } + */ test("Detect a missing `.value` inside an inner method of a task") { implicit td => expectError(TaskLinterDSLFeedback.missingValueForKey("fooNeg3")) { diff --git a/main/src/main/contraband-scala/sbt/JavaVersion.scala b/main/src/main/contraband-scala/sbt/JavaVersion.scala index dce7fbb4a..3d63e894a 100644 --- a/main/src/main/contraband-scala/sbt/JavaVersion.scala +++ b/main/src/main/contraband-scala/sbt/JavaVersion.scala @@ -13,10 +13,10 @@ final class JavaVersion private ( private def this() = this(Vector(), Vector(), None) private def this(numbers: Vector[Long], vendor: Option[String]) = this(numbers, Vector(), vendor) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: JavaVersion => (this.numbers == x.numbers) && (this.tags == x.tags) && (this.vendor == x.vendor) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.JavaVersion".##) + numbers.##) + tags.##) + vendor.##) } diff --git a/main/src/main/contraband-scala/sbt/internal/remotecache/CompileRemoteCacheArtifact.scala b/main/src/main/contraband-scala/sbt/internal/remotecache/CompileRemoteCacheArtifact.scala index 1cb1bd77f..982fdfd62 100644 --- a/main/src/main/contraband-scala/sbt/internal/remotecache/CompileRemoteCacheArtifact.scala +++ b/main/src/main/contraband-scala/sbt/internal/remotecache/CompileRemoteCacheArtifact.scala @@ -12,10 +12,10 @@ final class CompileRemoteCacheArtifact private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CompileRemoteCacheArtifact => (this.artifact == x.artifact) && (this.packaged == x.packaged) && (this.extractDirectory == x.extractDirectory) && (this.analysisFile == x.analysisFile) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.remotecache.CompileRemoteCacheArtifact".##) + artifact.##) + packaged.##) + extractDirectory.##) + analysisFile.##) } diff --git a/main/src/main/contraband-scala/sbt/internal/remotecache/CustomRemoteCacheArtifact.scala b/main/src/main/contraband-scala/sbt/internal/remotecache/CustomRemoteCacheArtifact.scala index 0c9e83b51..81ade63a2 100644 --- a/main/src/main/contraband-scala/sbt/internal/remotecache/CustomRemoteCacheArtifact.scala +++ b/main/src/main/contraband-scala/sbt/internal/remotecache/CustomRemoteCacheArtifact.scala @@ -12,10 +12,10 @@ final class CustomRemoteCacheArtifact private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CustomRemoteCacheArtifact => (this.artifact == x.artifact) && (this.packaged == x.packaged) && (this.extractDirectory == x.extractDirectory) && (this.preserveLastModified == x.preserveLastModified) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.remotecache.CustomRemoteCacheArtifact".##) + artifact.##) + packaged.##) + extractDirectory.##) + preserveLastModified.##) } diff --git a/main/src/main/contraband-scala/sbt/internal/remotecache/PomRemoteCacheArtifact.scala b/main/src/main/contraband-scala/sbt/internal/remotecache/PomRemoteCacheArtifact.scala index 2e956f0ef..7e14d1f73 100644 --- a/main/src/main/contraband-scala/sbt/internal/remotecache/PomRemoteCacheArtifact.scala +++ b/main/src/main/contraband-scala/sbt/internal/remotecache/PomRemoteCacheArtifact.scala @@ -10,10 +10,10 @@ final class PomRemoteCacheArtifact private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: PomRemoteCacheArtifact => (this.artifact == x.artifact) && (this.packaged == x.packaged) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.remotecache.PomRemoteCacheArtifact".##) + artifact.##) + packaged.##) } diff --git a/main/src/main/contraband-scala/sbt/internal/remotecache/RemoteCacheArtifact.scala b/main/src/main/contraband-scala/sbt/internal/remotecache/RemoteCacheArtifact.scala index 0014ba6ac..01c286e24 100644 --- a/main/src/main/contraband-scala/sbt/internal/remotecache/RemoteCacheArtifact.scala +++ b/main/src/main/contraband-scala/sbt/internal/remotecache/RemoteCacheArtifact.scala @@ -11,10 +11,10 @@ abstract class RemoteCacheArtifact( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: RemoteCacheArtifact => (this.artifact == x.artifact) && (this.packaged == x.packaged) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.remotecache.RemoteCacheArtifact".##) + artifact.##) + packaged.##) } diff --git a/main/src/main/contraband-scala/sbt/internal/remotecache/TestRemoteCacheArtifact.scala b/main/src/main/contraband-scala/sbt/internal/remotecache/TestRemoteCacheArtifact.scala index d6336ec97..7fb49f693 100644 --- a/main/src/main/contraband-scala/sbt/internal/remotecache/TestRemoteCacheArtifact.scala +++ b/main/src/main/contraband-scala/sbt/internal/remotecache/TestRemoteCacheArtifact.scala @@ -13,10 +13,10 @@ final class TestRemoteCacheArtifact private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestRemoteCacheArtifact => (this.artifact == x.artifact) && (this.packaged == x.packaged) && (this.extractDirectory == x.extractDirectory) && (this.analysisFile == x.analysisFile) && (this.testResult == x.testResult) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.remotecache.TestRemoteCacheArtifact".##) + artifact.##) + packaged.##) + extractDirectory.##) + analysisFile.##) + testResult.##) } diff --git a/main/src/main/java/sbt/internal/MetaBuildLoader.java b/main/src/main/java/sbt/internal/MetaBuildLoader.java index c91337a44..f9cc8b9c7 100644 --- a/main/src/main/java/sbt/internal/MetaBuildLoader.java +++ b/main/src/main/java/sbt/internal/MetaBuildLoader.java @@ -65,11 +65,17 @@ public final class MetaBuildLoader extends URLClassLoader { */ public static MetaBuildLoader makeLoader(final AppProvider appProvider) throws IOException { final String jlineJars = "jline-?[0-9.]+-sbt-.*|jline-terminal(-(jna|jansi))?-[0-9.]+"; + final String testInterfaceJars = "test-interface-[0-9.]+"; + final String compilerInterfaceJars = "compiler-interface(-.*)?"; + final String jansiJars = "jansi-[0-9.]+"; + final String jnaJars = "jna-(platform-)?[0-9.]+"; final String fullPattern = - "^(test-interface-[0-9.]+|" + jlineJars + "|jansi-[0-9.]+|jna-(platform-)?[0-9.]+)\\.jar"; + String.format( + "^(%s|%s|%s|%s|%s)\\.jar", + jlineJars, testInterfaceJars, compilerInterfaceJars, jansiJars, jnaJars); final Pattern pattern = Pattern.compile(fullPattern); final File[] cp = appProvider.mainClasspath(); - final URL[] interfaceURLs = new URL[1]; + final URL[] interfaceURLs = new URL[2]; final URL[] jlineURLs = new URL[7]; final File[] extra = appProvider.id().classpathExtra() == null ? new File[0] : appProvider.id().classpathExtra(); @@ -80,7 +86,8 @@ public final class MetaBuildLoader extends URLClassLoader { int jlineIndex = 0; for (final File file : cp) { final String name = file.getName(); - if (name.contains("test-interface") && pattern.matcher(name).find()) { + if ((name.contains("test-interface") || name.contains("compiler-interface")) + && pattern.matcher(name).find()) { interfaceURLs[interfaceIndex] = file.toURI().toURL(); interfaceIndex += 1; } else if (pattern.matcher(name).find()) { @@ -133,7 +140,7 @@ public final class MetaBuildLoader extends URLClassLoader { } }; - final TestInterfaceLoader interfaceLoader = new TestInterfaceLoader(interfaceURLs, topLoader); + final SbtInterfaceLoader interfaceLoader = new SbtInterfaceLoader(interfaceURLs, topLoader); final JLineLoader jlineLoader = new JLineLoader(jlineURLs, interfaceLoader); final File[] siJars = scalaProvider.jars(); final URL[] lib = new URL[1]; diff --git a/main/src/main/java/sbt/internal/TestInterfaceLoader.java b/main/src/main/java/sbt/internal/SbtInterfaceLoader.java similarity index 59% rename from main/src/main/java/sbt/internal/TestInterfaceLoader.java rename to main/src/main/java/sbt/internal/SbtInterfaceLoader.java index 1404c6bb6..27199529a 100644 --- a/main/src/main/java/sbt/internal/TestInterfaceLoader.java +++ b/main/src/main/java/sbt/internal/SbtInterfaceLoader.java @@ -10,14 +10,15 @@ package sbt.internal; import java.net.URL; import java.net.URLClassLoader; -class TestInterfaceLoader extends URLClassLoader { - TestInterfaceLoader(final URL[] urls, final ClassLoader parent) { +// This ClassLoader must contain pure sbt java interfaces +class SbtInterfaceLoader extends URLClassLoader { + SbtInterfaceLoader(final URL[] urls, final ClassLoader parent) { super(urls, parent); } @Override public String toString() { - return "SbtTestInterfaceClassLoader(" + getURLs()[0] + ")"; + return "SbtInterfaceClassLoader(" + getURLs()[0] + ")"; } static { diff --git a/main/src/main/java/sbt/internal/XMainConfiguration.java b/main/src/main/java/sbt/internal/XMainConfiguration.java new file mode 100644 index 000000000..9cebe23af --- /dev/null +++ b/main/src/main/java/sbt/internal/XMainConfiguration.java @@ -0,0 +1,299 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt.internal; + +import java.io.File; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; +import xsbti.*; + +/** + * Generates a new app configuration and invokes xMainImpl.run. For AppConfigurations generated by + * recent launchers, it is unnecessary to modify the original configuration, but configurations + * generated by older launchers need to be modified to place the test interface jar higher in the + * class hierarchy. The methods this object are implemented without using the scala library so that + * we can avoid loading any classes from the old scala provider. + */ +public class XMainConfiguration { + public xsbti.MainResult run(String moduleName, xsbti.AppConfiguration configuration) { + try { + ClassLoader topLoader = configuration.provider().scalaProvider().launcher().topLoader(); + xsbti.AppConfiguration updatedConfiguration = null; + try { + Method method = topLoader.getClass().getMethod("getJLineJars"); + URL[] jars = (URL[]) method.invoke(topLoader); + boolean canReuseConfiguration = jars.length == 3; + int j = 0; + while (j < jars.length && canReuseConfiguration) { + String s = jars[j].toString(); + canReuseConfiguration = s.contains("jline") || s.contains("jansi"); + j += 1; + } + if (canReuseConfiguration && j == 3) { + updatedConfiguration = configuration; + } else { + updatedConfiguration = makeConfiguration(configuration); + } + } catch (NoSuchMethodException e) { + updatedConfiguration = makeConfiguration(configuration); + } + + ClassLoader loader = updatedConfiguration.provider().loader(); + Thread.currentThread().setContextClassLoader(loader); + Class clazz = loader.loadClass("sbt." + moduleName + "$"); + Object instance = clazz.getField("MODULE$").get(null); + Method runMethod = clazz.getMethod("run", xsbti.AppConfiguration.class); + try { + Class clw = loader.loadClass("sbt.internal.ClassLoaderWarmup$"); + clw.getMethod("warmup").invoke(clw.getField("MODULE$").get(null)); + return (xsbti.MainResult) runMethod.invoke(instance, updatedConfiguration); + } catch (InvocationTargetException e) { + // This propogates xsbti.FullReload to the launcher + throw (xsbti.FullReload) e.getCause(); + } + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + + private xsbti.AppConfiguration makeConfiguration(xsbti.AppConfiguration configuration) { + try { + ClassLoader baseLoader = XMainConfiguration.class.getClassLoader(); + String className = "sbt/internal/XMainConfiguration.class"; + URL url = baseLoader.getResource(className); + String path = url.toString().replaceAll(className.concat("$"), ""); + URL[] urlArray = new URL[1]; + urlArray[0] = new URL(path); + 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. + ClassLoader modifiedLoader = new XMainClassLoader(urlArray, topLoader); + Class xMainConfigurationClass = + modifiedLoader.loadClass("sbt.internal.XMainConfiguration"); + Object instance = (Object) xMainConfigurationClass.getConstructor().newInstance(); + Class metaBuildLoaderClass = modifiedLoader.loadClass("sbt.internal.MetaBuildLoader"); + Method method = metaBuildLoaderClass.getMethod("makeLoader", AppProvider.class); + + ClassLoader loader = (ClassLoader) method.invoke(null, configuration.provider()); + + Thread.currentThread().setContextClassLoader(loader); + Class modifiedConfigurationClass = + modifiedLoader.loadClass("sbt.internal.XMainConfiguration$ModifiedConfiguration"); + Constructor cons = modifiedConfigurationClass.getConstructors()[0]; + ClassLoaderClose.close(configuration.provider().loader()); + ScalaProvider scalaProvider = configuration.provider().scalaProvider(); + Class providerClass = scalaProvider.getClass(); + try { + Method method2 = providerClass.getMethod("loaderLibraryOnly"); + ClassLoaderClose.close((ClassLoader) method2.invoke(scalaProvider)); + } catch (NoSuchMethodException e) { + } + ClassLoaderClose.close(scalaProvider.loader()); + ClassLoaderClose.close(configuration.provider().loader()); + return (xsbti.AppConfiguration) cons.newInstance(instance, configuration, loader); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + /* + * Replaces the AppProvider.loader method with a new loader that puts the sbt test interface + * jar ahead of the rest of the sbt classpath in the classloading hierarchy. + */ + public class ModifiedConfiguration implements xsbti.AppConfiguration { + private xsbti.AppConfiguration configuration; + private ClassLoader metaLoader; + + public ModifiedConfiguration(xsbti.AppConfiguration configuration, ClassLoader metaLoader) { + this.configuration = configuration; + this.metaLoader = metaLoader; + } + + public class ModifiedAppProvider implements AppProvider { + private AppProvider appProvider; + private ScalaProvider instance; + + public ModifiedAppProvider(AppProvider appProvider) throws ClassNotFoundException { + this.appProvider = appProvider; + ScalaProvider delegate = configuration.provider().scalaProvider(); + this.instance = + new ScalaProvider() { + public Launcher _launcher = + new Launcher() { + private Launcher delegateLauncher = delegate.launcher(); + private ClassLoader interfaceLoader = + metaLoader.loadClass("sbt.testing.Framework").getClassLoader(); + + @Override + public ScalaProvider getScala(String version) { + return getScala(version, ""); + } + + @Override + public ScalaProvider getScala(String version, String reason) { + return getScala(version, reason, "org.scala-lang"); + } + + @Override + public ScalaProvider getScala(String version, String reason, String scalaOrg) { + return delegateLauncher.getScala(version, reason, scalaOrg); + } + + @Override + public AppProvider app(xsbti.ApplicationID id, String version) { + return delegateLauncher.app(id, version); + } + + @Override + public ClassLoader topLoader() { + return interfaceLoader; + } + + @Override + public GlobalLock globalLock() { + return delegateLauncher.globalLock(); + } + + @Override + public File bootDirectory() { + return delegateLauncher.bootDirectory(); + } + + @Override + public xsbti.Repository[] ivyRepositories() { + return delegateLauncher.ivyRepositories(); + } + + @Override + public xsbti.Repository[] appRepositories() { + return delegateLauncher.appRepositories(); + } + + @Override + public boolean isOverrideRepositories() { + return delegateLauncher.isOverrideRepositories(); + } + + @Override + public File ivyHome() { + return delegateLauncher.ivyHome(); + } + + @Override + public String[] checksums() { + return delegateLauncher.checksums(); + } + }; + + @Override + public Launcher launcher() { + return this._launcher; + } + + @Override + public String version() { + return delegate.version(); + } + + @Override + public ClassLoader loader() { + return metaLoader.getParent(); + } + + @Override + public File[] jars() { + return delegate.jars(); + } + + @Override + @Deprecated() + public File libraryJar() { + return delegate.libraryJar(); + } + + @Override + @Deprecated() + public File compilerJar() { + return delegate.compilerJar(); + } + + @Override + public AppProvider app(xsbti.ApplicationID id) { + return delegate.app(id); + } + + private ClassLoader loaderLibraryOnly() { + return metaLoader.getParent().getParent(); + } + }; + } + + @Override + public ScalaProvider scalaProvider() { + return instance; + } + + @Override + public xsbti.ApplicationID id() { + return appProvider.id(); + } + + @Override + public ClassLoader loader() { + return metaLoader; + } + + @Override + @Deprecated() + public Class mainClass() { + return appProvider.mainClass(); + } + + @Override + public Class entryPoint() { + return appProvider.entryPoint(); + } + + @Override + public AppMain newMain() { + return appProvider.newMain(); + } + + @Override + public File[] mainClasspath() { + return appProvider.mainClasspath(); + } + + @Override + public ComponentProvider components() { + return appProvider.components(); + } + } + + @Override + public String[] arguments() { + return configuration.arguments(); + } + + @Override + public File baseDirectory() { + return configuration.baseDirectory(); + } + + @Override + public AppProvider provider() { + try { + return new ModifiedAppProvider(configuration.provider()); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index a5aed9a46..f55b51faa 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -88,6 +88,7 @@ import sbt.util.InterfaceUtil.{ t2, toJavaFunction => f1 } import sbt.util._ import sjsonnew._ import sjsonnew.support.scalajson.unsafe.Converter +import xsbti.compile.TastyFiles import xsbti.{ FileConverter, Position } import scala.collection.immutable.ListMap @@ -332,8 +333,10 @@ object Defaults extends BuildCommon { exportPipelining := usePipelining.value, useScalaReplJLine :== false, scalaInstanceTopLoader := { - if (!useScalaReplJLine.value) classOf[org.jline.terminal.Terminal].getClassLoader - else appConfiguration.value.provider.scalaProvider.launcher.topLoader.getParent + // the JLineLoader contains the SbtInterfaceClassLoader + if (!useScalaReplJLine.value) + classOf[org.jline.terminal.Terminal].getClassLoader // the JLineLoader + else classOf[Compilers].getClassLoader // the SbtInterfaceClassLoader }, useSuperShell := { if (insideCI.value) false else ITerminal.console.isSupershellEnabled }, superShellThreshold :== SysProp.supershellThreshold, @@ -666,15 +669,21 @@ object Defaults extends BuildCommon { ), cleanIvy := IvyActions.cleanCachedResolutionCache(ivyModule.value, streams.value.log), clean := clean.dependsOn(cleanIvy).value, - scalaCompilerBridgeBinaryJar := None, - scalaCompilerBridgeSource := ZincLmUtil.getDefaultBridgeModule(scalaVersion.value), - consoleProject / scalaCompilerBridgeSource := ZincLmUtil.getDefaultBridgeModule( + scalaCompilerBridgeBinaryJar := Def.settingDyn { + val sv = scalaVersion.value + if (ScalaArtifacts.isScala3(sv)) fetchBridgeBinaryJarTask(sv) + else Def.task[Option[File]](None) + }.value, + scalaCompilerBridgeSource := ZincLmUtil.getDefaultBridgeSourceModule(scalaVersion.value), + consoleProject / scalaCompilerBridgeBinaryJar := None, + consoleProject / scalaCompilerBridgeSource := ZincLmUtil.getDefaultBridgeSourceModule( appConfiguration.value.provider.scalaProvider.version ), ) // 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, classpathOptions in console :== ClasspathOptionsUtil.repl, @@ -734,6 +743,18 @@ object Defaults extends BuildCommon { if (plugin) scalaBase / ("sbt-" + sbtv) else scalaBase } + private def fetchBridgeBinaryJarTask(scalaVersion: String): Initialize[Task[Option[File]]] = + Def.task { + val bridgeJar = ZincLmUtil.fetchDefaultBridgeModule( + scalaVersion, + dependencyResolution.value, + updateConfiguration.value, + (update / unresolvedWarningConfiguration).value, + streams.value.log + ) + Some(bridgeJar) + } + def compilersSetting = { compilers := { val st = state.value @@ -814,6 +835,13 @@ object Defaults extends BuildCommon { }) :+ compileAnalysisFile.value.toPath }, compileOutputs := compileOutputs.triggeredBy(compile).value, + tastyFiles := Def.taskIf { + if (ScalaArtifacts.isScala3(scalaVersion.value)) { + val _ = compile.value + val tastyFiles = classDirectory.value.**("*.tasty").get + tastyFiles.map(_.getAbsoluteFile) + } else Nil + }.value, clean := (compileOutputs / clean).value, earlyOutputPing := Def.promise[Boolean], compileProgress := { @@ -858,9 +886,14 @@ object Defaults extends BuildCommon { compileAnalysisTargetRoot.value / compileAnalysisFilename.value }, externalHooks := IncOptions.defaultExternal, + auxiliaryClassFiles ++= { + if (ScalaArtifacts.isScala3(scalaVersion.value)) List(TastyFiles.instance) + else Nil + }, incOptions := { val old = incOptions.value old + .withAuxiliaryClassFiles(auxiliaryClassFiles.value.toArray) .withExternalHooks(externalHooks.value) .withClassfileManagerType( Option( @@ -1001,9 +1034,9 @@ object Defaults extends BuildCommon { val cache = state.value.extendedClassLoaderCache mkScalaInstance( version, - allJars, libraryJars, - compilerJar, + allJars, + Seq.empty, cache, scalaInstanceTopLoader.value ) @@ -1032,31 +1065,44 @@ object Defaults extends BuildCommon { } def scalaInstanceFromUpdate: Initialize[Task[ScalaInstance]] = Def.task { - val toolReport = update.value.configuration(Configurations.ScalaTool) getOrElse - sys.error(noToolConfiguration(managedScalaInstance.value)) - def files(id: String) = - for { - m <- toolReport.modules if m.module.name == id; + val sv = scalaVersion.value + val fullReport = update.value + + val toolReport = fullReport + .configuration(Configurations.ScalaTool) + .getOrElse(sys.error(noToolConfiguration(managedScalaInstance.value))) + + def file(id: String): File = { + val files = for { + m <- toolReport.modules if m.module.name.startsWith(id) (art, file) <- m.artifacts if art.`type` == Artifact.DefaultType } yield file - def file(id: String) = files(id).headOption getOrElse sys.error(s"Missing ${id}.jar") - val allJars = toolReport.modules.flatMap(_.artifacts.map(_._2)) - val libraryJar = file(ScalaArtifacts.LibraryID) - val compilerJar = file(ScalaArtifacts.CompilerID) + files.headOption getOrElse sys.error(s"Missing $id jar file") + } + + val allCompilerJars = toolReport.modules.flatMap(_.artifacts.map(_._2)) + val allDocJars = + fullReport + .configuration(Configurations.ScalaDocTool) + .toSeq + .flatMap(_.modules) + .flatMap(_.artifacts.map(_._2)) + val libraryJars = ScalaArtifacts.libraryIds(sv).map(file) + mkScalaInstance( - scalaVersion.value, - allJars, - Array(libraryJar), - compilerJar, + sv, + libraryJars, + allCompilerJars, + allDocJars, state.value.extendedClassLoaderCache, scalaInstanceTopLoader.value, ) } private[this] def mkScalaInstance( version: String, - allJars: Seq[File], libraryJars: Array[File], - compilerJar: File, + allCompilerJars: Seq[File], + allDocJars: Seq[File], classLoaderCache: ClassLoaderCache, topLoader: ClassLoader, ): ScalaInstance = { @@ -1069,17 +1115,33 @@ object Defaults extends BuildCommon { } } else topLoader - val allJarsDistinct = allJars.distinct + + val compilerJars = allCompilerJars.filterNot(libraryJars.contains).distinct.toArray + val docJars = allDocJars + .filterNot(jar => libraryJars.contains(jar) || compilerJars.contains(jar)) + .distinct + .toArray + val allJars = libraryJars ++ compilerJars ++ docJars + val libraryLoader = classLoaderCache(libraryJars.toList, jansiExclusionLoader) - val fullLoader = classLoaderCache(allJarsDistinct.toList, libraryLoader) + val compilerLoader = classLoaderCache( + // It should be `compilerJars` but it would break on `3.0.0-M2` because of + // https://github.com/lampepfl/dotty/blob/d932af954ef187d7bdb87500d49ed0ff530bd1e7/sbt-bridge/src/xsbt/CompilerClassLoader.java#L108-L117 + allCompilerJars.toList, + libraryLoader + ) + val fullLoader = + if (docJars.isEmpty) compilerLoader + else classLoaderCache(docJars.distinct.toList, compilerLoader) new ScalaInstance( - version, - fullLoader, - libraryLoader, - libraryJars, - compilerJar, - allJarsDistinct.toArray, - Some(version) + version = version, + loader = fullLoader, + loaderCompilerOnly = compilerLoader, + loaderLibraryOnly = libraryLoader, + libraryJars = libraryJars, + compilerJars = compilerJars, + allJars = allJars, + explicitActual = Some(version) ) } def scalaInstanceFromHome(dir: File): Initialize[Task[ScalaInstance]] = Def.task { @@ -1090,9 +1152,9 @@ object Defaults extends BuildCommon { } mkScalaInstance( dummy.version, - dummy.allJars, dummy.libraryJars, - dummy.compilerJar, + dummy.compilerJars, + dummy.allJars, state.value.extendedClassLoaderCache, scalaInstanceTopLoader.value, ) @@ -1964,6 +2026,16 @@ object Defaults extends BuildCommon { else Map.empty[File, URL] }, fileInputOptions := Seq("-doc-root-content", "-diagrams-dot-path"), + scalacOptions := { + val compileOptions = scalacOptions.value + val sv = scalaVersion.value + val config = configuration.value + val projectName = name.value + if (ScalaArtifacts.isScala3(sv)) { + val project = if (config == Compile) projectName else s"$projectName-$config" + Seq("-project", project) + } else compileOptions + }, key in TaskZero := { val s = streams.value val cs: Compilers = compilers.value @@ -1978,13 +2050,16 @@ object Defaults extends BuildCommon { val fiOpts = fileInputOptions.value val reporter = (compile / bspReporter).value val converter = fileConverter.value + val tFiles = tastyFiles.value + val sv = scalaVersion.value (hasScala, hasJava) match { case (true, _) => val options = sOpts ++ Opts.doc.externalAPI(xapis) val runDoc = Doc.scaladoc(label, s.cacheStoreFactory sub "scala", cs.scalac match { case ac: AnalyzingCompiler => ac.onArgs(exported(s, "scaladoc")) }, fiOpts) - runDoc(srcs, cp, out, options, maxErrors.value, s.log) + val docSrcs = if (ScalaArtifacts.isScala3(sv)) tFiles else srcs + runDoc(docSrcs, cp, out, options, maxErrors.value, s.log) case (_, true) => val javadoc = sbt.inc.Doc.cachedJavadoc(label, s.cacheStoreFactory sub "java", cs.javaTools) @@ -1992,7 +2067,7 @@ object Defaults extends BuildCommon { srcs.toList map { x => converter.toVirtualFile(x.toPath) }, - cp.toList map { x => + cp map { x => converter.toVirtualFile(x.toPath) }, converter, @@ -2687,6 +2762,8 @@ object Classpaths { defaultConfiguration :== Some(Configurations.Compile), dependencyOverrides :== Vector.empty, libraryDependencies :== Nil, + libraryDependencySchemes :== Nil, + evictionErrorLevel :== Level.Error, excludeDependencies :== Nil, ivyLoggingLevel := (// This will suppress "Resolving..." logs on Jenkins and Travis. if (insideCI.value) @@ -2884,7 +2961,8 @@ object Classpaths { }, ivyConfigurations ++= Configurations.auxiliary, ivyConfigurations ++= { - if (managedScalaInstance.value && scalaHome.value.isEmpty) Configurations.ScalaTool :: Nil + if (managedScalaInstance.value && scalaHome.value.isEmpty) + Configurations.ScalaTool :: Configurations.ScalaDocTool :: Nil else Nil }, // Coursier needs these @@ -3074,12 +3152,15 @@ object Classpaths { else base val sbtOrg = scalaOrganization.value val version = scalaVersion.value - if (scalaHome.value.isDefined || scalaModuleInfo.value.isEmpty || !managedScalaInstance.value) - pluginAdjust - else { - val isDotty = ScalaInstance.isDotty(version) - ScalaArtifacts.toolDependencies(sbtOrg, version, isDotty) ++ pluginAdjust - } + val extResolvers = externalResolvers.value + val allToolDeps = + if (scalaHome.value.isDefined || scalaModuleInfo.value.isEmpty || !managedScalaInstance.value) + Nil + else if (extResolvers.contains(Resolver.JCenterRepository)) { + ScalaArtifacts.toolDependencies(sbtOrg, version) ++ + ScalaArtifacts.docToolDependencies(sbtOrg, version) + } else ScalaArtifacts.toolDependencies(sbtOrg, version) + allToolDeps ++ pluginAdjust }, // in case of meta build, exclude all sbt modules from the dependency graph, so we can use the sbt resolved by the launcher allExcludeDependencies := { @@ -3460,13 +3541,7 @@ object Classpaths { .withMetadataDirectory(dependencyCacheDirectory.value) } - val evictionOptions = Def.taskDyn { - if (executionRoots.value.exists(_.key == evicted.key)) - Def.task(EvictionWarningOptions.empty) - else Def.task((evictionWarningOptions in update).value) - }.value - - val extracted = (Project extract state0) + val extracted = Project.extract(state0) val isPlugin = sbtPlugin.value val thisRef = thisProjectRef.value val label = @@ -3486,7 +3561,8 @@ object Classpaths { force = shouldForce, depsUpdated = transitiveUpdate.value.exists(!_.stats.cached), uwConfig = (unresolvedWarningConfiguration in update).value, - ewo = evictionOptions, + evictionLevel = evictionErrorLevel.value, + versionSchemeOverrides = libraryDependencySchemes.value, mavenStyle = publishMavenStyle.value, compatWarning = compatibilityWarningOptions.value, includeCallers = includeCallers, @@ -3823,7 +3899,7 @@ object Classpaths { version: String ): Seq[ModuleID] = if (auto) - modifyForPlugin(plugin, ModuleID(org, ScalaArtifacts.LibraryID, version)) :: Nil + modifyForPlugin(plugin, ScalaArtifacts.libraryDependency(org, version)) :: Nil else Nil diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index c54d7d1f4..81d6a6c61 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -223,6 +223,7 @@ object Keys { val manipulateBytecode = taskKey[CompileResult]("Manipulates generated bytecode").withRank(BTask) val compileIncremental = taskKey[CompileResult]("Actually runs the incremental compilation").withRank(DTask) val previousCompile = taskKey[PreviousResult]("Read the incremental compiler analysis from disk").withRank(DTask) + val tastyFiles = taskKey[Seq[File]]("Returns the TASTy files produced by compilation").withRank(DTask) private[sbt] val compileScalaBackend = taskKey[CompileResult]("Compiles only Scala sources if pipelining is enabled. Compiles both Scala and Java sources otherwise").withRank(Invisible) private[sbt] val compileEarly = taskKey[CompileAnalysis]("Compiles only Scala sources if pipelining is enabled, and produce an early output (pickle JAR)").withRank(Invisible) private[sbt] val earlyOutputPing = taskKey[PromiseWrap[Boolean]]("When pipelining is enabled, this returns true when early output (pickle JAR) is created; false otherwise").withRank(Invisible) @@ -248,6 +249,7 @@ object Keys { 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 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.") val reportAbsolutePath = settingKey[Boolean]("Report absolute paths during compilation.") @@ -394,7 +396,7 @@ object Keys { val exportPipelining = settingKey[Boolean]("Product early output so downstream subprojects can do pipelining.").withRank(BSetting) val bspConfig = taskKey[Unit]("Create or update the BSP connection files").withRank(DSetting) - val bspEnabled = settingKey[Boolean]("Enable/Disable BSP for this build, project or configuration") + val bspEnabled = SettingKey[Boolean](BasicKeys.bspEnabled) val bspTargetIdentifier = settingKey[BuildTargetIdentifier]("Build target identifier of a project and configuration.").withRank(DSetting) val bspWorkspace = settingKey[Map[BuildTargetIdentifier, Scope]]("Mapping of BSP build targets to sbt scopes").withRank(DSetting) val bspInternalDependencyConfigurations = settingKey[Seq[(ProjectRef, Set[ConfigKey])]]("The project configurations that this configuration depends on, possibly transitivly").withRank(DSetting) @@ -455,6 +457,7 @@ object Keys { val updateFull = taskKey[UpdateReport]("Resolves and optionally retrieves dependencies, producing a full report with callers.").withRank(CTask) val evicted = taskKey[EvictionWarning]("Display detailed eviction warnings.").withRank(CTask) val evictionWarningOptions = settingKey[EvictionWarningOptions]("Options on eviction warnings after resolving managed dependencies.").withRank(DSetting) + val evictionErrorLevel = settingKey[Level.Value]("The log level for detected eviction errors. Level.Error will throw an error.") val transitiveUpdate = taskKey[Seq[UpdateReport]]("UpdateReports for the internal dependencies of this project.").withRank(DTask) val updateClassifiers = TaskKey[UpdateReport]("updateClassifiers", "Resolves and optionally retrieves classified artifacts, such as javadocs and sources, for dependency definitions, transitively.", BPlusTask, update) val transitiveClassifiers = settingKey[Seq[String]]("List of classifiers used for transitively obtaining extra artifacts for sbt or declared dependencies.").withRank(BSetting) @@ -533,6 +536,7 @@ object Keys { val checksums = settingKey[Seq[String]]("The list of checksums to generate and to verify for dependencies.").withRank(BSetting) val forceUpdatePeriod = settingKey[Option[FiniteDuration]]("Duration after which to force a full update to occur").withRank(CSetting) val versionScheme = settingKey[Option[String]]("""Version scheme used for the subproject: Supported values are Some("early-semver"), Some("pvp"), and Some("semver-spec")""").withRank(BSetting) + val libraryDependencySchemes = settingKey[Seq[ModuleID]]("""Version scheme to use for specific modules set as "org" %% "name" % "": Supported values are "early-semver", "pvp", "semver-spec", "always", and "strict".""").withRank(BSetting) val classifiersModule = taskKey[GetClassifiersModule]("classifiers-module").withRank(CTask) val compatibilityWarningOptions = settingKey[CompatibilityWarningOptions]("Configures warnings around Maven incompatibility.").withRank(CSetting) diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index f33aee75f..ca7359dde 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -939,13 +939,17 @@ object BuiltinCommands { val session = Load.initialSession(structure, eval, s0) SessionSettings.checkSession(session, s2) - val s3 = addCacheStoreFactoryFactory(Project.setProject(session, structure, s2)) + val s3 = Project.setProject( + session, + structure, + s2, + st => setupGlobalFileTreeRepository(addCacheStoreFactoryFactory(st)) + ) val s4 = s3.put(Keys.useLog4J.key, Project.extract(s3).get(Keys.useLog4J)) - val s5 = setupGlobalFileTreeRepository(s4) // This is a workaround for the console task in dotty which uses the classloader cache. // We need to override the top loader in that case so that it gets the forked jline. - s5.extendedClassLoaderCache.setParent(Project.extract(s5).get(Keys.scalaInstanceTopLoader)) - addSuperShellParams(CheckBuildSources.init(LintUnused.lintUnusedFunc(s5))) + s4.extendedClassLoaderCache.setParent(Project.extract(s4).get(Keys.scalaInstanceTopLoader)) + addSuperShellParams(CheckBuildSources.init(LintUnused.lintUnusedFunc(s4))) } private val setupGlobalFileTreeRepository: State => State = { state => @@ -1078,7 +1082,7 @@ object BuiltinCommands { } private val sbtVersionRegex = """sbt\.version\s*=.*""".r - private def isSbtVersionLine(s: String) = sbtVersionRegex.pattern matcher s matches () + private def isSbtVersionLine(s: String) = sbtVersionRegex.pattern.matcher(s).matches() private def writeSbtVersionUnconditionally(state: State) = { val baseDir = state.baseDir diff --git a/main/src/main/scala/sbt/MainLoop.scala b/main/src/main/scala/sbt/MainLoop.scala index 384b05cf2..e404cd801 100644 --- a/main/src/main/scala/sbt/MainLoop.scala +++ b/main/src/main/scala/sbt/MainLoop.scala @@ -8,6 +8,7 @@ package sbt import java.io.PrintWriter +import java.util.concurrent.RejectedExecutionException import java.util.Properties import sbt.BasicCommandStrings.{ StashOnFailure, networkExecPrefix } @@ -240,6 +241,13 @@ object MainLoop { FastTrackCommands .evaluate(termState, exec.commandLine) .getOrElse(Command.process(exec.commandLine, termState)) + } 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 } 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 @@ -328,5 +336,4 @@ object MainLoop { if (prevState.onFailure.isDefined && state.onFailure.isEmpty && state.currentCommand.fold(true)(_ != StashOnFailure)) ExitCode(ErrorCodes.UnknownError) else ExitCode.Success - } diff --git a/main/src/main/scala/sbt/Plugins.scala b/main/src/main/scala/sbt/Plugins.scala index 191af110e..502d72111 100644 --- a/main/src/main/scala/sbt/Plugins.scala +++ b/main/src/main/scala/sbt/Plugins.scala @@ -200,6 +200,10 @@ object Plugins extends PluginsFunctions { val clauses = Clauses((allRequirementsClause ::: allEnabledByClause) filterNot { _.head subsetOf knowledge0 }) + // println(s"allRequirementsClause = $allRequirementsClause") + // println(s"allEnabledByClause = $allEnabledByClause") + // println(s"clauses = $clauses") + // println("") log.debug( s"deducing auto plugins based on known facts ${knowledge0.toString} and clauses ${clauses.toString}" ) @@ -266,7 +270,10 @@ object Plugins extends PluginsFunctions { lits map { case Atom(l) => l; case Negated(Atom(l)) => l } mkString (", ") private[this] def duplicateProvidesError(byAtom: Seq[(Atom, AutoPlugin)]): Unit = { - val dupsByAtom = byAtom.groupBy(_._1).mapValues(_.map(_._2)) + val dupsByAtom = Map(byAtom.groupBy(_._1).toSeq.map { + case (k, v) => + k -> v.map(_._2) + }: _*) val dupStrings = for ((atom, dups) <- dupsByAtom if dups.size > 1) yield s"${atom.label} by ${dups.mkString(", ")}" diff --git a/main/src/main/scala/sbt/Project.scala b/main/src/main/scala/sbt/Project.scala index dce88bc66..7ad01fd84 100755 --- a/main/src/main/scala/sbt/Project.scala +++ b/main/src/main/scala/sbt/Project.scala @@ -14,6 +14,7 @@ import Project._ import BasicKeys.serverLogLevel import Keys.{ stateBuildStructure, + bspEnabled, colorShellPrompt, commands, configuration, @@ -478,7 +479,15 @@ object Project extends ProjectExtra { previousOnUnload(s.runExitHooks()) } - def setProject(session: SessionSettings, structure: BuildStructure, s: State): State = { + def setProject(session: SessionSettings, structure: BuildStructure, s: State): State = + setProject(session, structure, s, identity) + + def setProject( + session: SessionSettings, + structure: BuildStructure, + s: State, + preOnLoad: State => State + ): State = { val unloaded = runUnloadHooks(s) val (onLoad, onUnload) = getHooks(structure.data) val newAttrs = unloaded.attributes @@ -488,7 +497,7 @@ object Project extends ProjectExtra { val newState = unloaded.copy(attributes = newAttrs) // TODO: Fix this onLoad( - updateCurrent(newState) /*LogManager.setGlobalLogLevels(updateCurrent(newState), structure.data)*/ + preOnLoad(updateCurrent(newState)) /*LogManager.setGlobalLogLevels(updateCurrent(newState), structure.data)*/ ) } @@ -519,6 +528,7 @@ object Project extends ProjectExtra { val startSvr: Option[Boolean] = get(autoStartServer) val host: Option[String] = get(serverHost) val port: Option[Int] = get(serverPort) + val enabledBsp: Option[Boolean] = get(bspEnabled) val timeout: Option[Option[FiniteDuration]] = get(serverIdleTimeout) val authentication: Option[Set[ServerAuthentication]] = get(serverAuthentication) val connectionType: Option[ConnectionType] = get(serverConnectionType) @@ -536,6 +546,7 @@ object Project extends ProjectExtra { .put(historyPath.key, history) .put(windowsServerSecurityLevel.key, winSecurityLevel) .put(serverUseJni.key, useJni) + .setCond(bspEnabled.key, enabledBsp) .setCond(autoStartServer.key, startSvr) .setCond(serverPort.key, port) .setCond(serverHost.key, host) @@ -572,7 +583,7 @@ object Project extends ProjectExtra { private[this] def overlappingTargets( targets: Seq[(ProjectRef, File)] ): Map[File, Seq[ProjectRef]] = - targets.groupBy(_._2).filter(_._2.size > 1).mapValues(_.map(_._1)) + targets.groupBy(_._2).filter(_._2.size > 1).mapValues(_.map(_._1)).toMap private[this] def allTargets(data: Settings[Scope]): Seq[(ProjectRef, File)] = { import ScopeFilter._ diff --git a/main/src/main/scala/sbt/ScriptedPlugin.scala b/main/src/main/scala/sbt/ScriptedPlugin.scala index 2770b51e3..584786bbc 100644 --- a/main/src/main/scala/sbt/ScriptedPlugin.scala +++ b/main/src/main/scala/sbt/ScriptedPlugin.scala @@ -144,7 +144,7 @@ object ScriptedPlugin extends AutoPlugin { val pairMap = pairs.groupBy(_._1).mapValues(_.map(_._2).toSet) val id = charClass(c => !c.isWhitespace && c != '/', "not whitespace and not '/'").+.string - val groupP = token(id.examples(pairMap.keySet)) <~ token('/') + val groupP = token(id.examples(pairMap.keySet.toSet)) <~ token('/') // A parser for page definitions val pageNumber = (NatBasic & not('0', "zero page number")).flatMap { i => diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index b7281a62e..7bd0b6302 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -173,6 +173,7 @@ object LMCoursier { } def coursierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { + val sv = scalaVersion.value coursierConfiguration( csrRecursiveResolvers.value, csrInterProjectDependencies.value.toVector, @@ -182,9 +183,9 @@ object LMCoursier { None, csrMavenProfiles.value, scalaOrganization.value, - scalaVersion.value, + sv, scalaBinaryVersion.value, - autoScalaLibrary.value, + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, @@ -200,6 +201,7 @@ object LMCoursier { } def updateClassifierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { + val sv = scalaVersion.value coursierConfiguration( csrRecursiveResolvers.value, csrInterProjectDependencies.value.toVector, @@ -209,9 +211,9 @@ object LMCoursier { Some(transitiveClassifiers.value.map(Classifier(_))), csrMavenProfiles.value, scalaOrganization.value, - scalaVersion.value, + sv, scalaBinaryVersion.value, - autoScalaLibrary.value, + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, @@ -227,6 +229,7 @@ object LMCoursier { } def updateSbtClassifierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { + val sv = scalaVersion.value coursierConfiguration( csrSbtResolvers.value, Vector(), @@ -236,9 +239,9 @@ object LMCoursier { None, csrMavenProfiles.value, scalaOrganization.value, - scalaVersion.value, + sv, scalaBinaryVersion.value, - autoScalaLibrary.value, + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, @@ -254,6 +257,7 @@ object LMCoursier { } def scalaCompilerBridgeConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { + val sv = scalaVersion.value coursierConfiguration( csrResolvers.value, Vector(), @@ -263,9 +267,9 @@ object LMCoursier { None, csrMavenProfiles.value, scalaOrganization.value, - scalaVersion.value, + sv, scalaBinaryVersion.value, - autoScalaLibrary.value, + autoScalaLibrary.value && !ScalaArtifacts.isScala3(sv), scalaModuleInfo.value, allExcludeDependencies.value, CoursierInputsTasks.credentialsTask.value, diff --git a/main/src/main/scala/sbt/internal/ClassLoaderWarmup.scala b/main/src/main/scala/sbt/internal/ClassLoaderWarmup.scala new file mode 100644 index 000000000..00159964e --- /dev/null +++ b/main/src/main/scala/sbt/internal/ClassLoaderWarmup.scala @@ -0,0 +1,40 @@ +/* + * sbt + * Copyright 2011 - 2018, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt.internal + +import java.util.concurrent.{ ExecutorService, Executors } +import sbt.plugins.{ CorePlugin, IvyPlugin, JvmPlugin } + +private[internal] object ClassLoaderWarmup { + def warmup(): Unit = { + if (Runtime.getRuntime.availableProcessors > 1) { + val executorService: ExecutorService = + Executors.newFixedThreadPool(Runtime.getRuntime.availableProcessors - 1) + def submit[R](f: => R): Unit = { + executorService.submit(new Runnable { + override def run(): Unit = { f; () } + }) + () + } + + submit(Class.forName("sbt.internal.parser.SbtParserInit").getConstructor().newInstance()) + submit(CorePlugin.projectSettings) + submit(IvyPlugin.projectSettings) + submit(JvmPlugin.projectSettings) + submit(() => { + try { + val clazz = Class.forName("scala.reflect.runtime.package$") + clazz.getMethod("universe").invoke(clazz.getField("MODULE$").get(null)) + } catch { + case _: Exception => + } + executorService.shutdown() + }) + } + } +} diff --git a/main/src/main/scala/sbt/internal/CommandExchange.scala b/main/src/main/scala/sbt/internal/CommandExchange.scala index e379c8108..36059cdc3 100644 --- a/main/src/main/scala/sbt/internal/CommandExchange.scala +++ b/main/src/main/scala/sbt/internal/CommandExchange.scala @@ -190,6 +190,7 @@ private[sbt] final class CommandExchange { lazy val handlers = s.get(fullServerHandlers).getOrElse(Nil) lazy val win32Level = s.get(windowsServerSecurityLevel).getOrElse(2) lazy val useJni = s.get(serverUseJni).getOrElse(false) + lazy val enableBsp = s.get(bspEnabled).getOrElse(true) lazy val portfile = s.baseDir / "project" / "target" / "active.json" def onIncomingSocket(socket: Socket, instance: ServerInstance): Unit = { @@ -225,6 +226,7 @@ private[sbt] final class CommandExchange { s.configuration, win32Level, useJni, + enableBsp, ) val serverInstance = Server.start(connection, onIncomingSocket, s.log) // don't throw exception when it times out diff --git a/main/src/main/scala/sbt/internal/CompatParColls.scala b/main/src/main/scala/sbt/internal/CompatParColls.scala new file mode 100644 index 000000000..46ef2f23c --- /dev/null +++ b/main/src/main/scala/sbt/internal/CompatParColls.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 sbt.internal + +// https://github.com/scala/scala-parallel-collections/issues/22 +private[sbt] object CompatParColls { + @com.github.ghik.silencer.silent + val Converters = { + import Compat._ + { + import scala.collection.parallel._ + CollectionConverters + } + } + object Compat { + object CollectionConverters + } +} diff --git a/main/src/main/scala/sbt/internal/KeyIndex.scala b/main/src/main/scala/sbt/internal/KeyIndex.scala index 9f8d18a33..343f1d20f 100644 --- a/main/src/main/scala/sbt/internal/KeyIndex.scala +++ b/main/src/main/scala/sbt/internal/KeyIndex.scala @@ -17,12 +17,16 @@ import sbt.librarymanagement.Configuration object KeyIndex { def empty: ExtendableKeyIndex = new KeyIndex0(emptyBuildIndex) + @com.github.ghik.silencer.silent def apply( known: Iterable[ScopedKey[_]], projects: Map[URI, Set[String]], configurations: Map[String, Seq[Configuration]] - ): ExtendableKeyIndex = + ): ExtendableKeyIndex = { + import sbt.internal.CompatParColls.Converters._ known.par.foldLeft(base(projects, configurations)) { _ add _ } + } + @com.github.ghik.silencer.silent def aggregate( known: Iterable[ScopedKey[_]], extra: BuildUtil[_], @@ -37,6 +41,7 @@ object KeyIndex { * This was a significant serial bottleneck during project loading that we can work around by * computing the aggregations in parallel and then bulk adding them to the index. */ + import sbt.internal.CompatParColls.Converters._ val toAggregate = known.par.map { case key if validID(key.key.label) => Aggregation.aggregate(key, ScopeMask(), extra, reverse = true) @@ -92,6 +97,7 @@ object KeyIndex { private[sbt] val emptyConfigIndex = new ConfigIndex(Map.empty, Map.empty, emptyAKeyIndex) private[sbt] val emptyProjectIndex = new ProjectIndex(Map.empty) private[sbt] val emptyBuildIndex = new BuildIndex(Map.empty) + } import KeyIndex._ diff --git a/main/src/main/scala/sbt/internal/LibraryManagement.scala b/main/src/main/scala/sbt/internal/LibraryManagement.scala index ee175795e..6b13c1ee0 100644 --- a/main/src/main/scala/sbt/internal/LibraryManagement.scala +++ b/main/src/main/scala/sbt/internal/LibraryManagement.scala @@ -19,6 +19,7 @@ import sbt.io.IO import sbt.io.syntax._ import sbt.Project.richInitializeTask import sjsonnew.JsonFormat +import scala.compat.Platform.EOL private[sbt] object LibraryManagement { implicit val linter: sbt.dsl.LinterLevel.Ignore.type = sbt.dsl.LinterLevel.Ignore @@ -36,7 +37,8 @@ private[sbt] object LibraryManagement { force: Boolean, depsUpdated: Boolean, uwConfig: UnresolvedWarningConfiguration, - ewo: EvictionWarningOptions, + evictionLevel: Level.Value, + versionSchemeOverrides: Seq[ModuleID], mavenStyle: Boolean, compatWarning: CompatibilityWarningOptions, includeCallers: Boolean, @@ -61,9 +63,19 @@ private[sbt] object LibraryManagement { val report1 = transform(report) // Warn of any eviction and compatibility warnings - val ew = EvictionWarning(module, ewo, report1) - ew.lines.foreach(log.warn(_)) - ew.infoAllTheThings.foreach(log.info(_)) + val evictionError = EvictionError(report1, module, versionSchemeOverrides) + if (evictionError.incompatibleEvictions.isEmpty) () + else + evictionLevel match { + case Level.Error => + val msgs = List( + "", + "this can be overridden using libraryDependencySchemes or evictionErrorLevel" + ) + sys.error((evictionError.lines ++ msgs).mkString(EOL)) + case _ => + evictionError.lines.foreach(log.log(evictionLevel, _: String)) + } CompatibilityWarning.run(compatWarning, module, mavenStyle, log) val report2 = transformDetails(report1, includeCallers, includeDetails) report2 @@ -245,11 +257,6 @@ private[sbt] object LibraryManagement { // logical clock is folded into UpdateConfiguration conf1.withLogicalClock(LogicalClock(state0.hashCode)) } - val evictionOptions = Def.taskDyn { - if (executionRoots.value.exists(_.key == evicted.key)) - Def.task(EvictionWarningOptions.empty) - else Def.task((evictionWarningOptions in update).value) - }.value cachedUpdate( // LM API lm = lm, @@ -263,7 +270,8 @@ private[sbt] object LibraryManagement { force = shouldForce, depsUpdated = transitiveUpdate.value.exists(!_.stats.cached), uwConfig = (unresolvedWarningConfiguration in update).value, - ewo = evictionOptions, + evictionLevel = Level.Debug, + versionSchemeOverrides = Nil, mavenStyle = publishMavenStyle.value, compatWarning = compatibilityWarningOptions.value, includeCallers = false, @@ -328,7 +336,11 @@ private[sbt] object LibraryManagement { .mapValues(cs => cs.map(c => ConfigRef(c)).toVector) store.write(allExcludes) IvyActions - .addExcluded(report, classifiers.toVector, allExcludes.mapValues(_.map(_.name).toSet)) + .addExcluded( + report, + classifiers.toVector, + allExcludes.mapValues(_.map(_.name).toSet).toMap + ) } } ) diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index a502e2364..7713fa145 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -85,7 +85,7 @@ private[sbt] object Load { componentProvider = app.provider.components, secondaryCacheDir = Option(zincDir), dependencyResolution = dependencyResolution, - compilerBridgeSource = ZincLmUtil.getDefaultBridgeModule(scalaProvider.version), + compilerBridgeSource = ZincLmUtil.getDefaultBridgeSourceModule(scalaProvider.version), scalaJarsTarget = zincDir, state.get(BasicKeys.classLoaderCache), log = log @@ -324,7 +324,7 @@ private[sbt] object Load { val keys = Index.allKeys(settings) val attributeKeys = Index.attributeKeys(data) ++ keys.map(_.key) val scopedKeys = keys ++ data.allKeys((s, k) => ScopedKey(s, k)).toVector - val projectsMap = projects.mapValues(_.defined.keySet) + val projectsMap = projects.mapValues(_.defined.keySet).toMap val configsMap: Map[String, Seq[Configuration]] = projects.values.flatMap(bu => bu.defined map { case (k, v) => (k, v.configurations) }).toMap val keyIndex = KeyIndex(scopedKeys.toVector, projectsMap, configsMap) @@ -638,7 +638,7 @@ private[sbt] object Load { val resolve = (_: Project).resolve(ref => Scope.resolveProjectRef(uri, rootProject, ref)) new LoadedBuildUnit( unit.unit, - unit.defined mapValues resolve, + unit.defined.mapValues(resolve).toMap, unit.rootProjects, unit.buildSettings ) diff --git a/main/src/main/scala/sbt/internal/PluginsDebug.scala b/main/src/main/scala/sbt/internal/PluginsDebug.scala index 161f47898..a7ed6ec84 100644 --- a/main/src/main/scala/sbt/internal/PluginsDebug.scala +++ b/main/src/main/scala/sbt/internal/PluginsDebug.scala @@ -171,7 +171,7 @@ private[sbt] object PluginsDebug { def definesPlugin(p: ResolvedProject): Boolean = p.autoPlugins.contains(plugin) def projectForRef(ref: ProjectRef): ResolvedProject = get(Keys.thisProject in ref) val perBuild: Map[URI, Set[AutoPlugin]] = - structure.units.mapValues(unit => availableAutoPlugins(unit).toSet) + structure.units.mapValues(unit => availableAutoPlugins(unit).toSet).toMap val pluginsThisBuild = perBuild.getOrElse(currentRef.build, Set.empty).toList lazy val context = Context( currentProject.plugins, diff --git a/main/src/main/scala/sbt/internal/RemoteCache.scala b/main/src/main/scala/sbt/internal/RemoteCache.scala index a6d017b37..9ecd54c6b 100644 --- a/main/src/main/scala/sbt/internal/RemoteCache.scala +++ b/main/src/main/scala/sbt/internal/RemoteCache.scala @@ -61,7 +61,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, localCacheDirectory.value) }, ) @@ -136,7 +136,7 @@ object RemoteCache { ivySbt := { Credentials.register(credentials.value, streams.value.log) val config0 = ivyConfiguration.value - new IvySbt(config0, CustomHttp.okhttpClient.value) + new IvySbt(config0, sbt.internal.CustomHttp.okhttpClient.value) }, ) ) ++ inTask(pullRemoteCache)( diff --git a/main/src/main/scala/sbt/internal/XMainConfiguration.scala b/main/src/main/scala/sbt/internal/XMainConfiguration.scala deleted file mode 100644 index 93dcb4e3b..000000000 --- a/main/src/main/scala/sbt/internal/XMainConfiguration.scala +++ /dev/null @@ -1,186 +0,0 @@ -/* - * sbt - * Copyright 2011 - 2018, Lightbend, Inc. - * Copyright 2008 - 2010, Mark Harrah - * Licensed under Apache License 2.0 (see LICENSE) - */ - -package sbt.internal - -import java.io.File -import java.lang.reflect.InvocationTargetException -import java.net.URL -import java.util.concurrent.{ ExecutorService, Executors } -import ClassLoaderClose.close - -import sbt.plugins.{ CorePlugin, IvyPlugin, JvmPlugin } -import xsbti._ - -private[internal] object ClassLoaderWarmup { - def warmup(): Unit = { - if (Runtime.getRuntime.availableProcessors > 1) { - val executorService: ExecutorService = - Executors.newFixedThreadPool(Runtime.getRuntime.availableProcessors - 1) - def submit[R](f: => R): Unit = { - executorService.submit(new Runnable { - override def run(): Unit = { f; () } - }) - () - } - - submit(Class.forName("sbt.internal.parser.SbtParserInit").getConstructor().newInstance()) - submit(CorePlugin.projectSettings) - submit(IvyPlugin.projectSettings) - submit(JvmPlugin.projectSettings) - submit(() => { - try { - val clazz = Class.forName("scala.reflect.runtime.package$") - clazz.getMethod("universe").invoke(clazz.getField("MODULE$").get(null)) - } catch { - case _: Exception => - } - executorService.shutdown() - }) - } - } -} - -/** - * Generates a new app configuration and invokes xMainImpl.run. For AppConfigurations generated - * by recent launchers, it is unnecessary to modify the original configuration, but configurations - * generated by older launchers need to be modified to place the test interface jar higher in - * the class hierarchy. The methods this object are implemented without using the scala library - * so that we can avoid loading any classes from the old scala provider. Verified as of - * sbt 1.3.0 that there are no references to the scala standard library in any of the methods - * in this file. - */ -private[sbt] class XMainConfiguration { - def run(moduleName: String, configuration: xsbti.AppConfiguration): xsbti.MainResult = { - val topLoader = configuration.provider.scalaProvider.launcher.topLoader - val updatedConfiguration = - try { - val method = topLoader.getClass.getMethod("getJLineJars") - val jars = method.invoke(topLoader).asInstanceOf[Array[URL]] - var canReuseConfiguration = jars.length == 3 - var j = 0 - while (j < jars.length && canReuseConfiguration) { - val s = jars(j).toString - canReuseConfiguration = s.contains("jline") || s.contains("jansi") - j += 1 - } - if (canReuseConfiguration && j == 3) configuration else makeConfiguration(configuration) - } catch { - case _: NoSuchMethodException => makeConfiguration(configuration) - } - val loader = updatedConfiguration.provider.loader - Thread.currentThread.setContextClassLoader(loader) - val clazz = loader.loadClass(s"sbt.$moduleName$$") - val instance = clazz.getField("MODULE$").get(null) - val runMethod = clazz.getMethod("run", classOf[xsbti.AppConfiguration]) - try { - val clw = loader.loadClass("sbt.internal.ClassLoaderWarmup$") - clw.getMethod("warmup").invoke(clw.getField("MODULE$").get(null)) - runMethod.invoke(instance, updatedConfiguration).asInstanceOf[xsbti.MainResult] - } catch { - case e: InvocationTargetException => - // This propogates xsbti.FullReload to the launcher - throw e.getCause - } - } - - private def makeConfiguration(configuration: xsbti.AppConfiguration): xsbti.AppConfiguration = { - val baseLoader = classOf[XMainConfiguration].getClassLoader - val className = "sbt/internal/XMainConfiguration.class" - val url = baseLoader.getResource(className) - val path = url.toString.replaceAll(s"$className$$", "") - val urlArray = new Array[URL](1) - urlArray(0) = new URL(path) - val 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. - val modifiedLoader = new XMainClassLoader(urlArray, topLoader) - val xMainConfigurationClass = modifiedLoader.loadClass("sbt.internal.XMainConfiguration") - val instance: AnyRef = - xMainConfigurationClass.getConstructor().newInstance().asInstanceOf[AnyRef] - - val metaBuildLoaderClass = modifiedLoader.loadClass("sbt.internal.MetaBuildLoader") - val method = metaBuildLoaderClass.getMethod("makeLoader", classOf[AppProvider]) - - val loader = method.invoke(null, configuration.provider).asInstanceOf[ClassLoader] - - Thread.currentThread.setContextClassLoader(loader) - val modifiedConfigurationClass = - modifiedLoader.loadClass("sbt.internal.XMainConfiguration$ModifiedConfiguration") - val cons = modifiedConfigurationClass.getConstructors()(0) - close(configuration.provider.loader) - val scalaProvider = configuration.provider.scalaProvider - val providerClass = scalaProvider.getClass - val _ = try { - val method = providerClass.getMethod("loaderLibraryOnly") - close(method.invoke(scalaProvider).asInstanceOf[ClassLoader]) - 1 - } catch { case _: NoSuchMethodException => 1 } - close(scalaProvider.loader) - close(configuration.provider.loader) - cons.newInstance(instance, configuration, loader).asInstanceOf[xsbti.AppConfiguration] - } - - /* - * Replaces the AppProvider.loader method with a new loader that puts the sbt test interface - * jar ahead of the rest of the sbt classpath in the classloading hierarchy. - */ - private[sbt] class ModifiedConfiguration( - val configuration: xsbti.AppConfiguration, - val metaLoader: ClassLoader - ) extends xsbti.AppConfiguration { - - private class ModifiedAppProvider(val appProvider: AppProvider) extends AppProvider { - private val delegate = configuration.provider.scalaProvider - object ModifiedScalaProvider extends ScalaProvider { - override def launcher(): Launcher = new Launcher { - private val delegateLauncher = delegate.launcher - private val interfaceLoader = metaLoader.loadClass("sbt.testing.Framework").getClassLoader - override def getScala(version: String): ScalaProvider = getScala(version, "") - override def getScala(version: String, reason: String): ScalaProvider = - getScala(version, reason, "org.scala-lang") - override def getScala(version: String, reason: String, scalaOrg: String): ScalaProvider = - delegateLauncher.getScala(version, reason, scalaOrg) - override def app(id: xsbti.ApplicationID, version: String): AppProvider = - delegateLauncher.app(id, version) - override def topLoader(): ClassLoader = interfaceLoader - override def globalLock(): GlobalLock = delegateLauncher.globalLock() - override def bootDirectory(): File = delegateLauncher.bootDirectory() - override def ivyRepositories(): Array[xsbti.Repository] = - delegateLauncher.ivyRepositories() - override def appRepositories(): Array[xsbti.Repository] = - delegateLauncher.appRepositories() - override def isOverrideRepositories: Boolean = delegateLauncher.isOverrideRepositories - override def ivyHome(): File = delegateLauncher.ivyHome() - override def checksums(): Array[String] = delegateLauncher.checksums() - } - override def version(): String = delegate.version - override def loader(): ClassLoader = metaLoader.getParent - override def jars(): Array[File] = delegate.jars - @deprecated("Implements deprecated api", "1.3.0") - override def libraryJar(): File = delegate.libraryJar - @deprecated("Implements deprecated api", "1.3.0") - override def compilerJar(): File = delegate.compilerJar - override def app(id: xsbti.ApplicationID): AppProvider = delegate.app(id) - def loaderLibraryOnly(): ClassLoader = metaLoader.getParent.getParent - } - override def scalaProvider(): ModifiedScalaProvider.type = ModifiedScalaProvider - override def id(): xsbti.ApplicationID = appProvider.id() - override def loader(): ClassLoader = metaLoader - @deprecated("Implements deprecated api", "1.3.0") - override def mainClass(): Class[_ <: AppMain] = appProvider.mainClass() - override def entryPoint(): Class[_] = appProvider.entryPoint() - override def newMain(): AppMain = appProvider.newMain() - override def mainClasspath(): Array[File] = appProvider.mainClasspath() - override def components(): ComponentProvider = appProvider.components() - } - override def arguments(): Array[String] = configuration.arguments - override def baseDirectory(): File = configuration.baseDirectory - override def provider(): AppProvider = new ModifiedAppProvider(configuration.provider) - } - -} 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 99270b939..07fb20312 100644 --- a/main/src/main/scala/sbt/internal/graph/backend/IvyReport.scala +++ b/main/src/main/scala/sbt/internal/graph/backend/IvyReport.scala @@ -20,13 +20,13 @@ object IvyReport { def fromReportXML(doc: Document): ModuleGraph = { def edgesForModule(id: GraphModuleId, revision: NodeSeq): Seq[Edge] = for { - caller ← revision \ "caller" + caller <- revision \ "caller" callerModule = moduleIdFromElement(caller, caller.attribute("callerrev").get.text) } yield (moduleIdFromElement(caller, caller.attribute("callerrev").get.text), id) val moduleEdges: Seq[(Module, Seq[Edge])] = for { - mod ← doc \ "dependencies" \ "module" - revision ← mod \ "revision" + mod <- doc \ "dependencies" \ "module" + revision <- mod \ "revision" rev = revision.attribute("name").get.text moduleId = moduleIdFromElement(mod, rev) module = Module( diff --git a/main/src/main/scala/sbt/internal/graph/model.scala b/main/src/main/scala/sbt/internal/graph/model.scala index f4d4676a1..219e8b4f6 100644 --- a/main/src/main/scala/sbt/internal/graph/model.scala +++ b/main/src/main/scala/sbt/internal/graph/model.scala @@ -83,7 +83,7 @@ private[sbt] case class ModuleGraph(nodes: Seq[Module], edges: Seq[Edge]) { val (f, t) = bindingFor(entry) m.addBinding(f, module(t)) } - m.toMap.mapValues(_.toSeq.sortBy(_.id.idString)).withDefaultValue(Nil) + m.toMap.mapValues(_.toSeq.sortBy(_.id.idString)).toMap.withDefaultValue(Nil) } def roots: Seq[Module] = 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 6c984f1ca..2c7c428fa 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/DOT.scala @@ -20,7 +20,7 @@ object DOT { labelRendering: HTMLLabelRendering ): String = { val nodes = { - for (n ← graph.nodes) yield { + 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( @@ -56,7 +56,7 @@ object DOT { .filterNot(e => originWasEvicted(e) || evictionTargetEdges(e)) ++ evictedByEdges val edges = { - for (e ← filteredEdges) yield { + for (e <- filteredEdges) yield { val extra = if (graph.module(e._1).isEvicted) s""" [label="Evicted By" style="$EvictedStyle"]""" 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 024d3c6bd..9f61873dc 100644 --- a/main/src/main/scala/sbt/internal/graph/rendering/GraphML.scala +++ b/main/src/main/scala/sbt/internal/graph/rendering/GraphML.scala @@ -15,7 +15,7 @@ import scala.xml.XML object GraphML { def saveAsGraphML(graph: ModuleGraph, outputFile: String): Unit = { val nodesXml = - for (n ← graph.nodes) + for (n <- graph.nodes) yield {n.id.idString} @@ -23,7 +23,7 @@ object GraphML { val edgesXml = - for (e ← graph.edges) + for (e <- graph.edges) yield val xml = diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 6977281f4..d28e28674 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -78,10 +78,18 @@ object BuildServerProtocol { ) lazy val globalSettings: Seq[Def.Setting[_]] = Seq( - bspConfig := BuildServerConnection.writeConnectionFile( - sbtVersion.value, - (ThisBuild / baseDirectory).value - ), + bspConfig := { + if (bspEnabled.value) { + BuildServerConnection.writeConnectionFile( + sbtVersion.value, + (ThisBuild / baseDirectory).value + ) + } else { + val logger = streams.value.log + logger.warn("BSP is disabled for this build") + logger.info("add 'Global / bspEnabled := true' to enable BSP") + } + }, bspEnabled := true, bspWorkspace := bspWorkspaceSetting.value, bspWorkspaceBuildTargets := Def.taskDyn { @@ -459,7 +467,7 @@ object BuildServerProtocol { (artifact, file) <- module.artifacts classifier <- artifact.classifier if classifier == "sources" } yield file.toURI - DependencySourcesItem(targetId, sources.distinct.toVector) + DependencySourcesItem(targetId, sources.toVector.distinct) } private def bspCompileTask: Def.Initialize[Task[Int]] = Def.task { diff --git a/main/src/main/scala/sbt/internal/server/Definition.scala b/main/src/main/scala/sbt/internal/server/Definition.scala index 529f2f859..4ee927fba 100644 --- a/main/src/main/scala/sbt/internal/server/Definition.scala +++ b/main/src/main/scala/sbt/internal/server/Definition.scala @@ -259,6 +259,7 @@ private[sbt] object Definition { result.future } + @com.github.ghik.silencer.silent def lspDefinition( jsonDefinition: JValue, requestId: String, @@ -287,6 +288,7 @@ private[sbt] object Definition { log.debug(s"symbol $sym") analyses .map { analyses => + import sbt.internal.CompatParColls.Converters._ val locations = analyses.par.flatMap { analysis => val selectPotentials = textProcessor.potentialClsOrTraitOrObj(sym) val classes = diff --git a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala index b55c72e75..87b8db41d 100644 --- a/main/src/main/scala/sbt/internal/server/NetworkChannel.scala +++ b/main/src/main/scala/sbt/internal/server/NetworkChannel.scala @@ -408,7 +408,7 @@ final class NetworkChannel( import sbt.protocol.codec.JsonProtocol._ StandardMain.exchange.withState { s => val structure = Project.extract(s).structure - SettingQuery.handleSettingQueryEither(req, structure) match { + sbt.internal.server.SettingQuery.handleSettingQueryEither(req, structure) match { case Right(x) => respondResult(x, execId) case Left(s) => respondError(ErrorCodes.InvalidParams, s, execId) } diff --git a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala index 29baad7fd..c88adaab8 100644 --- a/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala +++ b/main/src/main/scala/sbt/internal/server/VirtualTerminal.scala @@ -85,13 +85,14 @@ object VirtualTerminal { queue } private[sbt] def cancelRequests(name: String): Unit = { - pendingTerminalCapabilities.forEach { + import scala.collection.JavaConverters._ + pendingTerminalCapabilities.asScala.foreach { case (k @ (`name`, _), q) => pendingTerminalCapabilities.remove(k) q.put(TerminalCapabilitiesResponse(None, None, None)) case _ => } - pendingTerminalProperties.forEach { + pendingTerminalProperties.asScala.foreach { case (k @ (`name`, _), q) => pendingTerminalProperties.remove(k) q.put(TerminalPropertiesResponse(0, 0, false, false, false, false)) diff --git a/main/src/main/scala/sbt/nio/Settings.scala b/main/src/main/scala/sbt/nio/Settings.scala index d0438f93b..c3b724892 100644 --- a/main/src/main/scala/sbt/nio/Settings.scala +++ b/main/src/main/scala/sbt/nio/Settings.scala @@ -269,7 +269,9 @@ private[sbt] object Settings { * @return a task definition that retrieves the input files and their file stamps scoped to the * input key. */ + @com.github.ghik.silencer.silent private[sbt] def fileStamps(scopedKey: Def.ScopedKey[_]): Def.Setting[_] = { + import sbt.internal.CompatParColls.Converters._ val scope = scopedKey.scope addTaskDefinition(Keys.inputFileStamps in scope := { val cache = (unmanagedFileStampCache in scope).value diff --git a/main/src/main/scala/sbt/nio/Watch.scala b/main/src/main/scala/sbt/nio/Watch.scala index 0fe4873e1..ace5d26e3 100644 --- a/main/src/main/scala/sbt/nio/Watch.scala +++ b/main/src/main/scala/sbt/nio/Watch.scala @@ -516,7 +516,7 @@ object Watch { }).reverse.foreach { o => if (distinctOpts.add(o.input)) opts += o } - opts.reverse + opts.toSeq.reverse } private def waitMessage(project: ProjectRef, commands: Seq[String]): Seq[String] = { val cmds = commands.map(project.project + "/" + _.trim).mkString("; ") diff --git a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala index d42e0f535..0d970663c 100644 --- a/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala +++ b/main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala @@ -43,7 +43,9 @@ object SemanticdbPlugin extends AutoPlugin { }, semanticdbOptions += { val sv = scalaVersion.value - if (ScalaInstance.isDotty(sv)) "-Ysemanticdb" + if (sv.startsWith("0.") || sv.startsWith("3.0.0-M1") || sv.startsWith("3.0.0-M2")) + "-Ysemanticdb" + else if (sv.startsWith("3.")) "-Xsemanticdb" else "-Yrangepos" } ) ++ diff --git a/main/src/test/scala/PluginsTest.scala b/main/src/test/scala/PluginsTest.scala index 0dce92299..a3be3a322 100644 --- a/main/src/test/scala/PluginsTest.scala +++ b/main/src/test/scala/PluginsTest.scala @@ -7,52 +7,66 @@ package sbt -import org.specs2._ -import mutable.Specification import sbt.util.Logger -object PluginsTest extends Specification { +object PluginsTest extends verify.BasicTestSuite { import AI._ - "Auto plugin" should { - "enable plugins with trigger=allRequirements AND requirements met" in { - deducePlugin(A && B, log) must contain(Q) + test("Auto plugin should enable plugins with trigger=allRequirements AND requirements met") { + assert(deducePlugin(A && B, log).contains(Q)) + } + + test("it should enable transitive plugins with trigger=allRequirements AND requirements met") { + assert(deducePlugin(A && B, log) contains (R)) + } + + test("it should order enable plugins after required plugins") { + val ns = deducePlugin(A && B, log) + assert((ns indexOf Q) > (ns indexOf A)) + assert((ns indexOf Q) > (ns indexOf B)) + assert((ns indexOf R) > (ns indexOf A)) + assert((ns indexOf R) > (ns indexOf B)) + assert((ns indexOf R) > (ns indexOf Q)) + } + + test("it should not enable plugins with trigger=allRequirements but conflicting requirements") { + assert(!deducePlugin(A && B, log).contains(S)) + } + + test("it should enable plugins that are required by the requested plugins") { + val ns = deducePlugin(Q, log) + assert(ns.contains(A)) + assert(ns.contains(B)) + } + + test("it should throw an AutoPluginException on conflicting requirements") { + try { + deducePlugin(S, log) + } catch { + case e: AutoPluginException => + 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 + - conflict: sbt.AI$$R is enabled by sbt.AI$$Q; excluded by sbt.AI$$S""", + e.message + ) } - "enable transitive plugins with trigger=allRequirements AND requirements met" in { - deducePlugin(A && B, log) must contain(R) - } - "order enable plugins after required plugins" in { - val ns = deducePlugin(A && B, log) - ((ns indexOf Q) must beGreaterThan(ns indexOf A)) and - ((ns indexOf Q) must beGreaterThan(ns indexOf B)) and - ((ns indexOf R) must beGreaterThan(ns indexOf A)) and - ((ns indexOf R) must beGreaterThan(ns indexOf B)) and - ((ns indexOf R) must beGreaterThan(ns indexOf Q)) - } - "not enable plugins with trigger=allRequirements but conflicting requirements" in { - deducePlugin(A && B, log) must not contain (S) - } - "enable plugins that are required by the requested plugins" in { - val ns = deducePlugin(Q, log) - (ns must contain(A)) and - (ns must contain(B)) - } - "throw an AutoPluginException on conflicting requirements" in { - deducePlugin(S, log) must throwAn[AutoPluginException]( - message = 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 - - conflict: sbt.AI\\$$R is enabled by sbt.AI\\$$Q; excluded by sbt.AI\\$$S""" - ) - } - "generates a detailed report on conflicting requirements" in { - deducePlugin(T && U, log) must throwAn[AutoPluginException]( - message = 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 - - conflict: sbt.AI\\$$R is enabled by sbt.AI\\$$Q; excluded by sbt.AI\\$$T""" - ) + } + + test("it should generate a detailed report on conflicting requirements") { + try { + deducePlugin(T && U, log) + } catch { + case e: AutoPluginException => + 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 + - conflict: sbt.AI$$R is enabled by sbt.AI$$Q; excluded by sbt.AI$$T""", + e.message + ) } } } diff --git a/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala b/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala index 7e59b6d14..87ad88540 100644 --- a/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala +++ b/main/src/test/scala/sbt/internal/server/SettingQueryTest.scala @@ -213,15 +213,31 @@ object SettingQueryTest extends org.specs2.mutable.Specification { // "t/pollInterval" in qok("500", "Int") "t/sourcesInBase" in qok("true", "Boolean") "t/startYear" in qok("null", "scala.Option[Int]") - "t/scalaArtifacts" in qok( - """["scala-library","scala-compiler","scala-reflect","scala-actors","scalap"]""", - "scala.collection.Seq[java.lang.String]" - ) + "t/scalaArtifacts" in { + if (scala.util.Properties.versionNumberString.startsWith("2.12")) + qok( + """["scala-library","scala-compiler","scala-reflect","scala-actors","scalap"]""", + "scala.collection.Seq[java.lang.String]" + ) + else + qok( + """["scala-library","scala-compiler","scala-reflect","scala-actors","scalap"]""", + "scala.collection.immutable.Seq[java.lang.String]" + ) + } - "t/libraryDependencies" in qok( - """[{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.1","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{},"crossVersion":{"type":"Disabled"}}]""", - "scala.collection.Seq[sbt.librarymanagement.ModuleID]" - ) + "t/libraryDependencies" in { + if (scala.util.Properties.versionNumberString.startsWith("2.12")) + qok( + """[{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.1","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{},"crossVersion":{"type":"Disabled"}}]""", + "scala.collection.Seq[sbt.librarymanagement.ModuleID]" + ) + else + qok( + """[{"organization":"org.scala-lang","name":"scala-library","revision":"2.12.1","isChanging":false,"isTransitive":true,"isForce":false,"explicitArtifacts":[],"inclusions":[],"exclusions":[],"extraAttributes":{},"crossVersion":{"type":"Disabled"}}]""", + "scala.collection.immutable.Seq[sbt.librarymanagement.ModuleID]" + ) + } "scalaVersion" in qko("Not a valid project ID: scalaVersion\\nscalaVersion\\n ^") "t/scalacOptions" in qko( diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 53e55e884..a7a476686 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,15 +14,15 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.4.0") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.4.0") - val zincVersion = nightlyVersion.getOrElse("1.4.3") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.5.0-M3") + val zincVersion = nightlyVersion.getOrElse("1.5.0-M2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion private val libraryManagementCore = "org.scala-sbt" %% "librarymanagement-core" % lmVersion private val libraryManagementIvy = "org.scala-sbt" %% "librarymanagement-ivy" % lmVersion - val launcherVersion = "1.1.5" + val launcherVersion = "1.1.6" val launcherInterface = "org.scala-sbt" % "launcher-interface" % launcherVersion val rawLauncher = "org.scala-sbt" % "launcher" % launcherVersion val testInterface = "org.scala-sbt" % "test-interface" % "1.0" @@ -77,7 +77,7 @@ object Dependencies { def addSbtZincCompile = addSbtModule(sbtZincPath, "zincCompileJVM2_12", zincCompile) def addSbtZincCompileCore = addSbtModule(sbtZincPath, "zincCompileCoreJVM2_12", zincCompileCore) - val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.4" + val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % "2.0.5" def sjsonNew(n: String) = Def.setting("com.eed3si9n" %% n % "0.9.1") // contrabandSjsonNewVersion.value @@ -102,6 +102,7 @@ object Dependencies { val scalaXml = "org.scala-lang.modules" %% "scala-xml" % "1.3.0" val scalaParsers = "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" val scalaReflect = Def.setting("org.scala-lang" % "scala-reflect" % scalaVersion.value) + val scalaPar = "org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.0" // specify all of log4j modules to prevent misalignment def log4jModule = (n: String) => "org.apache.logging.log4j" % n % "2.11.2" diff --git a/project/Util.scala b/project/Util.scala index 9e5dcdf68..96a4a865e 100644 --- a/project/Util.scala +++ b/project/Util.scala @@ -5,6 +5,7 @@ import Keys._ import sbt.internal.inc.Analysis object Util { + val version2_13 = settingKey[String]("version number") val ExclusiveTest: Tags.Tag = Tags.Tag("exclusive-test") val componentID: SettingKey[Option[String]] = settingKey[Option[String]]("") diff --git a/project/build.properties b/project/build.properties index 7de0a9382..d91c272d4 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.4.4 +sbt.version=1.4.6 diff --git a/project/plugins.sbt b/project/plugins.sbt index 3dfda295d..254c1387d 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -6,7 +6,7 @@ addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.0.0") addSbtPlugin("org.foundweekends" % "sbt-bintray" % "0.5.6") addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.0.0") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.0") -addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.5.0") +addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.5.1") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "3.0.2") addSbtPlugin("com.lightbend" % "sbt-whitesource" % "0.1.14") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.9") diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/BspCompileResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/BspCompileResult.scala index 49b73a8fc..a007c0a3d 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/BspCompileResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/BspCompileResult.scala @@ -15,10 +15,10 @@ final class BspCompileResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: BspCompileResult => (this.originId == x.originId) && (this.statusCode == x.statusCode) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.BspCompileResult".##) + originId.##) + statusCode.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/BspConnectionDetails.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/BspConnectionDetails.scala index 16cb874e5..fdd5b2b7d 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/BspConnectionDetails.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/BspConnectionDetails.scala @@ -21,10 +21,10 @@ final class BspConnectionDetails private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: BspConnectionDetails => (this.name == x.name) && (this.version == x.version) && (this.bspVersion == x.bspVersion) && (this.languages == x.languages) && (this.argv == x.argv) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.BspConnectionDetails".##) + name.##) + version.##) + bspVersion.##) + languages.##) + argv.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildClientCapabilities.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildClientCapabilities.scala index f1895ddef..7e6c05f4d 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildClientCapabilities.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildClientCapabilities.scala @@ -13,10 +13,10 @@ final class BuildClientCapabilities private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: BuildClientCapabilities => (this.languageIds == x.languageIds) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.BuildClientCapabilities".##) + languageIds.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildServerCapabilities.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildServerCapabilities.scala index 518fe0e12..c9a08fee8 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildServerCapabilities.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildServerCapabilities.scala @@ -20,10 +20,10 @@ final class BuildServerCapabilities private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: BuildServerCapabilities => (this.compileProvider == x.compileProvider) && (this.testProvider == x.testProvider) && (this.runProvider == x.runProvider) && (this.dependencySourcesProvider == x.dependencySourcesProvider) && (this.canReload == x.canReload) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.BuildServerCapabilities".##) + compileProvider.##) + testProvider.##) + runProvider.##) + dependencySourcesProvider.##) + canReload.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTarget.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTarget.scala index efd74fe05..f7d4f4c2c 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTarget.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTarget.scala @@ -42,10 +42,10 @@ final class BuildTarget private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: BuildTarget => (this.id == x.id) && (this.displayName == x.displayName) && (this.baseDirectory == x.baseDirectory) && (this.tags == x.tags) && (this.capabilities == x.capabilities) && (this.languageIds == x.languageIds) && (this.dependencies == x.dependencies) && (this.dataKind == x.dataKind) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.BuildTarget".##) + id.##) + displayName.##) + baseDirectory.##) + tags.##) + capabilities.##) + languageIds.##) + dependencies.##) + dataKind.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetCapabilities.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetCapabilities.scala index 180bd1738..bc4950db4 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetCapabilities.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetCapabilities.scala @@ -16,10 +16,10 @@ final class BuildTargetCapabilities private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: BuildTargetCapabilities => (this.canCompile == x.canCompile) && (this.canTest == x.canTest) && (this.canRun == x.canRun) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.BuildTargetCapabilities".##) + canCompile.##) + canTest.##) + canRun.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetIdentifier.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetIdentifier.scala index 9a2d2e7f9..15ed0becc 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetIdentifier.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/BuildTargetIdentifier.scala @@ -13,10 +13,10 @@ final class BuildTargetIdentifier private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: BuildTargetIdentifier => (this.uri == x.uri) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.BuildTargetIdentifier".##) + uri.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileParams.scala index 625f2baaf..5d533aaad 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileParams.scala @@ -18,10 +18,10 @@ final class CompileParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CompileParams => (this.targets == x.targets) && (this.originId == x.originId) && (this.arguments == x.arguments) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.CompileParams".##) + targets.##) + originId.##) + arguments.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileProvider.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileProvider.scala index 74ddd4840..b0b9455f8 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileProvider.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileProvider.scala @@ -9,10 +9,10 @@ final class CompileProvider private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CompileProvider => (this.languageIds == x.languageIds) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.CompileProvider".##) + languageIds.##) } 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 1d839e3ac..5eb2ac41a 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileReport.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileReport.scala @@ -20,10 +20,10 @@ final class CompileReport private ( - override def equals(o: Any): Boolean = o match { + 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 _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.CompileReport".##) + target.##) + originId.##) + errors.##) + warnings.##) + time.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileTask.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileTask.scala index 74173048a..cbe6ee205 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileTask.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/CompileTask.scala @@ -10,10 +10,10 @@ final class CompileTask private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CompileTask => (this.target == x.target) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.CompileTask".##) + target.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/DebugSessionAddress.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/DebugSessionAddress.scala new file mode 100644 index 000000000..23db6d9d4 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/DebugSessionAddress.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 +/** @param uri The target's Uri */ +final class DebugSessionAddress private ( + val uri: java.net.URI) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: DebugSessionAddress => (this.uri == x.uri) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (17 + "sbt.internal.bsp.DebugSessionAddress".##) + uri.##) + } + override def toString: String = { + "DebugSessionAddress(" + uri + ")" + } + private[this] def copy(uri: java.net.URI = uri): DebugSessionAddress = { + new DebugSessionAddress(uri) + } + def withUri(uri: java.net.URI): DebugSessionAddress = { + copy(uri = uri) + } +} +object DebugSessionAddress { + + def apply(uri: java.net.URI): DebugSessionAddress = new DebugSessionAddress(uri) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/DebugSessionParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/DebugSessionParams.scala new file mode 100644 index 000000000..a19a814c0 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/DebugSessionParams.scala @@ -0,0 +1,52 @@ +/** + * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +// DO NOT EDIT MANUALLY +package sbt.internal.bsp +/** + * @param targets A sequence of build targets affected by the debugging action. + * @param dataKind The kind of data to expect in the `data` field. + * @param data A language-agnostic JSON object interpreted by the server. + */ +final class DebugSessionParams private ( + val targets: Vector[sbt.internal.bsp.BuildTargetIdentifier], + val dataKind: Option[String], + val data: Option[sjsonnew.shaded.scalajson.ast.unsafe.JValue]) extends Serializable { + + + + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { + case x: DebugSessionParams => (this.targets == x.targets) && (this.dataKind == x.dataKind) && (this.data == x.data) + case _ => false + }) + override def hashCode: Int = { + 37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.DebugSessionParams".##) + targets.##) + dataKind.##) + data.##) + } + override def toString: String = { + "DebugSessionParams(" + targets + ", " + dataKind + ", " + data + ")" + } + private[this] def copy(targets: Vector[sbt.internal.bsp.BuildTargetIdentifier] = targets, dataKind: Option[String] = dataKind, data: Option[sjsonnew.shaded.scalajson.ast.unsafe.JValue] = data): DebugSessionParams = { + new DebugSessionParams(targets, dataKind, data) + } + def withTargets(targets: Vector[sbt.internal.bsp.BuildTargetIdentifier]): DebugSessionParams = { + copy(targets = targets) + } + def withDataKind(dataKind: Option[String]): DebugSessionParams = { + copy(dataKind = dataKind) + } + def withDataKind(dataKind: String): DebugSessionParams = { + copy(dataKind = Option(dataKind)) + } + def withData(data: Option[sjsonnew.shaded.scalajson.ast.unsafe.JValue]): DebugSessionParams = { + copy(data = data) + } + def withData(data: sjsonnew.shaded.scalajson.ast.unsafe.JValue): DebugSessionParams = { + copy(data = Option(data)) + } +} +object DebugSessionParams { + + def apply(targets: Vector[sbt.internal.bsp.BuildTargetIdentifier], dataKind: Option[String], data: Option[sjsonnew.shaded.scalajson.ast.unsafe.JValue]): DebugSessionParams = new DebugSessionParams(targets, dataKind, data) + def apply(targets: Vector[sbt.internal.bsp.BuildTargetIdentifier], dataKind: String, data: sjsonnew.shaded.scalajson.ast.unsafe.JValue): DebugSessionParams = new DebugSessionParams(targets, Option(dataKind), Option(data)) +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesItem.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesItem.scala index 241434b24..39ff3ccdc 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesItem.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesItem.scala @@ -12,10 +12,10 @@ final class DependencySourcesItem private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: DependencySourcesItem => (this.target == x.target) && (this.sources == x.sources) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.DependencySourcesItem".##) + target.##) + sources.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesParams.scala index 6519b67f7..fc3ed3be4 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesParams.scala @@ -10,10 +10,10 @@ final class DependencySourcesParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: DependencySourcesParams => (this.targets == x.targets) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.DependencySourcesParams".##) + targets.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesResult.scala index 863006015..4ee1fe136 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/DependencySourcesResult.scala @@ -10,10 +10,10 @@ final class DependencySourcesResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: DependencySourcesResult => (this.items == x.items) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.DependencySourcesResult".##) + items.##) } 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 ed651c44e..a9e2dd10f 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/Diagnostic.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/Diagnostic.scala @@ -24,10 +24,10 @@ final class Diagnostic private ( - override def equals(o: Any): Boolean = o match { + 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 _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.Diagnostic".##) + range.##) + severity.##) + code.##) + source.##) + message.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildParams.scala index 915d8a35d..233153517 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildParams.scala @@ -23,10 +23,10 @@ final class InitializeBuildParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: InitializeBuildParams => (this.displayName == x.displayName) && (this.version == x.version) && (this.bspVersion == x.bspVersion) && (this.rootUri == x.rootUri) && (this.capabilities == x.capabilities) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.InitializeBuildParams".##) + displayName.##) + version.##) + bspVersion.##) + rootUri.##) + capabilities.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildResult.scala index 1c7413563..f88df9469 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/InitializeBuildResult.scala @@ -20,10 +20,10 @@ final class InitializeBuildResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: InitializeBuildResult => (this.displayName == x.displayName) && (this.version == x.version) && (this.bspVersion == x.bspVersion) && (this.capabilities == x.capabilities) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.InitializeBuildResult".##) + displayName.##) + version.##) + bspVersion.##) + capabilities.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/MetalsMetadata.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/MetalsMetadata.scala index dd4da0d4e..cc21ab855 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/MetalsMetadata.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/MetalsMetadata.scala @@ -15,10 +15,10 @@ final class MetalsMetadata private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: MetalsMetadata => (this.semanticdbVersion == x.semanticdbVersion) && (this.supportedScalaVersions == x.supportedScalaVersions) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.MetalsMetadata".##) + semanticdbVersion.##) + supportedScalaVersions.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/Position.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/Position.scala index a42cc1693..39b6279ba 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/Position.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/Position.scala @@ -16,10 +16,10 @@ final class Position private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: Position => (this.line == x.line) && (this.character == x.character) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.Position".##) + line.##) + character.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/PublishDiagnosticsParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/PublishDiagnosticsParams.scala index 955f5d693..1dbf2f6c8 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/PublishDiagnosticsParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/PublishDiagnosticsParams.scala @@ -24,10 +24,10 @@ final class PublishDiagnosticsParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: PublishDiagnosticsParams => (this.textDocument == x.textDocument) && (this.buildTarget == x.buildTarget) && (this.originId == x.originId) && (this.diagnostics == x.diagnostics) && (this.reset == x.reset) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.PublishDiagnosticsParams".##) + textDocument.##) + buildTarget.##) + originId.##) + diagnostics.##) + reset.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/Range.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/Range.scala index 4b054c867..bfda98ca6 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/Range.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/Range.scala @@ -16,10 +16,10 @@ final class Range private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: Range => (this.start == x.start) && (this.end == x.end) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.Range".##) + start.##) + end.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/RunParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/RunParams.scala index de765ca81..4d0f5a74b 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/RunParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/RunParams.scala @@ -26,10 +26,10 @@ final class RunParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: RunParams => (this.target == x.target) && (this.originId == x.originId) && (this.arguments == x.arguments) && (this.dataKind == x.dataKind) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.RunParams".##) + target.##) + originId.##) + arguments.##) + dataKind.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/RunProvider.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/RunProvider.scala index 6cd793226..2b8088890 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/RunProvider.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/RunProvider.scala @@ -9,10 +9,10 @@ final class RunProvider private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: RunProvider => (this.languageIds == x.languageIds) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.RunProvider".##) + languageIds.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/RunResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/RunResult.scala index 89f807cd3..a8a0086c3 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/RunResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/RunResult.scala @@ -15,10 +15,10 @@ final class RunResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: RunResult => (this.originId == x.originId) && (this.statusCode == x.statusCode) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.RunResult".##) + originId.##) + statusCode.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/SbtBuildTarget.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/SbtBuildTarget.scala index d454280e7..723010eb5 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/SbtBuildTarget.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/SbtBuildTarget.scala @@ -26,10 +26,10 @@ final class SbtBuildTarget private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SbtBuildTarget => (this.sbtVersion == x.sbtVersion) && (this.autoImports == x.autoImports) && (this.scalaBuildTarget == x.scalaBuildTarget) && (this.parent == x.parent) && (this.children == x.children) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.SbtBuildTarget".##) + sbtVersion.##) + autoImports.##) + scalaBuildTarget.##) + parent.##) + children.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaBuildTarget.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaBuildTarget.scala index 14c486466..32e5885a9 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaBuildTarget.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaBuildTarget.scala @@ -24,10 +24,10 @@ final class ScalaBuildTarget private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaBuildTarget => (this.scalaOrganization == x.scalaOrganization) && (this.scalaVersion == x.scalaVersion) && (this.scalaBinaryVersion == x.scalaBinaryVersion) && (this.platform == x.platform) && (this.jars == x.jars) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaBuildTarget".##) + scalaOrganization.##) + scalaVersion.##) + scalaBinaryVersion.##) + platform.##) + jars.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClass.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClass.scala index 64eecbe6e..f5c6da7f4 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClass.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClass.scala @@ -16,10 +16,10 @@ final class ScalaMainClass private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaMainClass => (this.`class` == x.`class`) && (this.arguments == x.arguments) && (this.jvmOptions == x.jvmOptions) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaMainClass".##) + `class`.##) + arguments.##) + jvmOptions.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesItem.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesItem.scala index 3d68c4f01..188b3fcd5 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesItem.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesItem.scala @@ -14,10 +14,10 @@ final class ScalaMainClassesItem private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaMainClassesItem => (this.target == x.target) && (this.classes == x.classes) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaMainClassesItem".##) + target.##) + classes.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesParams.scala index 3a3c10173..7e891531c 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesParams.scala @@ -16,10 +16,10 @@ final class ScalaMainClassesParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaMainClassesParams => (this.targets == x.targets) && (this.originId == x.originId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaMainClassesParams".##) + targets.##) + originId.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesResult.scala index b8203765d..5ebccfb3b 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaMainClassesResult.scala @@ -11,10 +11,10 @@ final class ScalaMainClassesResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaMainClassesResult => (this.items == x.items) && (this.originId == x.originId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaMainClassesResult".##) + items.##) + originId.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesItem.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesItem.scala index 087404198..210e8cc30 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesItem.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesItem.scala @@ -14,10 +14,10 @@ final class ScalaTestClassesItem private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaTestClassesItem => (this.target == x.target) && (this.classes == x.classes) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaTestClassesItem".##) + target.##) + classes.##) } 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 7903fba21..d7c4b9a39 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesParams.scala @@ -16,10 +16,10 @@ final class ScalaTestClassesParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaTestClassesParams => (this.targets == x.targets) && (this.originId == x.originId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaTestClassesParams".##) + targets.##) + originId.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesResult.scala index 8c84ec00e..40000a25a 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestClassesResult.scala @@ -11,10 +11,10 @@ final class ScalaTestClassesResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaTestClassesResult => (this.items == x.items) && (this.originId == x.originId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.ScalaTestClassesResult".##) + items.##) + originId.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestParams.scala index 387c9102c..67c19a889 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalaTestParams.scala @@ -15,10 +15,10 @@ final class ScalaTestParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalaTestParams => (this.testClasses == x.testClasses) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.ScalaTestParams".##) + testClasses.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsItem.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsItem.scala index da9cc5e6f..21f25ef80 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsItem.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsItem.scala @@ -21,10 +21,10 @@ final class ScalacOptionsItem private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalacOptionsItem => (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.ScalacOptionsItem".##) + target.##) + options.##) + classpath.##) + classDirectory.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsParams.scala index 42a317b64..405ea9239 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsParams.scala @@ -14,10 +14,10 @@ final class ScalacOptionsParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalacOptionsParams => (this.targets == x.targets) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.ScalacOptionsParams".##) + targets.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsResult.scala index c35e96861..0ec117c04 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/ScalacOptionsResult.scala @@ -9,10 +9,10 @@ final class ScalacOptionsResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ScalacOptionsResult => (this.items == x.items) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.ScalacOptionsResult".##) + items.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourceItem.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourceItem.scala index 8a0ffdebf..8c7eb77a8 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourceItem.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourceItem.scala @@ -20,10 +20,10 @@ final class SourceItem private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SourceItem => (this.uri == x.uri) && (this.kind == x.kind) && (this.generated == x.generated) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.SourceItem".##) + uri.##) + kind.##) + generated.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesItem.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesItem.scala index c58dadb76..52b399df8 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesItem.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesItem.scala @@ -11,10 +11,10 @@ final class SourcesItem private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SourcesItem => (this.target == x.target) && (this.sources == x.sources) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.SourcesItem".##) + target.##) + sources.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesParams.scala index 6e88b185c..70f481003 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesParams.scala @@ -10,10 +10,10 @@ final class SourcesParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SourcesParams => (this.targets == x.targets) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.SourcesParams".##) + targets.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesResult.scala index 36c2a60d2..c605d062b 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/SourcesResult.scala @@ -10,10 +10,10 @@ final class SourcesResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SourcesResult => (this.items == x.items) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.SourcesResult".##) + items.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskFinishParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskFinishParams.scala index 8d417c177..4fa8a4220 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskFinishParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskFinishParams.scala @@ -22,10 +22,10 @@ final class TaskFinishParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TaskFinishParams => (this.taskId == x.taskId) && (this.eventTime == x.eventTime) && (this.message == x.message) && (this.status == x.status) && (this.dataKind == x.dataKind) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.TaskFinishParams".##) + taskId.##) + eventTime.##) + message.##) + status.##) + dataKind.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskId.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskId.scala index e81f221c6..c1dfbc97f 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskId.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskId.scala @@ -15,10 +15,10 @@ final class TaskId private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TaskId => (this.id == x.id) && (this.parents == x.parents) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.TaskId".##) + id.##) + parents.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskStartParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskStartParams.scala index 362d433b0..f37febb95 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskStartParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/TaskStartParams.scala @@ -21,10 +21,10 @@ final class TaskStartParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TaskStartParams => (this.taskId == x.taskId) && (this.eventTime == x.eventTime) && (this.message == x.message) && (this.dataKind == x.dataKind) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.TaskStartParams".##) + taskId.##) + eventTime.##) + message.##) + dataKind.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/TestParams.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/TestParams.scala index 551d110c5..a0c8c0b62 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/TestParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/TestParams.scala @@ -25,10 +25,10 @@ final class TestParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestParams => (this.targets == x.targets) && (this.originId == x.originId) && (this.arguments == x.arguments) && (this.dataKind == x.dataKind) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.bsp.TestParams".##) + targets.##) + originId.##) + arguments.##) + dataKind.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/TestProvider.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/TestProvider.scala index 84a15804c..264ca4245 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/TestProvider.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/TestProvider.scala @@ -9,10 +9,10 @@ final class TestProvider private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestProvider => (this.languageIds == x.languageIds) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.TestProvider".##) + languageIds.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/TestResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/TestResult.scala index 87235b0db..0f3e934e9 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/TestResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/TestResult.scala @@ -15,10 +15,10 @@ final class TestResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestResult => (this.originId == x.originId) && (this.statusCode == x.statusCode) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.bsp.TestResult".##) + originId.##) + statusCode.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/TextDocumentIdentifier.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/TextDocumentIdentifier.scala index 6435a0f67..b62fdd9ef 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/TextDocumentIdentifier.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/TextDocumentIdentifier.scala @@ -10,10 +10,10 @@ final class TextDocumentIdentifier private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TextDocumentIdentifier => (this.uri == x.uri) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.TextDocumentIdentifier".##) + uri.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/WorkspaceBuildTargetsResult.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/WorkspaceBuildTargetsResult.scala index 6497b9aa6..794ce9fde 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/bsp/WorkspaceBuildTargetsResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/WorkspaceBuildTargetsResult.scala @@ -14,10 +14,10 @@ final class WorkspaceBuildTargetsResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: WorkspaceBuildTargetsResult => (this.targets == x.targets) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.bsp.WorkspaceBuildTargetsResult".##) + targets.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DebugSessionAddressFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DebugSessionAddressFormats.scala new file mode 100644 index 000000000..d63db6510 --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DebugSessionAddressFormats.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 DebugSessionAddressFormats { self: sjsonnew.BasicJsonProtocol => +implicit lazy val DebugSessionAddressFormat: JsonFormat[sbt.internal.bsp.DebugSessionAddress] = new JsonFormat[sbt.internal.bsp.DebugSessionAddress] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.DebugSessionAddress = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val uri = unbuilder.readField[java.net.URI]("uri") + unbuilder.endObject() + sbt.internal.bsp.DebugSessionAddress(uri) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.DebugSessionAddress, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("uri", obj.uri) + builder.endObject() + } +} +} diff --git a/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DebugSessionParamsFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DebugSessionParamsFormats.scala new file mode 100644 index 000000000..8d4ccab6e --- /dev/null +++ b/protocol/src/main/contraband-scala/sbt/internal/bsp/codec/DebugSessionParamsFormats.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 DebugSessionParamsFormats { self: sbt.internal.bsp.codec.BuildTargetIdentifierFormats with sbt.internal.util.codec.JValueFormats with sjsonnew.BasicJsonProtocol => +implicit lazy val DebugSessionParamsFormat: JsonFormat[sbt.internal.bsp.DebugSessionParams] = new JsonFormat[sbt.internal.bsp.DebugSessionParams] { + override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.bsp.DebugSessionParams = { + __jsOpt match { + case Some(__js) => + unbuilder.beginObject(__js) + val targets = unbuilder.readField[Vector[sbt.internal.bsp.BuildTargetIdentifier]]("targets") + val dataKind = unbuilder.readField[Option[String]]("dataKind") + val data = unbuilder.readField[Option[sjsonnew.shaded.scalajson.ast.unsafe.JValue]]("data") + unbuilder.endObject() + sbt.internal.bsp.DebugSessionParams(targets, dataKind, data) + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: sbt.internal.bsp.DebugSessionParams, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("targets", obj.targets) + builder.addField("dataKind", obj.dataKind) + builder.addField("data", obj.data) + 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 8de3f325f..a5fd68958 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 @@ -9,6 +9,8 @@ trait JsonProtocol extends sjsonnew.BasicJsonProtocol with sbt.internal.bsp.codec.BuildTargetCapabilitiesFormats with sbt.internal.util.codec.JValueFormats with sbt.internal.bsp.codec.BuildTargetFormats + with sbt.internal.bsp.codec.DebugSessionAddressFormats + with sbt.internal.bsp.codec.DebugSessionParamsFormats with sbt.internal.bsp.codec.TaskIdFormats with sbt.internal.bsp.codec.TextDocumentIdentifierFormats with sbt.internal.bsp.codec.PositionFormats diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/CancelRequestParams.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/CancelRequestParams.scala index 00d618445..377fabc33 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/CancelRequestParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/CancelRequestParams.scala @@ -10,10 +10,10 @@ final class CancelRequestParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CancelRequestParams => (this.id == x.id) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.langserver.CancelRequestParams".##) + id.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/ClientCapabilities.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/ClientCapabilities.scala index a3bd10eae..5a0b2329d 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/ClientCapabilities.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/ClientCapabilities.scala @@ -8,10 +8,10 @@ final class ClientCapabilities private () extends Serializable { -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: ClientCapabilities => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.internal.langserver.ClientCapabilities".##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/Command.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/Command.scala deleted file mode 100644 index f17c17c75..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/Command.scala +++ /dev/null @@ -1,28 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver -abstract class Command( - val title: Option[String], - val command: Option[String], - val arguments: Vector[String]) extends Serializable { - - - - - override def equals(o: Any): Boolean = o match { - case x: Command => (this.title == x.title) && (this.command == x.command) && (this.arguments == x.arguments) - case _ => false - } - override def hashCode: Int = { - 37 * (37 * (37 * (37 * (17 + "sbt.internal.langserver.Command".##) + title.##) + command.##) + arguments.##) - } - override def toString: String = { - "Command(" + title + ", " + command + ", " + arguments + ")" - } -} -object Command { - -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionContext.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionContext.scala deleted file mode 100644 index e188837df..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionContext.scala +++ /dev/null @@ -1,40 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver -final class CompletionContext private ( - val triggerKind: Int, - val triggerCharacter: Option[String]) extends Serializable { - - - - override def equals(o: Any): Boolean = o match { - case x: CompletionContext => (this.triggerKind == x.triggerKind) && (this.triggerCharacter == x.triggerCharacter) - case _ => false - } - override def hashCode: Int = { - 37 * (37 * (37 * (17 + "sbt.internal.langserver.CompletionContext".##) + triggerKind.##) + triggerCharacter.##) - } - override def toString: String = { - "CompletionContext(" + triggerKind + ", " + triggerCharacter + ")" - } - private[this] def copy(triggerKind: Int = triggerKind, triggerCharacter: Option[String] = triggerCharacter): CompletionContext = { - new CompletionContext(triggerKind, triggerCharacter) - } - def withTriggerKind(triggerKind: Int): CompletionContext = { - copy(triggerKind = triggerKind) - } - def withTriggerCharacter(triggerCharacter: Option[String]): CompletionContext = { - copy(triggerCharacter = triggerCharacter) - } - def withTriggerCharacter(triggerCharacter: String): CompletionContext = { - copy(triggerCharacter = Option(triggerCharacter)) - } -} -object CompletionContext { - - def apply(triggerKind: Int, triggerCharacter: Option[String]): CompletionContext = new CompletionContext(triggerKind, triggerCharacter) - def apply(triggerKind: Int, triggerCharacter: String): CompletionContext = new CompletionContext(triggerKind, Option(triggerCharacter)) -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionItem.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionItem.scala deleted file mode 100644 index a92151fc2..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionItem.scala +++ /dev/null @@ -1,32 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver -final class CompletionItem private ( - val label: String) extends Serializable { - - - - override def equals(o: Any): Boolean = o match { - case x: CompletionItem => (this.label == x.label) - case _ => false - } - override def hashCode: Int = { - 37 * (37 * (17 + "sbt.internal.langserver.CompletionItem".##) + label.##) - } - override def toString: String = { - "CompletionItem(" + label + ")" - } - private[this] def copy(label: String = label): CompletionItem = { - new CompletionItem(label) - } - def withLabel(label: String): CompletionItem = { - copy(label = label) - } -} -object CompletionItem { - - def apply(label: String): CompletionItem = new CompletionItem(label) -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionList.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionList.scala deleted file mode 100644 index 86a3bbbc3..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionList.scala +++ /dev/null @@ -1,36 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver -final class CompletionList private ( - val isIncomplete: Boolean, - val items: Vector[sbt.internal.langserver.CompletionItem]) extends Serializable { - - - - override def equals(o: Any): Boolean = o match { - case x: CompletionList => (this.isIncomplete == x.isIncomplete) && (this.items == x.items) - case _ => false - } - override def hashCode: Int = { - 37 * (37 * (37 * (17 + "sbt.internal.langserver.CompletionList".##) + isIncomplete.##) + items.##) - } - override def toString: String = { - "CompletionList(" + isIncomplete + ", " + items + ")" - } - private[this] def copy(isIncomplete: Boolean = isIncomplete, items: Vector[sbt.internal.langserver.CompletionItem] = items): CompletionList = { - new CompletionList(isIncomplete, items) - } - def withIsIncomplete(isIncomplete: Boolean): CompletionList = { - copy(isIncomplete = isIncomplete) - } - def withItems(items: Vector[sbt.internal.langserver.CompletionItem]): CompletionList = { - copy(items = items) - } -} -object CompletionList { - - def apply(isIncomplete: Boolean, items: Vector[sbt.internal.langserver.CompletionItem]): CompletionList = new CompletionList(isIncomplete, items) -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionParams.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionParams.scala deleted file mode 100644 index 14bdab16e..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/CompletionParams.scala +++ /dev/null @@ -1,50 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver -/** - * Completion request interfaces - * @param textDocument The text document. - * @param position The position inside the text document. - * @param context completion context - */ -final class CompletionParams private ( - textDocument: sbt.internal.langserver.TextDocumentIdentifier, - position: sbt.internal.langserver.Position, - val context: Option[sbt.internal.langserver.CompletionContext]) extends sbt.internal.langserver.TextDocumentPositionParamsInterface(textDocument, position) with Serializable { - - - - override def equals(o: Any): Boolean = o match { - case x: CompletionParams => (this.textDocument == x.textDocument) && (this.position == x.position) && (this.context == x.context) - case _ => false - } - override def hashCode: Int = { - 37 * (37 * (37 * (37 * (17 + "sbt.internal.langserver.CompletionParams".##) + textDocument.##) + position.##) + context.##) - } - override def toString: String = { - "CompletionParams(" + textDocument + ", " + position + ", " + context + ")" - } - private[this] def copy(textDocument: sbt.internal.langserver.TextDocumentIdentifier = textDocument, position: sbt.internal.langserver.Position = position, context: Option[sbt.internal.langserver.CompletionContext] = context): CompletionParams = { - new CompletionParams(textDocument, position, context) - } - def withTextDocument(textDocument: sbt.internal.langserver.TextDocumentIdentifier): CompletionParams = { - copy(textDocument = textDocument) - } - def withPosition(position: sbt.internal.langserver.Position): CompletionParams = { - copy(position = position) - } - def withContext(context: Option[sbt.internal.langserver.CompletionContext]): CompletionParams = { - copy(context = context) - } - def withContext(context: sbt.internal.langserver.CompletionContext): CompletionParams = { - copy(context = Option(context)) - } -} -object CompletionParams { - - def apply(textDocument: sbt.internal.langserver.TextDocumentIdentifier, position: sbt.internal.langserver.Position, context: Option[sbt.internal.langserver.CompletionContext]): CompletionParams = new CompletionParams(textDocument, position, context) - def apply(textDocument: sbt.internal.langserver.TextDocumentIdentifier, position: sbt.internal.langserver.Position, context: sbt.internal.langserver.CompletionContext): CompletionParams = new CompletionParams(textDocument, position, Option(context)) -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/Diagnostic.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/Diagnostic.scala index e7bf55e15..927d2e7e1 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/Diagnostic.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/Diagnostic.scala @@ -24,10 +24,10 @@ final class Diagnostic private ( - override def equals(o: Any): Boolean = o match { + 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 _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.langserver.Diagnostic".##) + range.##) + severity.##) + code.##) + source.##) + message.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeParams.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeParams.scala index 711b7edd1..eadda5d4b 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeParams.scala @@ -15,10 +15,10 @@ final class InitializeParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: InitializeParams => (this.processId == x.processId) && (this.rootPath == x.rootPath) && (this.rootUri == x.rootUri) && (this.initializationOptions == x.initializationOptions) && (this.capabilities == x.capabilities) && (this.trace == x.trace) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.langserver.InitializeParams".##) + processId.##) + rootPath.##) + rootUri.##) + initializationOptions.##) + capabilities.##) + trace.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeResult.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeResult.scala index f35588bee..38785b20c 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeResult.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/InitializeResult.scala @@ -10,10 +10,10 @@ final class InitializeResult private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: InitializeResult => (this.capabilities == x.capabilities) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.langserver.InitializeResult".##) + capabilities.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/Location.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/Location.scala index ebc9dce4a..2e2300905 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/Location.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/Location.scala @@ -11,10 +11,10 @@ final class Location private ( - override def equals(o: Any): Boolean = o match { + 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.langserver.Location".##) + uri.##) + range.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/LogMessageParams.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/LogMessageParams.scala index 416022c43..ee9b1684a 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/LogMessageParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/LogMessageParams.scala @@ -14,10 +14,10 @@ final class LogMessageParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: LogMessageParams => (this.`type` == x.`type`) && (this.message == x.message) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.langserver.LogMessageParams".##) + `type`.##) + message.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/Position.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/Position.scala index d00018007..05de12ba4 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/Position.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/Position.scala @@ -16,10 +16,10 @@ final class Position private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: Position => (this.line == x.line) && (this.character == x.character) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.langserver.Position".##) + line.##) + character.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/PublishDiagnosticsParams.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/PublishDiagnosticsParams.scala index 4d5b952a0..36c01f93b 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/PublishDiagnosticsParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/PublishDiagnosticsParams.scala @@ -15,10 +15,10 @@ final class PublishDiagnosticsParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: PublishDiagnosticsParams => (this.uri == x.uri) && (this.diagnostics == x.diagnostics) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.langserver.PublishDiagnosticsParams".##) + uri.##) + diagnostics.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/Range.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/Range.scala index 6310920ae..ea9f01f46 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/Range.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/Range.scala @@ -16,10 +16,10 @@ final class Range private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: Range => (this.start == x.start) && (this.end == x.end) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.langserver.Range".##) + start.##) + end.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/SaveOptions.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/SaveOptions.scala index ec6d3f3d7..32847730d 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/SaveOptions.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/SaveOptions.scala @@ -10,10 +10,10 @@ final class SaveOptions private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SaveOptions => (this.includeText == x.includeText) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.langserver.SaveOptions".##) + includeText.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/SbtExecParams.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/SbtExecParams.scala index f539b3faa..46f4c8cae 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/SbtExecParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/SbtExecParams.scala @@ -10,10 +10,10 @@ final class SbtExecParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SbtExecParams => (this.commandLine == x.commandLine) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.langserver.SbtExecParams".##) + commandLine.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/ServerCapabilities.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/ServerCapabilities.scala index 81367a411..d45fb6c8d 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/ServerCapabilities.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/ServerCapabilities.scala @@ -15,10 +15,10 @@ final class ServerCapabilities private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ServerCapabilities => (this.textDocumentSync == x.textDocumentSync) && (this.hoverProvider == x.hoverProvider) && (this.definitionProvider == x.definitionProvider) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.langserver.ServerCapabilities".##) + textDocumentSync.##) + hoverProvider.##) + definitionProvider.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentIdentifier.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentIdentifier.scala index 1733f68f2..3a9a1d01c 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentIdentifier.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentIdentifier.scala @@ -13,10 +13,10 @@ final class TextDocumentIdentifier private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TextDocumentIdentifier => (this.uri == x.uri) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.langserver.TextDocumentIdentifier".##) + uri.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParams.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParams.scala index 863196644..7ce1c05e3 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParams.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParams.scala @@ -14,10 +14,10 @@ final class TextDocumentPositionParams private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TextDocumentPositionParams => (this.textDocument == x.textDocument) && (this.position == x.position) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.langserver.TextDocumentPositionParams".##) + textDocument.##) + position.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParamsInterface.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParamsInterface.scala index af0b588b7..ad4fc5bd8 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParamsInterface.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentPositionParamsInterface.scala @@ -12,10 +12,10 @@ abstract class TextDocumentPositionParamsInterface( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TextDocumentPositionParamsInterface => (this.textDocument == x.textDocument) && (this.position == x.position) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.langserver.TextDocumentPositionParamsInterface".##) + textDocument.##) + position.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentSyncOptions.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentSyncOptions.scala index 049020462..43d9ef68c 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentSyncOptions.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextDocumentSyncOptions.scala @@ -13,10 +13,10 @@ final class TextDocumentSyncOptions private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TextDocumentSyncOptions => (this.openClose == x.openClose) && (this.change == x.change) && (this.willSave == x.willSave) && (this.willSaveWaitUntil == x.willSaveWaitUntil) && (this.save == x.save) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.langserver.TextDocumentSyncOptions".##) + openClose.##) + change.##) + willSave.##) + willSaveWaitUntil.##) + save.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextEdit.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/TextEdit.scala deleted file mode 100644 index 1eaec9be1..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/TextEdit.scala +++ /dev/null @@ -1,36 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver -final class TextEdit private ( - val range: sbt.internal.langserver.Range, - val newText: String) extends Serializable { - - - - override def equals(o: Any): Boolean = o match { - case x: TextEdit => (this.range == x.range) && (this.newText == x.newText) - case _ => false - } - override def hashCode: Int = { - 37 * (37 * (37 * (17 + "sbt.internal.langserver.TextEdit".##) + range.##) + newText.##) - } - override def toString: String = { - "TextEdit(" + range + ", " + newText + ")" - } - private[this] def copy(range: sbt.internal.langserver.Range = range, newText: String = newText): TextEdit = { - new TextEdit(range, newText) - } - def withRange(range: sbt.internal.langserver.Range): TextEdit = { - copy(range = range) - } - def withNewText(newText: String): TextEdit = { - copy(newText = newText) - } -} -object TextEdit { - - def apply(range: sbt.internal.langserver.Range, newText: String): TextEdit = new TextEdit(range, newText) -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CommandFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CommandFormats.scala deleted file mode 100644 index 581f56a11..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CommandFormats.scala +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver.codec -import _root_.sjsonnew.{ deserializationError, serializationError, Builder, JsonFormat, Unbuilder } -trait CommandFormats { - implicit lazy val CommandFormat: JsonFormat[sbt.internal.langserver.Command] = new JsonFormat[sbt.internal.langserver.Command] { - override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.langserver.Command = { - deserializationError("No known implementation of Command.") - } - override def write[J](obj: sbt.internal.langserver.Command, builder: Builder[J]): Unit = { - serializationError("No known implementation of Command.") - } - } -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionContextFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionContextFormats.scala deleted file mode 100644 index ccb5556c1..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionContextFormats.scala +++ /dev/null @@ -1,29 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver.codec -import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } -trait CompletionContextFormats { self: sjsonnew.BasicJsonProtocol => -implicit lazy val CompletionContextFormat: JsonFormat[sbt.internal.langserver.CompletionContext] = new JsonFormat[sbt.internal.langserver.CompletionContext] { - override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.langserver.CompletionContext = { - jsOpt match { - case Some(js) => - unbuilder.beginObject(js) - val triggerKind = unbuilder.readField[Int]("triggerKind") - val triggerCharacter = unbuilder.readField[Option[String]]("triggerCharacter") - unbuilder.endObject() - sbt.internal.langserver.CompletionContext(triggerKind, triggerCharacter) - case None => - deserializationError("Expected JsObject but found None") - } - } - override def write[J](obj: sbt.internal.langserver.CompletionContext, builder: Builder[J]): Unit = { - builder.beginObject() - builder.addField("triggerKind", obj.triggerKind) - builder.addField("triggerCharacter", obj.triggerCharacter) - builder.endObject() - } -} -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionItemFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionItemFormats.scala deleted file mode 100644 index dfd6d09be..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionItemFormats.scala +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver.codec -import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } -trait CompletionItemFormats { self: sjsonnew.BasicJsonProtocol => -implicit lazy val CompletionItemFormat: JsonFormat[sbt.internal.langserver.CompletionItem] = new JsonFormat[sbt.internal.langserver.CompletionItem] { - override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.langserver.CompletionItem = { - jsOpt match { - case Some(js) => - unbuilder.beginObject(js) - val label = unbuilder.readField[String]("label") - unbuilder.endObject() - sbt.internal.langserver.CompletionItem(label) - case None => - deserializationError("Expected JsObject but found None") - } - } - override def write[J](obj: sbt.internal.langserver.CompletionItem, builder: Builder[J]): Unit = { - builder.beginObject() - builder.addField("label", obj.label) - builder.endObject() - } -} -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionListFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionListFormats.scala deleted file mode 100644 index 3af676d52..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionListFormats.scala +++ /dev/null @@ -1,29 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver.codec -import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } -trait CompletionListFormats { self: sbt.internal.langserver.codec.CompletionItemFormats with sjsonnew.BasicJsonProtocol => -implicit lazy val CompletionListFormat: JsonFormat[sbt.internal.langserver.CompletionList] = new JsonFormat[sbt.internal.langserver.CompletionList] { - override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.langserver.CompletionList = { - jsOpt match { - case Some(js) => - unbuilder.beginObject(js) - val isIncomplete = unbuilder.readField[Boolean]("isIncomplete") - val items = unbuilder.readField[Vector[sbt.internal.langserver.CompletionItem]]("items") - unbuilder.endObject() - sbt.internal.langserver.CompletionList(isIncomplete, items) - case None => - deserializationError("Expected JsObject but found None") - } - } - override def write[J](obj: sbt.internal.langserver.CompletionList, builder: Builder[J]): Unit = { - builder.beginObject() - builder.addField("isIncomplete", obj.isIncomplete) - builder.addField("items", obj.items) - builder.endObject() - } -} -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionParamsFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionParamsFormats.scala deleted file mode 100644 index 84cb427d9..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/CompletionParamsFormats.scala +++ /dev/null @@ -1,31 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver.codec -import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } -trait CompletionParamsFormats { self: sbt.internal.langserver.codec.TextDocumentIdentifierFormats with sbt.internal.langserver.codec.PositionFormats with sbt.internal.langserver.codec.CompletionContextFormats with sjsonnew.BasicJsonProtocol => -implicit lazy val CompletionParamsFormat: JsonFormat[sbt.internal.langserver.CompletionParams] = new JsonFormat[sbt.internal.langserver.CompletionParams] { - override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.langserver.CompletionParams = { - jsOpt match { - case Some(js) => - unbuilder.beginObject(js) - val textDocument = unbuilder.readField[sbt.internal.langserver.TextDocumentIdentifier]("textDocument") - val position = unbuilder.readField[sbt.internal.langserver.Position]("position") - val context = unbuilder.readField[Option[sbt.internal.langserver.CompletionContext]]("context") - unbuilder.endObject() - sbt.internal.langserver.CompletionParams(textDocument, position, context) - case None => - deserializationError("Expected JsObject but found None") - } - } - override def write[J](obj: sbt.internal.langserver.CompletionParams, builder: Builder[J]): Unit = { - builder.beginObject() - builder.addField("textDocument", obj.textDocument) - builder.addField("position", obj.position) - builder.addField("context", obj.context) - builder.endObject() - } -} -} diff --git a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/TextEditFormats.scala b/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/TextEditFormats.scala deleted file mode 100644 index bbdd972ea..000000000 --- a/protocol/src/main/contraband-scala/sbt/internal/langserver/codec/TextEditFormats.scala +++ /dev/null @@ -1,29 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.internal.langserver.codec -import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } -trait TextEditFormats { self: sbt.internal.langserver.codec.RangeFormats with sjsonnew.BasicJsonProtocol => -implicit lazy val TextEditFormat: JsonFormat[sbt.internal.langserver.TextEdit] = new JsonFormat[sbt.internal.langserver.TextEdit] { - override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.internal.langserver.TextEdit = { - jsOpt match { - case Some(js) => - unbuilder.beginObject(js) - val range = unbuilder.readField[sbt.internal.langserver.Range]("range") - val newText = unbuilder.readField[String]("newText") - unbuilder.endObject() - sbt.internal.langserver.TextEdit(range, newText) - case None => - deserializationError("Expected JsObject but found None") - } - } - override def write[J](obj: sbt.internal.langserver.TextEdit, 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/protocol/InitializeOption.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/InitializeOption.scala index 0503d1412..b900d641d 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/InitializeOption.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/InitializeOption.scala @@ -10,10 +10,10 @@ final class InitializeOption private ( private def this(token: Option[String]) = this(token, None) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: InitializeOption => (this.token == x.token) && (this.skipAnalysis == x.skipAnalysis) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.protocol.InitializeOption".##) + token.##) + skipAnalysis.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcMessage.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcMessage.scala index e920cc18c..9ecee0954 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcMessage.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcMessage.scala @@ -11,10 +11,10 @@ abstract class JsonRpcMessage( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: JsonRpcMessage => (this.jsonrpc == x.jsonrpc) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.internal.protocol.JsonRpcMessage".##) + jsonrpc.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcNotificationMessage.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcNotificationMessage.scala index ed0891769..0049c9f52 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcNotificationMessage.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcNotificationMessage.scala @@ -15,10 +15,10 @@ final class JsonRpcNotificationMessage private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: JsonRpcNotificationMessage => (this.jsonrpc == x.jsonrpc) && (this.method == x.method) && (this.params == x.params) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.protocol.JsonRpcNotificationMessage".##) + jsonrpc.##) + method.##) + params.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcRequestMessage.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcRequestMessage.scala index 9fe002d22..65e88637f 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcRequestMessage.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcRequestMessage.scala @@ -17,10 +17,10 @@ final class JsonRpcRequestMessage private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: JsonRpcRequestMessage => (this.jsonrpc == x.jsonrpc) && (this.id == x.id) && (this.method == x.method) && (this.params == x.params) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.protocol.JsonRpcRequestMessage".##) + jsonrpc.##) + id.##) + method.##) + params.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseError.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseError.scala index d6d6a86b3..1bbffe652 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseError.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseError.scala @@ -17,10 +17,10 @@ final class JsonRpcResponseError private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: JsonRpcResponseError => (this.code == x.code) && (this.message == x.message) && (this.data == x.data) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.protocol.JsonRpcResponseError".##) + code.##) + message.##) + data.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseMessage.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseMessage.scala index 4cab85ffb..cedaf048f 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseMessage.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/JsonRpcResponseMessage.scala @@ -18,10 +18,10 @@ final class JsonRpcResponseMessage private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: JsonRpcResponseMessage => (this.jsonrpc == x.jsonrpc) && (this.id == x.id) && (this.result == x.result) && (this.error == x.error) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (17 + "sbt.internal.protocol.JsonRpcResponseMessage".##) + jsonrpc.##) + id.##) + result.##) + error.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/protocol/PortFile.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/PortFile.scala index 39edb9782..318f2a2d5 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/PortFile.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/PortFile.scala @@ -16,10 +16,10 @@ final class PortFile private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: PortFile => (this.uri == x.uri) && (this.tokenfilePath == x.tokenfilePath) && (this.tokenfileUri == x.tokenfileUri) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.internal.protocol.PortFile".##) + uri.##) + tokenfilePath.##) + tokenfileUri.##) } diff --git a/protocol/src/main/contraband-scala/sbt/internal/protocol/TokenFile.scala b/protocol/src/main/contraband-scala/sbt/internal/protocol/TokenFile.scala index 3bf9fc543..1f5c3ae63 100644 --- a/protocol/src/main/contraband-scala/sbt/internal/protocol/TokenFile.scala +++ b/protocol/src/main/contraband-scala/sbt/internal/protocol/TokenFile.scala @@ -10,10 +10,10 @@ final class TokenFile private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TokenFile => (this.uri == x.uri) && (this.token == x.token) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.internal.protocol.TokenFile".##) + uri.##) + token.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/Attach.scala b/protocol/src/main/contraband-scala/sbt/protocol/Attach.scala index e06846ae8..6ef22b160 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/Attach.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/Attach.scala @@ -9,10 +9,10 @@ final class Attach private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: Attach => (this.interactive == x.interactive) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.Attach".##) + interactive.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/ChannelAcceptedEvent.scala b/protocol/src/main/contraband-scala/sbt/protocol/ChannelAcceptedEvent.scala index 524dde7b8..14fa116d9 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/ChannelAcceptedEvent.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/ChannelAcceptedEvent.scala @@ -9,10 +9,10 @@ final class ChannelAcceptedEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ChannelAcceptedEvent => (this.channelName == x.channelName) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.ChannelAcceptedEvent".##) + channelName.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/CommandMessage.scala b/protocol/src/main/contraband-scala/sbt/protocol/CommandMessage.scala index 06fc356eb..cdf3100c2 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/CommandMessage.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/CommandMessage.scala @@ -10,10 +10,10 @@ abstract class CommandMessage() extends Serializable { -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: CommandMessage => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.CommandMessage".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/CompletionParams.scala b/protocol/src/main/contraband-scala/sbt/protocol/CompletionParams.scala index b6523f5c0..e9db18230 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/CompletionParams.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/CompletionParams.scala @@ -10,10 +10,10 @@ final class CompletionParams private ( private def this(query: String) = this(query, None) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CompletionParams => (this.query == x.query) && (this.level == x.level) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.CompletionParams".##) + query.##) + level.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/CompletionResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/CompletionResponse.scala index e8f5cd1d9..4692627de 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/CompletionResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/CompletionResponse.scala @@ -11,10 +11,10 @@ final class CompletionResponse private ( private def this(items: Vector[String]) = this(items, None, None) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: CompletionResponse => (this.items == x.items) && (this.cachedMainClassNames == x.cachedMainClassNames) && (this.cachedTestNames == x.cachedTestNames) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.protocol.CompletionResponse".##) + items.##) + cachedMainClassNames.##) + cachedTestNames.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/EventMessage.scala b/protocol/src/main/contraband-scala/sbt/protocol/EventMessage.scala index 6fd4aa4b6..09c52f2ef 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/EventMessage.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/EventMessage.scala @@ -10,10 +10,10 @@ abstract class EventMessage() extends Serializable { -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: EventMessage => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.EventMessage".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/ExecCommand.scala b/protocol/src/main/contraband-scala/sbt/protocol/ExecCommand.scala index 10c1a3d47..e048099a7 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/ExecCommand.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/ExecCommand.scala @@ -11,10 +11,10 @@ final class ExecCommand private ( private def this(commandLine: String) = this(commandLine, None) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ExecCommand => (this.commandLine == x.commandLine) && (this.execId == x.execId) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.ExecCommand".##) + commandLine.##) + execId.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/ExecStatusEvent.scala b/protocol/src/main/contraband-scala/sbt/protocol/ExecStatusEvent.scala index 72d11e5ce..ad51b00b4 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/ExecStatusEvent.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/ExecStatusEvent.scala @@ -16,10 +16,10 @@ final class ExecStatusEvent private ( private def this(status: String, channelName: Option[String], execId: Option[String], commandQueue: Vector[String]) = this(status, channelName, execId, commandQueue, None, None) private def this(status: String, channelName: Option[String], execId: Option[String], commandQueue: Vector[String], exitCode: Option[Long]) = this(status, channelName, execId, commandQueue, exitCode, None) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ExecStatusEvent => (this.status == x.status) && (this.channelName == x.channelName) && (this.execId == x.execId) && (this.commandQueue == x.commandQueue) && (this.exitCode == x.exitCode) && (this.message == x.message) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.protocol.ExecStatusEvent".##) + status.##) + channelName.##) + execId.##) + commandQueue.##) + exitCode.##) + message.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/ExecutionEvent.scala b/protocol/src/main/contraband-scala/sbt/protocol/ExecutionEvent.scala index fccfdf261..1574b19f9 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/ExecutionEvent.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/ExecutionEvent.scala @@ -11,10 +11,10 @@ final class ExecutionEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ExecutionEvent => (this.success == x.success) && (this.commandLine == x.commandLine) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.ExecutionEvent".##) + success.##) + commandLine.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/InitCommand.scala b/protocol/src/main/contraband-scala/sbt/protocol/InitCommand.scala index 82a9e15c8..ddfe85f45 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/InitCommand.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/InitCommand.scala @@ -11,10 +11,10 @@ final class InitCommand private ( private def this(token: Option[String], execId: Option[String]) = this(token, execId, None) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: InitCommand => (this.token == x.token) && (this.execId == x.execId) && (this.skipAnalysis == x.skipAnalysis) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.protocol.InitCommand".##) + token.##) + execId.##) + skipAnalysis.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/LogEvent.scala b/protocol/src/main/contraband-scala/sbt/protocol/LogEvent.scala index ebf325e3f..40ce5afc1 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/LogEvent.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/LogEvent.scala @@ -11,10 +11,10 @@ final class LogEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: LogEvent => (this.level == x.level) && (this.message == x.message) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.LogEvent".##) + level.##) + message.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/SettingQuery.scala b/protocol/src/main/contraband-scala/sbt/protocol/SettingQuery.scala index e057280b3..306fbc5cc 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/SettingQuery.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/SettingQuery.scala @@ -9,10 +9,10 @@ final class SettingQuery private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SettingQuery => (this.setting == x.setting) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.SettingQuery".##) + setting.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryFailure.scala b/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryFailure.scala index 5d7efff69..3cea10f5c 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryFailure.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryFailure.scala @@ -9,10 +9,10 @@ final class SettingQueryFailure private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SettingQueryFailure => (this.message == x.message) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.SettingQueryFailure".##) + message.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryResponse.scala index c7cb3451b..e57883b92 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/SettingQueryResponse.scala @@ -9,10 +9,10 @@ abstract class SettingQueryResponse() extends sbt.protocol.EventMessage() with S -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: SettingQueryResponse => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.SettingQueryResponse".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/SettingQuerySuccess.scala b/protocol/src/main/contraband-scala/sbt/protocol/SettingQuerySuccess.scala index 85e51b328..bde80f5f5 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/SettingQuerySuccess.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/SettingQuerySuccess.scala @@ -10,10 +10,10 @@ final class SettingQuerySuccess private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: SettingQuerySuccess => (this.value == x.value) && (this.contentType == x.contentType) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.SettingQuerySuccess".##) + value.##) + contentType.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesQuery.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesQuery.scala index cfff9b3e1..652705219 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesQuery.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesQuery.scala @@ -8,10 +8,10 @@ final class TerminalAttributesQuery private () extends sbt.protocol.CommandMessa -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TerminalAttributesQuery => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.TerminalAttributesQuery".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesResponse.scala index 61fd49968..c6032e10f 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalAttributesResponse.scala @@ -13,10 +13,10 @@ final class TerminalAttributesResponse private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalAttributesResponse => (this.iflag == x.iflag) && (this.oflag == x.oflag) && (this.cflag == x.cflag) && (this.lflag == x.lflag) && (this.cchars == x.cchars) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.protocol.TerminalAttributesResponse".##) + iflag.##) + oflag.##) + cflag.##) + lflag.##) + cchars.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesQuery.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesQuery.scala index 2e270924c..5f70ed5e7 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesQuery.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesQuery.scala @@ -11,10 +11,10 @@ final class TerminalCapabilitiesQuery private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalCapabilitiesQuery => (this.boolean == x.boolean) && (this.numeric == x.numeric) && (this.string == x.string) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.protocol.TerminalCapabilitiesQuery".##) + boolean.##) + numeric.##) + string.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesResponse.scala index 14eda0982..e9af177ce 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalCapabilitiesResponse.scala @@ -11,10 +11,10 @@ final class TerminalCapabilitiesResponse private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalCapabilitiesResponse => (this.boolean == x.boolean) && (this.numeric == x.numeric) && (this.string == x.string) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.protocol.TerminalCapabilitiesResponse".##) + boolean.##) + numeric.##) + string.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeQuery.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeQuery.scala index 70fa74148..f37c708c7 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeQuery.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeQuery.scala @@ -8,10 +8,10 @@ final class TerminalGetSizeQuery private () extends sbt.protocol.CommandMessage( -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TerminalGetSizeQuery => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.TerminalGetSizeQuery".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeResponse.scala index d3ebcffe9..9aedd98ff 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalGetSizeResponse.scala @@ -10,10 +10,10 @@ final class TerminalGetSizeResponse private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalGetSizeResponse => (this.width == x.width) && (this.height == x.height) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.TerminalGetSizeResponse".##) + width.##) + height.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalPropertiesResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalPropertiesResponse.scala index c0552ab8c..2ff7799f7 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalPropertiesResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalPropertiesResponse.scala @@ -14,10 +14,10 @@ final class TerminalPropertiesResponse private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalPropertiesResponse => (this.width == x.width) && (this.height == x.height) && (this.isAnsiSupported == x.isAnsiSupported) && (this.isColorEnabled == x.isColorEnabled) && (this.isSupershellEnabled == x.isSupershellEnabled) && (this.isEchoEnabled == x.isEchoEnabled) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.protocol.TerminalPropertiesResponse".##) + width.##) + height.##) + isAnsiSupported.##) + isColorEnabled.##) + isSupershellEnabled.##) + isEchoEnabled.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesCommand.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesCommand.scala index f22e10c0a..dcbe4cdd4 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesCommand.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesCommand.scala @@ -13,10 +13,10 @@ final class TerminalSetAttributesCommand private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalSetAttributesCommand => (this.iflag == x.iflag) && (this.oflag == x.oflag) && (this.cflag == x.cflag) && (this.lflag == x.lflag) && (this.cchars == x.cchars) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.protocol.TerminalSetAttributesCommand".##) + iflag.##) + oflag.##) + cflag.##) + lflag.##) + cchars.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesResponse.scala index bfa6ee41d..bf22b6e10 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetAttributesResponse.scala @@ -8,10 +8,10 @@ final class TerminalSetAttributesResponse private () extends sbt.protocol.EventM -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TerminalSetAttributesResponse => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.TerminalSetAttributesResponse".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoCommand.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoCommand.scala index c958c69ba..aea0387d8 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoCommand.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoCommand.scala @@ -9,10 +9,10 @@ final class TerminalSetEchoCommand private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalSetEchoCommand => (this.toggle == x.toggle) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.TerminalSetEchoCommand".##) + toggle.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoResponse.scala index e5577d539..979b1205e 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetEchoResponse.scala @@ -8,10 +8,10 @@ final class TerminalSetEchoResponse private () extends sbt.protocol.EventMessage -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TerminalSetEchoResponse => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.TerminalSetEchoResponse".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeCommand.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeCommand.scala index fb607ff00..299124161 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeCommand.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeCommand.scala @@ -9,10 +9,10 @@ final class TerminalSetRawModeCommand private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalSetRawModeCommand => (this.toggle == x.toggle) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.TerminalSetRawModeCommand".##) + toggle.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeReponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeReponse.scala deleted file mode 100644 index 45ed3ceb6..000000000 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeReponse.scala +++ /dev/null @@ -1,29 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.protocol -final class TerminalSetRawModeReponse private () extends sbt.protocol.EventMessage() with Serializable { - - - -override def equals(o: Any): Boolean = o match { - case _: TerminalSetRawModeReponse => true - case _ => false -} -override def hashCode: Int = { - 37 * (17 + "sbt.protocol.TerminalSetRawModeReponse".##) -} -override def toString: String = { - "TerminalSetRawModeReponse()" -} -private[this] def copy(): TerminalSetRawModeReponse = { - new TerminalSetRawModeReponse() -} - -} -object TerminalSetRawModeReponse { - - def apply(): TerminalSetRawModeReponse = new TerminalSetRawModeReponse() -} diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeResponse.scala index 8618a7db5..9cc4e7f79 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetRawModeResponse.scala @@ -8,10 +8,10 @@ final class TerminalSetRawModeResponse private () extends sbt.protocol.EventMess -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TerminalSetRawModeResponse => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.TerminalSetRawModeResponse".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeCommand.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeCommand.scala index 11104fc94..f51f5ae16 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeCommand.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeCommand.scala @@ -10,10 +10,10 @@ final class TerminalSetSizeCommand private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TerminalSetSizeCommand => (this.width == x.width) && (this.height == x.height) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.TerminalSetSizeCommand".##) + width.##) + height.##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeResponse.scala b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeResponse.scala index 118e2b121..5465dc037 100644 --- a/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeResponse.scala +++ b/protocol/src/main/contraband-scala/sbt/protocol/TerminalSetSizeResponse.scala @@ -8,10 +8,10 @@ final class TerminalSetSizeResponse private () extends sbt.protocol.EventMessage -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TerminalSetSizeResponse => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.TerminalSetSizeResponse".##) } diff --git a/protocol/src/main/contraband-scala/sbt/protocol/codec/TerminalSetRawModeReponseFormats.scala b/protocol/src/main/contraband-scala/sbt/protocol/codec/TerminalSetRawModeReponseFormats.scala deleted file mode 100644 index 96bdfe122..000000000 --- a/protocol/src/main/contraband-scala/sbt/protocol/codec/TerminalSetRawModeReponseFormats.scala +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This code is generated using [[https://www.scala-sbt.org/contraband/ sbt-contraband]]. - */ - -// DO NOT EDIT MANUALLY -package sbt.protocol.codec -import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError } -trait TerminalSetRawModeReponseFormats { self: sjsonnew.BasicJsonProtocol => -implicit lazy val TerminalSetRawModeReponseFormat: JsonFormat[sbt.protocol.TerminalSetRawModeReponse] = new JsonFormat[sbt.protocol.TerminalSetRawModeReponse] { - override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.protocol.TerminalSetRawModeReponse = { - __jsOpt match { - case Some(__js) => - unbuilder.beginObject(__js) - - unbuilder.endObject() - sbt.protocol.TerminalSetRawModeReponse() - case None => - deserializationError("Expected JsObject but found None") - } - } - override def write[J](obj: sbt.protocol.TerminalSetRawModeReponse, builder: Builder[J]): Unit = { - builder.beginObject() - - builder.endObject() - } -} -} diff --git a/protocol/src/main/contraband/bsp.contra b/protocol/src/main/contraband/bsp.contra index 1d18e7f61..c1929cd93 100644 --- a/protocol/src/main/contraband/bsp.contra +++ b/protocol/src/main/contraband/bsp.contra @@ -63,6 +63,22 @@ type BuildTargetCapabilities { canRun: Boolean! } +type DebugSessionAddress { + ## The target's Uri + uri: java.net.URI! +} + +type DebugSessionParams { + ## A sequence of build targets affected by the debugging action. + targets: [sbt.internal.bsp.BuildTargetIdentifier] + + ## The kind of data to expect in the `data` field. + dataKind: String + + ## A language-agnostic JSON object interpreted by the server. + data: sjsonnew.shaded.scalajson.ast.unsafe.JValue +} + type TaskId { ## A unique identifier id: String! diff --git a/run/src/main/contraband-scala/sbt/ForkOptions.scala b/run/src/main/contraband-scala/sbt/ForkOptions.scala index 15abc84a1..6f083bc93 100644 --- a/run/src/main/contraband-scala/sbt/ForkOptions.scala +++ b/run/src/main/contraband-scala/sbt/ForkOptions.scala @@ -29,10 +29,10 @@ final class ForkOptions private ( private def this() = this(None, None, Vector(), None, Vector(), false, Map()) - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: ForkOptions => (this.javaHome == x.javaHome) && (this.outputStrategy == x.outputStrategy) && (this.bootJars == x.bootJars) && (this.workingDirectory == x.workingDirectory) && (this.runJVMOptions == x.runJVMOptions) && (this.connectInput == x.connectInput) && (this.envVars == x.envVars) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "sbt.ForkOptions".##) + javaHome.##) + outputStrategy.##) + bootJars.##) + workingDirectory.##) + runJVMOptions.##) + connectInput.##) + envVars.##) } diff --git a/sbt/src/sbt-test/actions/scala3-doc/build.sbt b/sbt/src/sbt-test/actions/scala3-doc/build.sbt new file mode 100644 index 000000000..9718f87b7 --- /dev/null +++ b/sbt/src/sbt-test/actions/scala3-doc/build.sbt @@ -0,0 +1,5 @@ +lazy val root = (project in file(".")) + .settings( + scalaVersion := "3.0.0-M3", + resolvers += Resolver.JCenterRepository + ) diff --git a/sbt/src/sbt-test/actions/scala3-doc/src/main/scala/foo/A.scala b/sbt/src/sbt-test/actions/scala3-doc/src/main/scala/foo/A.scala new file mode 100644 index 000000000..c4496c701 --- /dev/null +++ b/sbt/src/sbt-test/actions/scala3-doc/src/main/scala/foo/A.scala @@ -0,0 +1,10 @@ +package foo + +final val foo="Foo" + +object A: + /** + * @param i An argument + */ + def x(i:Int)=3 + diff --git a/sbt/src/sbt-test/actions/scala3-doc/test b/sbt/src/sbt-test/actions/scala3-doc/test new file mode 100644 index 000000000..a6edd4dc0 --- /dev/null +++ b/sbt/src/sbt-test/actions/scala3-doc/test @@ -0,0 +1,4 @@ +> doc +$ exists target/scala-3.0.0-M3/api/index.html +$ exists target/scala-3.0.0-M3/api/api/foo/A$.html +$ exists target/scala-3.0.0-M3/api/api/foo.html \ No newline at end of file diff --git a/sbt/src/sbt-test/compiler-project/scala3-tasty-management/build.sbt b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/build.sbt new file mode 100644 index 000000000..208b8c684 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/build.sbt @@ -0,0 +1,3 @@ +ThisBuild / scalaVersion := "3.0.0-M2" + +lazy val root = project.in(file(".")) diff --git a/sbt/src/sbt-test/compiler-project/scala3-tasty-management/src/main/scala/A.scala b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/src/main/scala/A.scala new file mode 100644 index 000000000..c52c45808 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/src/main/scala/A.scala @@ -0,0 +1,3 @@ +class A { + def initialized: Boolean = false +} diff --git a/sbt/src/sbt-test/compiler-project/scala3-tasty-management/src/main/scala/B.scala b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/src/main/scala/B.scala new file mode 100644 index 000000000..066d5fc59 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/src/main/scala/B.scala @@ -0,0 +1,3 @@ +class B { + def foo(a: A): Boolean = a.initialized +} diff --git a/sbt/src/sbt-test/compiler-project/scala3-tasty-management/test b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/test new file mode 100644 index 000000000..3efda69bb --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/scala3-tasty-management/test @@ -0,0 +1,11 @@ +> compile + +$ exists target/scala-3.0.0-M2/classes/A.tasty +$ exists target/scala-3.0.0-M2/classes/B.tasty + +$ delete src/main/scala/B.scala + +> compile + +$ exists target/scala-3.0.0-M2/classes/A.tasty +-$ exists target/scala-3.0.0-M2/classes/B.tasty diff --git a/sbt/src/sbt-test/dependency-management/artifact/build.sbt b/sbt/src/sbt-test/dependency-management/artifact/build.sbt index bc8d53abd..d0d5afc46 100644 --- a/sbt/src/sbt-test/dependency-management/artifact/build.sbt +++ b/sbt/src/sbt-test/dependency-management/artifact/build.sbt @@ -1,4 +1,5 @@ import sbt.internal.inc.classpath.ClasspathUtilities +import xsbti.AppConfiguration lazy val checkFull = taskKey[Unit]("") lazy val check = taskKey[Unit]("") @@ -19,7 +20,8 @@ lazy val root = (project in file(".")) .settings( ivyPaths := IvyPaths(baseDirectory.value, Some(target.value / "ivy-cache")), publishTo := Some(Resolver.file("Test Publish Repo", file("test-repo"))), - resolvers += (baseDirectory { base => "Test Repo" at (base / "test-repo").toURI.toString }).value, + scalaCompilerBridgeResolvers += userLocalFileResolver(appConfiguration.value), + resolvers += baseDirectory { base => "Test Repo" at (base / "test-repo").toURI.toString }.value, moduleName := artifactID, projectID := (if (baseDirectory.value / "retrieve" exists) retrieveID else publishedID), artifact in (Compile, packageBin) := mainArtifact, @@ -67,3 +69,9 @@ def checkTask(classpath: TaskKey[Classpath]) = Def.task { try { Class.forName("test.Test", false, loader); () } catch { case _: ClassNotFoundException | _: NoClassDefFoundError => sys.error(s"Dependency not retrieved properly: $deps, $cp") } } + +// use the user local resolver to fetch the SNAPSHOT version of the compiler-bridge +def userLocalFileResolver(appConfig: AppConfiguration): Resolver = { + val ivyHome = appConfig.provider.scalaProvider.launcher.ivyHome + Resolver.file("User Local", ivyHome / "local")(Resolver.defaultIvyPatterns) +} diff --git a/sbt/src/sbt-test/dependency-management/cache-classifiers/multi.sbt b/sbt/src/sbt-test/dependency-management/cache-classifiers/multi.sbt index 4e22c07f8..69771b0b8 100644 --- a/sbt/src/sbt-test/dependency-management/cache-classifiers/multi.sbt +++ b/sbt/src/sbt-test/dependency-management/cache-classifiers/multi.sbt @@ -1,3 +1,5 @@ +import xsbti.AppConfiguration + ThisBuild / scalaVersion := "2.12.12" // TTL of Coursier is 24h @@ -11,6 +13,7 @@ val b = project .settings( localCache, libraryDependencies += "org.example" %% "artifacta" % "1.0.0-SNAPSHOT" withSources() classifier("tests"), + scalaCompilerBridgeResolvers += userLocalFileResolver(appConfiguration.value), externalResolvers := Vector( MavenCache("demo", ((baseDirectory in ThisBuild).value / "demo-repo")), DefaultMavenRepository @@ -26,3 +29,9 @@ val a = project publishArtifact in (Test,packageBin) := true, publishTo := Some(MavenCache("demo", ((baseDirectory in ThisBuild).value / "demo-repo"))) ) + +// use the user local resolver to fetch the SNAPSHOT version of the compiler-bridge +def userLocalFileResolver(appConfig: AppConfiguration): Resolver = { + val ivyHome = appConfig.provider.scalaProvider.launcher.ivyHome + Resolver.file("User Local", ivyHome / "local")(Resolver.defaultIvyPatterns) +} diff --git a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/build.sbt b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/build.sbt index d52b9e114..018bab537 100644 --- a/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/build.sbt +++ b/sbt/src/sbt-test/dependency-management/cached-resolution-configurations/build.sbt @@ -1,3 +1,5 @@ +import xsbti.AppConfiguration + ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" def commonSettings: Vector[Def.Setting[_]] = @@ -5,6 +7,7 @@ def commonSettings: Vector[Def.Setting[_]] = organization := "com.example", ivyPaths := IvyPaths( (baseDirectory in ThisBuild).value, Some((baseDirectory in LocalRootProject).value / "ivy-cache")), dependencyCacheDirectory := (baseDirectory in LocalRootProject).value / "dependency", + scalaCompilerBridgeResolvers += userLocalFileResolver(appConfiguration.value), resolvers += Resolver.file("buggy", (baseDirectory in LocalRootProject).value / "repo")( Patterns( ivyPatterns = Vector("[organization]/[module]/[revision]/ivy.xml"), @@ -28,3 +31,9 @@ lazy val b = project dependsOn(a) settings( updateOptions := updateOptions.value.withCachedResolution(true), //comment this line to make ws compile libraryDependencies += "a" % "b" % "1.0.1" % "compile->runtime" ) + +// use the user local resolver to fetch the SNAPSHOT version of the compiler-bridge +def userLocalFileResolver(appConfig: AppConfiguration): Resolver = { + val ivyHome = appConfig.provider.scalaProvider.launcher.ivyHome + Resolver.file("User Local", ivyHome / "local")(Resolver.defaultIvyPatterns) +} diff --git a/sbt/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt b/sbt/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt index 2c174b63f..9460b811d 100644 --- a/sbt/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt +++ b/sbt/src/sbt-test/dependency-management/evicted-semver-spec/build.sbt @@ -1,17 +1,15 @@ +import xsbti.AppConfiguration // ThisBuild / useCoursier := false ThisBuild / organization := "com.example" -ThisBuild / scalaVersion := "2.12.12" +ThisBuild / scalaVersion := "2.13.3" ThisBuild / versionScheme := Some("semver-spec") ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" def commonSettings: Seq[Def.Setting[_]] = Seq( - ivyPaths := IvyPaths( - (ThisBuild / baseDirectory).value, - Some((LocalRootProject / target).value / "ivy-cache") - ), fullResolvers := fullResolvers.value.filterNot(_.name == "inter-project"), publishTo := Some(MavenCache("local-maven", (LocalRootProject / target).value / "local-maven")), + scalaCompilerBridgeResolvers += userLocalFileResolver(appConfiguration.value), resolvers += MavenCache("local-maven", (LocalRootProject / target).value / "local-maven"), ) @@ -56,7 +54,22 @@ val use = project } log.info(s"extraAttributes = $extraAttributes") assert(extraAttributes.nonEmpty, s"$extraAttributes is empty") - val ew = EvictionWarning(ivyModule.value, (evicted / evictionWarningOptions).value, report) - assert(ew.directEvictions.isEmpty, s"${ew.directEvictions} is not empty") }, ) + +val use2 = project + .settings(commonSettings) + .settings( + name := "use2", + libraryDependencies ++= Seq( + "org.http4s" %% "http4s-blaze-server" % "0.21.11", + // https://repo1.maven.org/maven2/org/typelevel/cats-effect_2.13/3.0.0-M4/cats-effect_2.13-3.0.0-M4.pom + // is published with early-semver + "org.typelevel" %% "cats-effect" % "3.0.0-M4", + ), + ) +// use the user local resolver to fetch the SNAPSHOT version of the compiler-bridge +def userLocalFileResolver(appConfig: AppConfiguration): Resolver = { + val ivyHome = appConfig.provider.scalaProvider.launcher.ivyHome + Resolver.file("User Local", ivyHome / "local")(Resolver.defaultIvyPatterns) +} diff --git a/sbt/src/sbt-test/dependency-management/evicted-semver-spec/test b/sbt/src/sbt-test/dependency-management/evicted-semver-spec/test index eb5f0c784..93ed91f57 100644 --- a/sbt/src/sbt-test/dependency-management/evicted-semver-spec/test +++ b/sbt/src/sbt-test/dependency-management/evicted-semver-spec/test @@ -3,3 +3,4 @@ > middle/publish > use/check +-> use2/update diff --git a/sbt/src/sbt-test/dependency-management/scala-organization/build.sbt b/sbt/src/sbt-test/dependency-management/scala-organization/build.sbt index 42d335c4d..068fe0611 100644 --- a/sbt/src/sbt-test/dependency-management/scala-organization/build.sbt +++ b/sbt/src/sbt-test/dependency-management/scala-organization/build.sbt @@ -52,5 +52,5 @@ checkDependencies := { if !m.evicted } yield m.module.withExtraAttributes(Map.empty)).toSet - assert(resolved == expected) + assert(resolved == expected, s"$resolved != $expected") } diff --git a/sbt/src/sbt-test/dependency-management/scala3-auto-scala-library/build.sbt b/sbt/src/sbt-test/dependency-management/scala3-auto-scala-library/build.sbt new file mode 100644 index 000000000..9478d98dd --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-auto-scala-library/build.sbt @@ -0,0 +1,19 @@ +autoScalaLibrary := false +scalaVersion := "3.0.0-M2" +libraryDependencies += "com.chuusai" % "shapeless_2.13" % "2.3.3" + +val checkScalaLibrary = TaskKey[Unit]("checkScalaLibrary") + +checkScalaLibrary := { + val scalaLibsJars = (Compile / managedClasspath).value + .map(_.data.getName) + .filter(name => name.startsWith("scala-library") || name.startsWith("scala3-library")) + .sorted + val expectedScalaLibsJars = Seq( + "scala-library-2.13.0.jar" + ) + assert( + scalaLibsJars == expectedScalaLibsJars, + s"$scalaLibsJars != $expectedScalaLibsJars" + ) +} diff --git a/sbt/src/sbt-test/dependency-management/scala3-auto-scala-library/test b/sbt/src/sbt-test/dependency-management/scala3-auto-scala-library/test new file mode 100644 index 000000000..f56f5a75e --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-auto-scala-library/test @@ -0,0 +1 @@ +> checkScalaLibrary diff --git a/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/A.scala b/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/A.scala new file mode 100644 index 000000000..c3ab8e5cc --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/A.scala @@ -0,0 +1 @@ +val A = "A" diff --git a/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/build.sbt b/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/build.sbt new file mode 100644 index 000000000..998afcca4 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/build.sbt @@ -0,0 +1,8 @@ +ThisBuild / scalaVersion := "3.0.0-M2" + +lazy val check = taskKey[Unit]("") + +check := { + val bridge = scalaCompilerBridgeBinaryJar.value + bridge.getOrElse(sys.error(s"bridge JAR is missing")) +} diff --git a/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/test b/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/test new file mode 100644 index 000000000..5f1fbe2c5 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-compiler-bridge-binary/test @@ -0,0 +1,2 @@ +> check +> compile diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-home/build.sbt b/sbt/src/sbt-test/dependency-management/scala3-scala-home/build.sbt new file mode 100644 index 000000000..e3dcd92e1 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-home/build.sbt @@ -0,0 +1,9 @@ +scalaVersion := "3.0.0-M2" + +val makeHome = taskKey[Unit]("Populates the 'home/lib' directory with Scala jars from the default ScalaInstance") + +makeHome := { + val lib = baseDirectory.value / "home" / "lib" + for(jar <- scalaInstance.value.allJars) + IO.copyFile(jar, lib / jar.getName) +} diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-home/changes/real-build.sbt b/sbt/src/sbt-test/dependency-management/scala3-scala-home/changes/real-build.sbt new file mode 100644 index 000000000..876da64cf --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-home/changes/real-build.sbt @@ -0,0 +1,11 @@ +scalaVersion := "3.0.0-M2" +scalaHome := Some(baseDirectory.value / "home") + +val checkUpdate = taskKey[Unit]("Ensures that resolved Scala artifacts are replaced with ones from the configured Scala home directory") + +checkUpdate := { + val report = update.value + val lib = (scalaHome.value.get / "lib").getCanonicalFile + for(f <- report.allFiles) + assert(f.getParentFile == lib, "Artifact not in Scala home directory: " + f.getAbsolutePath) +} diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-home/test b/sbt/src/sbt-test/dependency-management/scala3-scala-home/test new file mode 100644 index 000000000..7eadb9215 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-home/test @@ -0,0 +1,4 @@ +> makeHome +$ copy-file changes/real-build.sbt build.sbt +> reload +> checkUpdate diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/build.sbt b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/build.sbt new file mode 100644 index 000000000..dfd1b73e5 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/build.sbt @@ -0,0 +1,48 @@ +ThisBuild / useCoursier := false + +scalaOrganization := "org.other" +scalaVersion := "3.0.0-M2" + +resolvers += Resolver.file("buggy", (baseDirectory in LocalRootProject).value / "repo")( + Patterns( + ivyPatterns = Vector("[organization]/[module]/[revision]/ivy.xml"), + artifactPatterns = Vector("[organization]/[module]/[revision]/dummy.jar"), + isMavenCompatible = false, + descriptorOptional = true, + skipConsistencyCheck = true + ) +) + +libraryDependencies += "org.typelevel" %% "cats-core" % "2.3.0" + +val checkDependencies = taskKey[Unit]("Checks that dependencies are correct.") + +checkDependencies := { + val expected: Set[ModuleID] = Set( + "org.scala-lang.modules" % "scala-asm" % "7.3.1-scala-1", + "org.jline" % "jline-reader" % "3.15.0", + "com.google.protobuf" % "protobuf-java" % "3.7.0", + "org.typelevel" % "cats-kernel_3.0.0-M2" % "2.3.0", + "org.jline" % "jline-terminal-jna" % "3.15.0", + "org.jline" % "jline-terminal" % "3.15.0", + "org.scala-sbt" % "compiler-interface" % "1.3.5", + "net.java.dev.jna" % "jna" % "5.3.1", + "org.other" % "scala-library" % "2.13.4", + "org.other" % "scala3-library_3.0.0-M2" % "3.0.0-M2", + "org.typelevel" % "simulacrum-scalafix-annotations_3.0.0-M2" % "0.5.1", + "org.other" % "scala3-compiler_3.0.0-M2" % "3.0.0-M2", + "org.other" % "scala3-interfaces" % "3.0.0-M2", + "org.other" % "tasty-core_3.0.0-M2" % "3.0.0-M2", + "org.typelevel" % "cats-core_3.0.0-M2" % "2.3.0", + "org.scala-sbt" % "util-interface" % "1.3.0" + ) + + val resolved: Set[ModuleID] = + (for { + c <- update.value.configurations + m <- c.modules + if !m.evicted + } yield m.module.withExtraAttributes(Map.empty)).toSet + + assert(resolved == expected, s"$resolved != $expected") +} diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala-library/2.13.4/dummy.jar b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala-library/2.13.4/dummy.jar new file mode 100644 index 000000000..e69de29bb diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala-library/2.13.4/ivy.xml b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala-library/2.13.4/ivy.xml new file mode 100644 index 000000000..6ef3dce02 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala-library/2.13.4/ivy.xml @@ -0,0 +1,28 @@ + + + + Scala Standard Library + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-compiler_3.0.0-M2/3.0.0-M2/dummy.jar b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-compiler_3.0.0-M2/3.0.0-M2/dummy.jar new file mode 100644 index 000000000..e69de29bb diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-compiler_3.0.0-M2/3.0.0-M2/ivy.xml b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-compiler_3.0.0-M2/3.0.0-M2/ivy.xml new file mode 100644 index 000000000..5b6236f36 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-compiler_3.0.0-M2/3.0.0-M2/ivy.xml @@ -0,0 +1,39 @@ + + + + scala3-compiler + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-interfaces/3.0.0-M2/dummy.jar b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-interfaces/3.0.0-M2/dummy.jar new file mode 100644 index 000000000..e69de29bb diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-interfaces/3.0.0-M2/ivy.xml b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-interfaces/3.0.0-M2/ivy.xml new file mode 100644 index 000000000..cab483d67 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-interfaces/3.0.0-M2/ivy.xml @@ -0,0 +1,29 @@ + + + + scala3-interfaces + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-library_3.0.0-M2/3.0.0-M2/dummy.jar b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-library_3.0.0-M2/3.0.0-M2/dummy.jar new file mode 100644 index 000000000..e69de29bb diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-library_3.0.0-M2/3.0.0-M2/ivy.xml b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-library_3.0.0-M2/3.0.0-M2/ivy.xml new file mode 100644 index 000000000..593d39bb4 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/scala3-library_3.0.0-M2/3.0.0-M2/ivy.xml @@ -0,0 +1,30 @@ + + + + scala3-library-bootstrapped + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/tasty-core_3.0.0-M2/3.0.0-M2/dummy.jar b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/tasty-core_3.0.0-M2/3.0.0-M2/dummy.jar new file mode 100644 index 000000000..e69de29bb diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/tasty-core_3.0.0-M2/3.0.0-M2/ivy.xml b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/tasty-core_3.0.0-M2/3.0.0-M2/ivy.xml new file mode 100644 index 000000000..5716a9b6e --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/repo/org.other/tasty-core_3.0.0-M2/3.0.0-M2/ivy.xml @@ -0,0 +1,30 @@ + + + + tasty-core-bootstrapped + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sbt/src/sbt-test/dependency-management/scala3-scala-organization/test b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/test new file mode 100644 index 000000000..6e1b1a750 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/scala3-scala-organization/test @@ -0,0 +1,3 @@ +# this test is pending because the IvyDependencyResolution is not yet able +# to override the Scala 3 artifacts +> checkDependencies diff --git a/sbt/src/sbt-test/project/scala3-console-project/build.sbt b/sbt/src/sbt-test/project/scala3-console-project/build.sbt new file mode 100644 index 000000000..208b8c684 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-console-project/build.sbt @@ -0,0 +1,3 @@ +ThisBuild / scalaVersion := "3.0.0-M2" + +lazy val root = project.in(file(".")) diff --git a/sbt/src/sbt-test/project/scala3-console-project/test b/sbt/src/sbt-test/project/scala3-console-project/test new file mode 100644 index 000000000..b80db65f1 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-console-project/test @@ -0,0 +1 @@ +> consoleProject diff --git a/sbt/src/sbt-test/project/scala3-example-project/LICENSE b/sbt/src/sbt-test/project/scala3-example-project/LICENSE new file mode 100644 index 000000000..728844ee3 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-example-project/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2015 The dotty-example-project contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/sbt/src/sbt-test/project/scala3-example-project/README.md b/sbt/src/sbt-test/project/scala3-example-project/README.md new file mode 100644 index 000000000..daa544226 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-example-project/README.md @@ -0,0 +1 @@ +Cut-n-pasted from https://github.com/scala/scala3-example-project/tree/353ccef820699f20eb012420a9deb28814481031 diff --git a/sbt/src/sbt-test/project/scala3-example-project/build.sbt b/sbt/src/sbt-test/project/scala3-example-project/build.sbt new file mode 100644 index 000000000..14f3f6017 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-example-project/build.sbt @@ -0,0 +1 @@ +ThisBuild / scalaVersion := "3.0.0-M3" diff --git a/sbt/src/sbt-test/project/scala3-example-project/src/main/scala-3/Main.scala b/sbt/src/sbt-test/project/scala3-example-project/src/main/scala-3/Main.scala new file mode 100644 index 000000000..8a44ae4ef --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-example-project/src/main/scala-3/Main.scala @@ -0,0 +1,16 @@ + +object Main { + + def main(args: Array[String]): Unit = { + + runExample("Trait Params")(TraitParams.test) + + } + + private def runExample(name: String)(f: => Unit) = { + println(Console.MAGENTA + s"$name example:" + Console.RESET) + f + println() + } + +} diff --git a/sbt/src/sbt-test/project/scala3-example-project/src/main/scala-3/TraitParams.scala b/sbt/src/sbt-test/project/scala3-example-project/src/main/scala-3/TraitParams.scala new file mode 100644 index 000000000..1ca8d7c42 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-example-project/src/main/scala-3/TraitParams.scala @@ -0,0 +1,21 @@ +/** + * Trait Parameters: https://dotty.epfl.ch/docs/reference/other-new-features/trait-parameters.html + */ +object TraitParams { + + trait Base(val msg: String) + class A extends Base("Hello") + class B extends Base("Dotty!") + + // Union types only exist in Dotty, so there's no chance that this will accidentally be compiled with Scala 2 + private def printMessages(msgs: (A | B)*) = println(msgs.map(_.msg).mkString(" ")) + + def test: Unit = { + + printMessages(new A, new B) + + // Sanity check the classpath: this won't run if the dotty jar is not present. + val x: Int => Int = z => z + x(1) + } +} diff --git a/sbt/src/sbt-test/project/scala3-example-project/test b/sbt/src/sbt-test/project/scala3-example-project/test new file mode 100644 index 000000000..62ea636c1 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-example-project/test @@ -0,0 +1 @@ +> run diff --git a/sbt/src/sbt-test/project/scala3-instance-loader/build.sbt b/sbt/src/sbt-test/project/scala3-instance-loader/build.sbt new file mode 100644 index 000000000..53bf8a0d3 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-instance-loader/build.sbt @@ -0,0 +1,13 @@ +ThisBuild / scalaVersion := "3.0.0-M3" + +lazy val check = taskKey[Unit]("check the Scala 3 instance class loader") + +lazy val xsbtiClass = classOf[xsbti.compile.Compilers] + +check := { + val scala3Loader = scalaInstance.value.loader + assert( + scala3Loader.loadClass(xsbtiClass.getCanonicalName) == xsbtiClass, + "The Scala 3 instance classloader does not load the same `xsbti` classes than sbt" + ) +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/scala3-instance-loader/test b/sbt/src/sbt-test/project/scala3-instance-loader/test new file mode 100644 index 000000000..15675b169 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-instance-loader/test @@ -0,0 +1 @@ +> check diff --git a/sbt/src/sbt-test/project/scala3-sandwich-sjs/app/src/main/scala/app/Main.scala b/sbt/src/sbt-test/project/scala3-sandwich-sjs/app/src/main/scala/app/Main.scala new file mode 100644 index 000000000..e3a0fa2ce --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich-sjs/app/src/main/scala/app/Main.scala @@ -0,0 +1,9 @@ +package app + +import mylib._ + +object Main { + def main(args: Array[String]): Unit = { + println(MyLib.square(5)) + } +} diff --git a/sbt/src/sbt-test/project/scala3-sandwich-sjs/build.sbt b/sbt/src/sbt-test/project/scala3-sandwich-sjs/build.sbt new file mode 100644 index 000000000..01e81e167 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich-sjs/build.sbt @@ -0,0 +1,15 @@ +ThisBuild / scalaVersion := "2.13.4" +ThisBuild / scalacOptions += "-Ytasty-reader" + +lazy val scala3code = project + .enablePlugins(ScalaJSPlugin) + .settings(scalaVersion := "3.0.0-M1") + +lazy val app = project + .enablePlugins(ScalaJSPlugin) + .dependsOn(scala3code) + .settings( + scalaVersion := "2.13.4", + scalacOptions += "-Ytasty-reader", + scalaJSUseMainModuleInitializer := true + ) diff --git a/sbt/src/sbt-test/project/scala3-sandwich-sjs/project/plugins.sbt b/sbt/src/sbt-test/project/scala3-sandwich-sjs/project/plugins.sbt new file mode 100644 index 000000000..8f1d0ac9b --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich-sjs/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.3.1") diff --git a/sbt/src/sbt-test/project/scala3-sandwich-sjs/scala3code/src/main/scala/mylib/MyLib.scala b/sbt/src/sbt-test/project/scala3-sandwich-sjs/scala3code/src/main/scala/mylib/MyLib.scala new file mode 100644 index 000000000..ae2f3af75 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich-sjs/scala3code/src/main/scala/mylib/MyLib.scala @@ -0,0 +1,5 @@ +package mylib + +object MyLib { + def square(x: Int): Int = x * x +} diff --git a/sbt/src/sbt-test/project/scala3-sandwich-sjs/test b/sbt/src/sbt-test/project/scala3-sandwich-sjs/test new file mode 100644 index 000000000..63092ffa4 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich-sjs/test @@ -0,0 +1 @@ +> app/run diff --git a/sbt/src/sbt-test/project/scala3-sandwich/bar-app/D.scala b/sbt/src/sbt-test/project/scala3-sandwich/bar-app/D.scala new file mode 100644 index 000000000..b937ae06c --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich/bar-app/D.scala @@ -0,0 +1,5 @@ +package example + +object D { + val x = C.x +} diff --git a/sbt/src/sbt-test/project/scala3-sandwich/bar-core/C.scala b/sbt/src/sbt-test/project/scala3-sandwich/bar-core/C.scala new file mode 100644 index 000000000..4d4fcc6df --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich/bar-core/C.scala @@ -0,0 +1,5 @@ +package example + +object C { + val x = 1 +} diff --git a/sbt/src/sbt-test/project/scala3-sandwich/build.sbt b/sbt/src/sbt-test/project/scala3-sandwich/build.sbt new file mode 100644 index 000000000..69a2ca58f --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich/build.sbt @@ -0,0 +1,23 @@ +ThisBuild / scalaVersion := "3.0.0-M1" + +lazy val scala213 = "2.13.4" + +lazy val root = (project in file(".")) + .aggregate(fooApp, fooCore, barApp, barCore) + +lazy val fooApp = (project in file("foo-app")) + .dependsOn(fooCore) + +lazy val fooCore = (project in file("foo-core")) + .settings( + scalaVersion := scala213, + ) + +lazy val barApp = (project in file("bar-app")) + .dependsOn(barCore) + .settings( + scalaVersion := scala213, + scalacOptions += "-Ytasty-reader" + ) + +lazy val barCore = (project in file("bar-core")) diff --git a/sbt/src/sbt-test/project/scala3-sandwich/foo-app/B.scala b/sbt/src/sbt-test/project/scala3-sandwich/foo-app/B.scala new file mode 100644 index 000000000..ed82c07d1 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich/foo-app/B.scala @@ -0,0 +1,5 @@ +package example + +object B { + val x = A.x +} diff --git a/sbt/src/sbt-test/project/scala3-sandwich/foo-core/A.scala b/sbt/src/sbt-test/project/scala3-sandwich/foo-core/A.scala new file mode 100644 index 000000000..be4b82a9f --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich/foo-core/A.scala @@ -0,0 +1,5 @@ +package example + +object A { + val x = 1 +} diff --git a/sbt/src/sbt-test/project/scala3-sandwich/test b/sbt/src/sbt-test/project/scala3-sandwich/test new file mode 100644 index 000000000..19ccc5787 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-sandwich/test @@ -0,0 +1,3 @@ +> fooApp/compile + +> barApp/compile diff --git a/sbt/src/sbt-test/project/scala3-semanticdb/LICENSE b/sbt/src/sbt-test/project/scala3-semanticdb/LICENSE new file mode 100644 index 000000000..728844ee3 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-semanticdb/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2015 The dotty-example-project contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/sbt/src/sbt-test/project/scala3-semanticdb/README.md b/sbt/src/sbt-test/project/scala3-semanticdb/README.md new file mode 100644 index 000000000..daa544226 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-semanticdb/README.md @@ -0,0 +1 @@ +Cut-n-pasted from https://github.com/scala/scala3-example-project/tree/353ccef820699f20eb012420a9deb28814481031 diff --git a/sbt/src/sbt-test/project/scala3-semanticdb/build.sbt b/sbt/src/sbt-test/project/scala3-semanticdb/build.sbt new file mode 100644 index 000000000..7b302985e --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-semanticdb/build.sbt @@ -0,0 +1,13 @@ +ThisBuild / scalaVersion := "3.0.0-M2" +ThisBuild / semanticdbEnabled := true + +lazy val check = taskKey[Unit]("check the Scala 3 semanticdb files") + +Compile / check := checkTask("Main.semanticdb") +Test / check := checkTask("Test.semanticdb") + +def checkTask(fileName: String): Def.Initialize[Task[Unit]] = Def.task { + val _ = compile.value + val dir = semanticdbTargetRoot.value + assert(IO.listFiles(dir).exists(_.getName == fileName), s"$fileName is missing") +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/scala3-semanticdb/src/main/scala/Main.scala b/sbt/src/sbt-test/project/scala3-semanticdb/src/main/scala/Main.scala new file mode 100644 index 000000000..9deb66d0b --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-semanticdb/src/main/scala/Main.scala @@ -0,0 +1,8 @@ + +object Main { + val msg = "Hello, World!" + + def main(args: Array[String]): Unit = { + println(msg) + } +} diff --git a/sbt/src/sbt-test/project/scala3-semanticdb/src/test/scala/Test.scala b/sbt/src/sbt-test/project/scala3-semanticdb/src/test/scala/Test.scala new file mode 100644 index 000000000..f197443c9 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-semanticdb/src/test/scala/Test.scala @@ -0,0 +1,3 @@ +object Test { + assert(Main.msg == "Hello, World!") +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/scala3-semanticdb/test b/sbt/src/sbt-test/project/scala3-semanticdb/test new file mode 100644 index 000000000..699323992 --- /dev/null +++ b/sbt/src/sbt-test/project/scala3-semanticdb/test @@ -0,0 +1,3 @@ +> Compile / check +> Test / check + diff --git a/sbt/src/test/scala/sbt/IllegalReferenceSpec.scala b/sbt/src/test/scala/sbt/IllegalReferenceSpec.scala index 0dbf94ca8..e94817b57 100644 --- a/sbt/src/test/scala/sbt/IllegalReferenceSpec.scala +++ b/sbt/src/test/scala/sbt/IllegalReferenceSpec.scala @@ -44,7 +44,7 @@ class IllegalReferenceSpec extends fixture.FunSuite with fixture.TestDataFixture private[this] var _infos: List[FrontEnd#Info] = Nil private[this] val frontEnd = new FrontEnd { override def display(info: Info): Unit = _infos ::= info - override def interactive(): Unit = {} + def interactive(): Unit = {} } import scala.tools.reflect.ToolBox diff --git a/sbt/src/test/scala/sbt/RunFromSourceMain.scala b/sbt/src/test/scala/sbt/RunFromSourceMain.scala index 85b1decfb..ae6240a8b 100644 --- a/sbt/src/test/scala/sbt/RunFromSourceMain.scala +++ b/sbt/src/test/scala/sbt/RunFromSourceMain.scala @@ -88,8 +88,9 @@ object RunFromSourceMain { ): Option[(File, Seq[String])] = { try launch(defaultBootDirectory, baseDir, scalaVersion, sbtVersion, classpath, args, context) map exit catch { - case r: xsbti.FullReload => Some((baseDir, r.arguments())) - case scala.util.control.NonFatal(e) => e.printStackTrace(); errorAndExit(e.toString) + case r: xsbti.FullReload => Some((baseDir, r.arguments())) + case scala.util.control.NonFatal(e) => + e.printStackTrace(); errorAndExit(e.toString) } } diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala index 880d78098..70c0f80c1 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -482,6 +482,7 @@ class ScriptedRunner { instances: Int ) = run(baseDir, bufferLog, tests, logger, launchOpts, prescripted, prop, instances, true) + @com.github.ghik.silencer.silent private[this] def run( baseDir: File, bufferLog: Boolean, @@ -510,7 +511,8 @@ class ScriptedRunner { val scriptedRunners = runner.batchScriptedRunner(scriptedTests, addTestFile, groupCount, prop, logger) if (parallelExecution && instances > 1) { - val parallelRunners = scriptedRunners.toParArray + import sbt.internal.CompatParColls.Converters._ + val parallelRunners = scriptedRunners.toArray.par parallelRunners.tasksupport = new ForkJoinTaskSupport(new ForkJoinPool(instances)) runAll(parallelRunners) } else { @@ -544,9 +546,12 @@ class ScriptedRunner { private def reportErrors(errors: GenSeq[String]): Unit = if (errors.nonEmpty) sys.error(errors.mkString("Failed tests:\n\t", "\n\t", "\n")) else () - def runAll(toRun: GenSeq[ScriptedTests.TestRunner]): Unit = + def runAll(toRun: Seq[ScriptedTests.TestRunner]): Unit = reportErrors(toRun.flatMap(test => test.apply().flatten)) + def runAll(toRun: scala.collection.parallel.ParSeq[ScriptedTests.TestRunner]): Unit = + reportErrors(toRun.flatMap(test => test.apply().flatten).toList) + @deprecated("No longer used", "1.1.0") def get(tests: Seq[String], baseDirectory: File, log: Logger): Seq[ScriptedTest] = get(tests, baseDirectory, _ => true, log) diff --git a/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala b/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala index 8b0c3cc10..4483b9eec 100644 --- a/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala +++ b/tasks-standard/src/main/scala/sbt/std/TaskExtra.scala @@ -94,7 +94,18 @@ sealed trait ProcessPipe { def pipe(sid: String)(p: ProcessBuilder): Task[Int] } -trait TaskExtra { +trait TaskExtra0 { + final implicit def joinAnyTasks(in: Seq[Task[_]]): JoinTask[Any, Seq] = + joinTasks0[Any](existToAny(in)) + private[sbt] def joinTasks0[S](in: Seq[Task[S]]): JoinTask[S, Seq] = new JoinTask[S, Seq] { + def join: Task[Seq[S]] = + Task[Seq[S]](Info(), new Join(in, (s: Seq[Result[S]]) => Right(TaskExtra.all(s)))) + def reduced(f: (S, S) => S): Task[S] = TaskExtra.reduced(in.toIndexedSeq, f) + } + private[sbt] def existToAny(in: Seq[Task[_]]): Seq[Task[Any]] = in.asInstanceOf[Seq[Task[Any]]] +} + +trait TaskExtra extends TaskExtra0 { final def nop: Task[Unit] = constant(()) final def constant[T](t: T): Task[T] = task(t) @@ -111,10 +122,8 @@ trait TaskExtra { def tasks: Seq[Task[S]] = fork(idFun) } - import TaskExtra.{ allM, anyFailM, existToAny, failM, successM } + import TaskExtra.{ allM, anyFailM, failM, successM } - final implicit def joinAnyTasks(in: Seq[Task[_]]): JoinTask[Any, Seq] = - joinTasks[Any](existToAny(in)) final implicit def joinTasks[S](in: Seq[Task[S]]): JoinTask[S, Seq] = new JoinTask[S, Seq] { def join: Task[Seq[S]] = Task[Seq[S]](Info(), new Join(in, (s: Seq[Result[S]]) => Right(TaskExtra.all(s)))) @@ -289,6 +298,4 @@ object TaskExtra extends TaskExtra { // But apparently it *cannot* survive a task map/flatMap/etc. See actions/depends-on. private[sbt] def newInfo[A](info: Info[_]): Info[A] = Info[A](AttributeMap(info.attributes.entries.filter(_.key.label != "taskDefinitionKey"))) - - private[sbt] def existToAny(in: Seq[Task[_]]): Seq[Task[Any]] = in.asInstanceOf[Seq[Task[Any]]] } diff --git a/tasks-standard/src/test/scala/TestRunnerSort.scala b/tasks-standard/src/test/scala/TestRunnerSort.scala index 4d9eace1f..e7c6dcbed 100644 --- a/tasks-standard/src/test/scala/TestRunnerSort.scala +++ b/tasks-standard/src/test/scala/TestRunnerSort.scala @@ -27,7 +27,7 @@ object TaskRunnerSortTest extends Properties("TaskRunnerSort") { else { val pivot = a(0) val (lt, gte) = a.view.drop(1).partition(_ < pivot) - sortDirect(lt) ++ List(pivot) ++ sortDirect(gte) + sortDirect(lt.toSeq) ++ List(pivot) ++ sortDirect(gte.toSeq) } } final def sort(a: Seq[Int]): Task[Seq[Int]] = { @@ -37,7 +37,7 @@ object TaskRunnerSortTest extends Properties("TaskRunnerSort") { task(a) flatMap { a => val pivot = a(0) val (lt, gte) = a.view.drop(1).partition(_ < pivot) - Test.t2(sort(lt), sort(gte)) map { + sbt.Test.t2(sort(lt.toSeq), sort(gte.toSeq)) map { case (l, g) => l ++ List(pivot) ++ g } } diff --git a/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala b/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala index d2407ccf4..f57b2f02e 100644 --- a/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala +++ b/tasks/src/main/scala/sbt/ConcurrentRestrictions.scala @@ -305,7 +305,9 @@ object ConcurrentRestrictions { def take(): R = { if (closed.get) - throw new IllegalStateException("Tried to get values for a closed completion service") + throw new RejectedExecutionException( + "Tried to get values for a closed completion service" + ) jservice.take().get() } } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupErrorEvent.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupErrorEvent.scala index 80be5015e..915281634 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupErrorEvent.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupErrorEvent.scala @@ -11,10 +11,10 @@ final class EndTestGroupErrorEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: EndTestGroupErrorEvent => (this.name == x.name) && (this.error == x.error) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.testing.EndTestGroupErrorEvent".##) + name.##) + error.##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupEvent.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupEvent.scala index 7c8e56de2..25b778918 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupEvent.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/EndTestGroupEvent.scala @@ -11,10 +11,10 @@ final class EndTestGroupEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: EndTestGroupEvent => (this.name == x.name) && (this.result == x.result) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.testing.EndTestGroupEvent".##) + name.##) + result.##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/StartTestGroupEvent.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/StartTestGroupEvent.scala index 8d695193c..29aa62b35 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/StartTestGroupEvent.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/StartTestGroupEvent.scala @@ -10,10 +10,10 @@ final class StartTestGroupEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: StartTestGroupEvent => (this.name == x.name) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.testing.StartTestGroupEvent".##) + name.##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/TestCompleteEvent.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/TestCompleteEvent.scala index d48e1e276..850e2b85a 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/TestCompleteEvent.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/TestCompleteEvent.scala @@ -10,10 +10,10 @@ final class TestCompleteEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestCompleteEvent => (this.result == x.result) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.testing.TestCompleteEvent".##) + result.##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/TestInitEvent.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/TestInitEvent.scala index 167854949..bfb96777f 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/TestInitEvent.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/TestInitEvent.scala @@ -9,10 +9,10 @@ final class TestInitEvent private () extends sbt.protocol.testing.TestMessage() -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TestInitEvent => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.testing.TestInitEvent".##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemDetail.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemDetail.scala index 8b38a8fca..f9517c9ae 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemDetail.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemDetail.scala @@ -19,10 +19,10 @@ final class TestItemDetail private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestItemDetail => (this.fullyQualifiedName == x.fullyQualifiedName) && (this.status == x.status) && (this.duration == x.duration) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (37 * (17 + "sbt.protocol.testing.TestItemDetail".##) + fullyQualifiedName.##) + status.##) + duration.##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemEvent.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemEvent.scala index 253e9f3e7..0c8086d2c 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemEvent.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/TestItemEvent.scala @@ -11,10 +11,10 @@ final class TestItemEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestItemEvent => (this.result == x.result) && (this.detail == x.detail) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (37 * (17 + "sbt.protocol.testing.TestItemEvent".##) + result.##) + detail.##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/TestMessage.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/TestMessage.scala index d629ee632..ea15ce798 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/TestMessage.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/TestMessage.scala @@ -10,10 +10,10 @@ abstract class TestMessage() extends Serializable { -override def equals(o: Any): Boolean = o match { +override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case _: TestMessage => true case _ => false -} +}) override def hashCode: Int = { 37 * (17 + "sbt.protocol.testing.TestMessage".##) } diff --git a/testing/src/main/contraband-scala/sbt/protocol/testing/TestStringEvent.scala b/testing/src/main/contraband-scala/sbt/protocol/testing/TestStringEvent.scala index e515f7549..63d8077a6 100644 --- a/testing/src/main/contraband-scala/sbt/protocol/testing/TestStringEvent.scala +++ b/testing/src/main/contraband-scala/sbt/protocol/testing/TestStringEvent.scala @@ -9,10 +9,10 @@ final class TestStringEvent private ( - override def equals(o: Any): Boolean = o match { + override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match { case x: TestStringEvent => (this.value == x.value) case _ => false - } + }) override def hashCode: Int = { 37 * (37 * (17 + "sbt.protocol.testing.TestStringEvent".##) + value.##) } diff --git a/testing/src/main/scala/sbt/TestFramework.scala b/testing/src/main/scala/sbt/TestFramework.scala index 71fe4790d..f9f9b29a2 100644 --- a/testing/src/main/scala/sbt/TestFramework.scala +++ b/testing/src/main/scala/sbt/TestFramework.scala @@ -144,9 +144,9 @@ final class TestRunner( } finally { loggers.foreach(_.flush()) } - val event = TestEvent(results) + val event = TestEvent(results.toList) safeListenersCall(_.testEvent(event)) - (SuiteResult(results), nestedTasks.toSeq) + (SuiteResult(results.toList), nestedTasks.toSeq) } safeListenersCall(_.startGroup(name)) @@ -239,7 +239,7 @@ object TestFramework { } if (frameworks.nonEmpty) for (test <- tests) assignTest(test) - map.toMap.mapValues(_.toSet) + map.toMap.mapValues(_.toSet).toMap } private def createTestTasks( @@ -257,7 +257,7 @@ object TestFramework { val startTask = foreachListenerSafe(_.doInit) val testTasks = - tests flatMap { + Map(tests.toSeq.flatMap { case (framework, testDefinitions) => val runner = runners(framework) val testTasks = withContextLoader(loader) { runner.tasks(testDefinitions) } @@ -265,7 +265,7 @@ object TestFramework { val taskDef = testTask.taskDef (taskDef.fullyQualifiedName, createTestFunction(loader, taskDef, runner, testTask)) } - } + }: _*) val endTask = (result: TestResult) => foreachListenerSafe(_.doComplete(result)) (startTask, order(testTasks, ordered), endTask) 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 890ad687b..de023d3c1 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 @@ -9,46 +9,33 @@ package sbt package internal package inc -import java.io.File -import java.nio.file.{ Files, Path } -import java.util.concurrent.Callable - import sbt.internal.inc.classpath.ClasspathUtil -import sbt.io.IO import sbt.internal.librarymanagement._ import sbt.internal.util.{ BufferedLogger, FullLogger } +import sbt.io.IO import sbt.librarymanagement._ import sbt.librarymanagement.syntax._ import sbt.util.InterfaceUtil.{ toSupplier => f0 } import xsbti.ArtifactInfo._ +import xsbti.compile.{ + ClasspathOptionsUtil, + CompilerBridgeProvider, + ScalaInstance => XScalaInstance +} import xsbti.{ ComponentProvider, GlobalLock, Logger } -import xsbti.compile.{ ClasspathOptionsUtil, CompilerBridgeProvider } + +import java.io.File +import java.nio.file.{ Files, Path } +import java.util.concurrent.Callable private[sbt] object ZincComponentCompiler { - import xsbti.compile.ScalaInstance - final val binSeparator = "-bin_" final val javaClassVersion = System.getProperty("java.class.version") private[inc] final val sbtOrgTemp = JsonUtil.sbtOrgTemp private[inc] final val modulePrefixTemp = "temp-module-" - private[sbt] final lazy val incrementalVersion: String = ZincComponentManager.version - - private val CompileConf = Some(Configurations.Compile.name) - - private[sbt] def getDefaultBridgeModule(scalaVersion: String): ModuleID = { - val compilerBridgeId = scalaVersion match { - case sc if (sc startsWith "2.10.") => "compiler-bridge_2.10" - case sc if (sc startsWith "2.11.") => "compiler-bridge_2.11" - case sc if (sc startsWith "2.12.") => "compiler-bridge_2.12" - case "2.13.0-M1" => "compiler-bridge_2.12" - case _ => "compiler-bridge_2.13" - } - ModuleID(SbtOrganization, compilerBridgeId, incrementalVersion) - .withConfigurations(CompileConf) - .sources() - } + private val lock: AnyRef = new {} /** Defines the internal implementation of a bridge provider. */ private class ZincCompilerBridgeProvider( @@ -66,9 +53,9 @@ private[sbt] object ZincComponentCompiler { */ def compiledBridge( bridgeSources: ModuleID, - scalaInstance: ScalaInstance, + scalaInstance: XScalaInstance, logger: Logger, - ): File = { + ): File = lock.synchronized { val raw = new RawCompiler(scalaInstance, ClasspathOptionsUtil.auto, logger) val zinc = new ZincComponentCompiler(raw, manager, dependencyResolution, bridgeSources, logger) @@ -76,9 +63,10 @@ private[sbt] object ZincComponentCompiler { zinc.compiledBridgeJar } - override def fetchCompiledBridge(scalaInstance: ScalaInstance, logger: Logger): File = { + override def fetchCompiledBridge(scalaInstance: XScalaInstance, logger: Logger): File = { val scalaVersion = scalaInstance.actualVersion() - val bridgeSources = userProvidedBridgeSources.getOrElse(getDefaultBridgeModule(scalaVersion)) + val bridgeSources = userProvidedBridgeSources + .getOrElse(ZincLmUtil.getDefaultBridgeSourceModule(scalaVersion)) compiledBridge(bridgeSources, scalaInstance, logger) } @@ -124,7 +112,7 @@ private[sbt] object ZincComponentCompiler { ScalaArtifacts(scalaCompilerJar, Vector(scalaLibraryJar), others) } - override def fetchScalaInstance(scalaVersion: String, logger: Logger): ScalaInstance = { + override def fetchScalaInstance(scalaVersion: String, logger: Logger): XScalaInstance = { val scalaArtifacts = getScalaArtifacts(scalaVersion, logger) val scalaCompilerJar = scalaArtifacts.compilerJar val scalaLibraryJars = scalaArtifacts.libraryJars @@ -140,13 +128,15 @@ private[sbt] object ZincComponentCompiler { val properties = ResourceLoader.getSafePropertiesFor("compiler.properties", loader) val loaderVersion = Option(properties.getProperty("version.number")) val scalaV = loaderVersion.getOrElse("unknown") - new inc.ScalaInstance( + val allJars = jarsToLoad.map(_.toFile).toArray + new ScalaInstance( scalaV, loader, + loader, loaderLibraryOnly, scalaLibraryJars.map(_.toFile).toArray, - scalaCompilerJar.toFile, - jarsToLoad.map(_.toFile).toArray, + allJars, + allJars, loaderVersion, ) } @@ -312,7 +302,7 @@ private object ZincLMHelper { logger.info(s"Attempting to fetch $dependencies.") dependencyResolution.update(module, updateConfiguration, warningConf, logger) match { case Left(uw) => - logger.debug(s"Couldn't retrieve module(s) ${prettyPrintDependency(module)}.") + logger.debug(s"couldn't retrieve module(s) ${prettyPrintDependency(module)}.") val unretrievedMessage = s"The $desc could not be retrieved." val unresolvedLines = UnresolvedWarning.unresolvedWarningLines.showLines(uw).mkString("\n") throw new InvalidComponent(s"$unretrievedMessage\n$unresolvedLines") 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 c44422483..db5525a1a 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 @@ -39,7 +39,9 @@ class ZincComponentManager( def notFound = invalid(s"Could not find required component '$id'") def getOrElse(orElse: => Iterable[File]): Iterable[File] = { val existing = provider.component(id) - if (existing.isEmpty) orElse else existing + // log.info(s"[zinc-lm] existing = ${existing.toList}") + if (existing.isEmpty) orElse + else existing } def createAndCache = { 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 e0d0d4722..3205052ef 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 @@ -8,14 +8,21 @@ package sbt.internal.inc import java.io.File - import sbt.internal.inc.classpath.ClassLoaderCache -import sbt.librarymanagement.{ DependencyResolution, ModuleID } +import sbt.internal.util.MessageOnlyException +import sbt.librarymanagement.{ + DependencyResolution, + ModuleID, + ScalaArtifacts, + UnresolvedWarningConfiguration, + UpdateConfiguration +} +import sbt.librarymanagement.syntax._ +import xsbti.ArtifactInfo.SbtOrganization import xsbti._ -import xsbti.compile._ +import xsbti.compile.{ ClasspathOptions, ScalaInstance => XScalaInstance } object ZincLmUtil { - import xsbti.compile.ScalaInstance /** * Instantiate a Scala compiler that is instrumented to analyze dependencies. @@ -23,7 +30,7 @@ object ZincLmUtil { * compilation. */ def scalaCompiler( - scalaInstance: ScalaInstance, + scalaInstance: XScalaInstance, classpathOptions: ClasspathOptions, globalLock: GlobalLock, componentProvider: ComponentProvider, @@ -49,6 +56,48 @@ object ZincLmUtil { ) } - def getDefaultBridgeModule(scalaVersion: String): ModuleID = - ZincComponentCompiler.getDefaultBridgeModule(scalaVersion) + def fetchDefaultBridgeModule( + scalaVersion: String, + dependencyResolution: DependencyResolution, + updateConfiguration: UpdateConfiguration, + warningConfig: UnresolvedWarningConfiguration, + logger: Logger + ): File = { + val bridgeModule = getDefaultBridgeModule(scalaVersion) + val descriptor = dependencyResolution.wrapDependencyInModule(bridgeModule) + dependencyResolution + .update(descriptor, updateConfiguration, warningConfig, logger) + .toOption + .flatMap { report => + val jars = report.select( + configurationFilter(Compile.name), + moduleFilter(bridgeModule.organization, bridgeModule.name, bridgeModule.revision), + artifactFilter(`extension` = "jar", classifier = "") + ) + if (jars.size > 1) + sys.error(s"There should be only one jar for $bridgeModule but found $jars") + else jars.headOption + } + .getOrElse(throw new MessageOnlyException(s"Missing $bridgeModule")) + } + + def getDefaultBridgeModule(scalaVersion: String): ModuleID = { + if (ScalaArtifacts.isScala3(scalaVersion)) { + ModuleID(ScalaArtifacts.Organization, "scala3-sbt-bridge", scalaVersion) + .withConfigurations(Some(Compile.name)) + } else { + val compilerBridgeId = scalaVersion match { + case sc if sc startsWith "2.10." => "compiler-bridge_2.10" + case sc if sc startsWith "2.11." => "compiler-bridge_2.11" + case sc if sc startsWith "2.12." => "compiler-bridge_2.12" + case "2.13.0-M1" => "compiler-bridge_2.12" + case _ => "compiler-bridge_2.13" + } + ModuleID(SbtOrganization, compilerBridgeId, ZincComponentManager.version) + .withConfigurations(Some(Compile.name)) + } + } + + def getDefaultBridgeSourceModule(scalaVersion: String): ModuleID = + getDefaultBridgeModule(scalaVersion).sources() } 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 7d4720420..a4c30bf0c 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 @@ -62,7 +62,7 @@ abstract class IvyBridgeProviderSpecification case Some(v: String) => v case _ => throw new IllegalStateException("No zinc version specified") } - val bridge0 = ZincComponentCompiler.getDefaultBridgeModule(scalaVersion) + val bridge0 = ZincLmUtil.getDefaultBridgeSourceModule(scalaVersion) // redefine the compiler bridge version // using the version of zinc used during testing // this way when building with zinc as a source dependency