From c22cb34e7b3f4cf0fad9edca8d191af561c2cad2 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 22 Aug 2019 01:54:14 -0400 Subject: [PATCH] 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) + } +}