From c22cb34e7b3f4cf0fad9edca8d191af561c2cad2 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 22 Aug 2019 01:54:14 -0400 Subject: [PATCH 1/2] Make CrossVersion.Disabled stable Fixes https://github.com/sbt/sbt/issues/4975 This makes `CrossVersion.Disabled` a stable identifier by reverting `final def` back to `final val`. This is to fix Scala.JS build ``` [error] ScalaJSCrossVersion.scala:34:23: stable identifier required, but sbt.`package`.CrossVersion.Disabled found. [error] case CrossVersion.Disabled => [error] ^ [error] one error found [error] (Compile / compileIncremental) Compilation failed ``` ### notes - #121 added `final val Disabled = sbt.librarymanagement.Disabled` but it was just a companion object - #280 actually made it `final val Disabled = sbt.librarymanagement.Disabled()`, but this broke Cat's build that was calling `CrossVersion.Disabled()` - #290 changed to `final def Disabled = sbt.librarymanagement.Disabled` and `object Disabled extends sbt.librarymanagement.Disabled` - This changes back to `final val Disabled = sbt.librarymanagement.Disabled` (but because we changed the companion object in #290 that's ok) --- .../sbt/librarymanagement/CrossVersion.scala | 2 +- .../librarymanagement/CrossVersionExtra.scala | 2 +- .../tests/CrossVersionCompatTest.scala | 70 +++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 core/src/test/scala/example/tests/CrossVersionCompatTest.scala diff --git a/core/src/main/scala/sbt/librarymanagement/CrossVersion.scala b/core/src/main/scala/sbt/librarymanagement/CrossVersion.scala index 6c37596b3..19e712981 100644 --- a/core/src/main/scala/sbt/librarymanagement/CrossVersion.scala +++ b/core/src/main/scala/sbt/librarymanagement/CrossVersion.scala @@ -39,7 +39,7 @@ sealed class Disabled private () extends sbt.librarymanagement.CrossVersion() wi } object Disabled extends sbt.librarymanagement.Disabled { - def apply(): Disabled = new Disabled() + def apply(): Disabled = Disabled } /** diff --git a/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala b/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala index d8e54d8c8..4db8c7516 100644 --- a/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala +++ b/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala @@ -8,7 +8,7 @@ final case class ScalaVersion(full: String, binary: String) private[librarymanagement] abstract class CrossVersionFunctions { /** Compatibility with 0.13 */ - final def Disabled = sbt.librarymanagement.Disabled + final val Disabled = sbt.librarymanagement.Disabled final val Binary = sbt.librarymanagement.Binary final val Constant = sbt.librarymanagement.Constant final val Full = sbt.librarymanagement.Full diff --git a/core/src/test/scala/example/tests/CrossVersionCompatTest.scala b/core/src/test/scala/example/tests/CrossVersionCompatTest.scala new file mode 100644 index 000000000..11eaa54ea --- /dev/null +++ b/core/src/test/scala/example/tests/CrossVersionCompatTest.scala @@ -0,0 +1,70 @@ +package example.tests + +import sbt.librarymanagement.{ CrossVersion, Disabled } +import verify.BasicTestSuite + +object CrossVersionCompatTest extends BasicTestSuite { + test("CrossVersion.Disabled is typed to be Disabled") { + assert(CrossVersion.Disabled match { + case _: Disabled => true + case _ => false + }) + } + + test("CrossVersion.Disabled functions as disabled") { + assert(CrossVersion(CrossVersion.disabled, "1.0.0", "1.0") == None) + assert(CrossVersion(CrossVersion.Disabled, "1.0.0", "1.0") == None) + } + + test("CrossVersion.Disabled() is typed to be Disabled") { + assert(CrossVersion.Disabled() match { + case _: Disabled => true + case _ => false + }) + } + + test("CrossVersion.Disabled() functions as disabled") { + assert(CrossVersion(CrossVersion.disabled, "1.0.0", "1.0") == None) + assert(CrossVersion(CrossVersion.Disabled(), "1.0.0", "1.0") == None) + } + + test("CrossVersion.Disabled is stable") { + assert(CrossVersion.Disabled match { + case CrossVersion.Disabled => true + case _ => false + }) + } + + test("sbt.librarymanagement.Disabled is typed to be Disabled") { + assert(Disabled match { + case _: Disabled => true + case _ => false + }) + } + + test("sbt.librarymanagement.Disabled is stable") { + assert(Disabled match { + case Disabled => true + case _ => false + }) + } + + test("sbt.librarymanagement.Disabled() is typed to be Disabled") { + assert(Disabled() match { + case _: Disabled => true + case _ => false + }) + } + + test("CrossVersion.disabled is sbt.librarymanagement.Disabled") { + assert(CrossVersion.disabled == Disabled) + } + + test("CrossVersion.Disabled is sbt.librarymanagement.Disabled") { + assert(CrossVersion.Disabled == Disabled) + } + + test("CrossVersion.Disabled() is sbt.librarymanagement.Disabled") { + assert(CrossVersion.Disabled() == Disabled) + } +} From 4a1b6232e44216b244ab116e2fb9d4550e660597 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 22 Aug 2019 10:33:11 -0400 Subject: [PATCH 2/2] deprecate CrossVersion.Disabled --- build.sbt | 4 ++++ .../scala/sbt/librarymanagement/CrossVersionExtra.scala | 6 +++++- .../test/scala/example/tests/CrossVersionCompatTest.scala | 2 ++ project/Dependencies.scala | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 1c06bbb25..b6804e2e4 100644 --- a/build.sbt +++ b/build.sbt @@ -100,6 +100,10 @@ lazy val lmCore = (project in file("core")) scalaCheck % Test, scalaVerify % Test, ), + libraryDependencies ++= (scalaVersion.value match { + case v if v.startsWith("2.12.") => List(compilerPlugin(silencerPlugin)) + case _ => List() + }), libraryDependencies += scalaXml, resourceGenerators in Compile += Def .task( diff --git a/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala b/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala index 4db8c7516..43a46073f 100644 --- a/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala +++ b/core/src/main/scala/sbt/librarymanagement/CrossVersionExtra.scala @@ -8,6 +8,10 @@ final case class ScalaVersion(full: String, binary: String) private[librarymanagement] abstract class CrossVersionFunctions { /** Compatibility with 0.13 */ + @deprecated( + "use CrossVersion.disabled instead. prior to sbt 1.3.0, Diabled did not work without apply(). sbt/sbt#4977", + "1.3.0" + ) final val Disabled = sbt.librarymanagement.Disabled final val Binary = sbt.librarymanagement.Binary final val Constant = sbt.librarymanagement.Constant @@ -37,7 +41,7 @@ private[librarymanagement] abstract class CrossVersionFunctions { def binary: CrossVersion = Binary() /** Disables cross versioning for a module. */ - def disabled: CrossVersion = Disabled + def disabled: CrossVersion = sbt.librarymanagement.Disabled /** Cross-versions a module with a constant string (typically the binary Scala version). */ def constant(value: String): CrossVersion = Constant(value) diff --git a/core/src/test/scala/example/tests/CrossVersionCompatTest.scala b/core/src/test/scala/example/tests/CrossVersionCompatTest.scala index 11eaa54ea..8aa136e8c 100644 --- a/core/src/test/scala/example/tests/CrossVersionCompatTest.scala +++ b/core/src/test/scala/example/tests/CrossVersionCompatTest.scala @@ -2,7 +2,9 @@ package example.tests import sbt.librarymanagement.{ CrossVersion, Disabled } import verify.BasicTestSuite +import com.github.ghik.silencer.silent +@silent object CrossVersionCompatTest extends BasicTestSuite { test("CrossVersion.Disabled is typed to be Disabled") { assert(CrossVersion.Disabled match { diff --git a/project/Dependencies.scala b/project/Dependencies.scala index e36f10fba..a6cf0fdef 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -61,4 +61,5 @@ object Dependencies { } val gigahorseOkhttp = "com.eed3si9n" %% "gigahorse-okhttp" % "0.5.0" val okhttpUrlconnection = "com.squareup.okhttp3" % "okhttp-urlconnection" % "3.7.0" + val silencerPlugin = "com.github.ghik" %% "silencer-plugin" % "1.4.1" }