From 439e67c8c4e5e3bbba3e1b8aaf0c223a09878c32 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sat, 14 Jul 2018 01:05:14 -0400 Subject: [PATCH] Fixes contains bug Ref https://github.com/scala/bug/issues/10831 Ref https://github.com/sbt/sbt/pull/4139#commitcomment-29633458 --- .../main/scala/sbt/internal/CrossJava.scala | 5 ++-- sbt/src/sbt-test/java/cross/changes/build.sbt | 25 +++++++++++++++++++ sbt/src/sbt-test/java/cross/test | 9 +++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 sbt/src/sbt-test/java/cross/changes/build.sbt diff --git a/main/src/main/scala/sbt/internal/CrossJava.scala b/main/src/main/scala/sbt/internal/CrossJava.scala index cf16fb7e3..a62b6c5d6 100644 --- a/main/src/main/scala/sbt/internal/CrossJava.scala +++ b/main/src/main/scala/sbt/internal/CrossJava.scala @@ -161,7 +161,8 @@ private[sbt] object CrossJava { case Some(v) => projectJavaVersions flatMap { case (proj, versions) => - if (versions.isEmpty || versions.contains(v)) Vector(proj -> versions) + if (versions.isEmpty || versions.contains[String](v.toString)) + Vector(proj -> versions) else Vector() } } @@ -184,7 +185,7 @@ private[sbt] object CrossJava { val filterKeys: Set[AttributeKey[_]] = Set(javaHome).map(_.key) - val projectsContains: Reference => Boolean = projects.map(_._1).toSet.contains + val projectsContains: Reference => Boolean = projects.map(_._1).toSet[Reference].contains(_) // Filter out any old javaHome version settings that were added, this is just for hygiene. val filteredRawAppend = session.rawAppend.filter(_.key match { diff --git a/sbt/src/sbt-test/java/cross/changes/build.sbt b/sbt/src/sbt-test/java/cross/changes/build.sbt new file mode 100644 index 000000000..245745912 --- /dev/null +++ b/sbt/src/sbt-test/java/cross/changes/build.sbt @@ -0,0 +1,25 @@ +import complete.DefaultParsers._ + +val check = inputKey[Unit]("Runs the check") + +lazy val root = (project in file(".")) + .settings( + ThisBuild / scalaVersion := "2.12.6", + crossJavaVersions := List("1.8", "10"), + + // read out.txt and see if it starts with the passed in number + check := { + val arg1: Int = (Space ~> NatBasic).parsed + file("out.txt") match { + case out if out.exists => + IO.readLines(out).headOption match { + case Some(v) if v startsWith arg1.toString => () + case Some(v) if v startsWith s"1.$arg1" => () + case x => sys.error(s"unexpected value: $x") + } + case out => sys.error(s"$out doesn't exist") + } + }, + + Compile / run / fork := true, + ) diff --git a/sbt/src/sbt-test/java/cross/test b/sbt/src/sbt-test/java/cross/test index ff76c51bf..9a30d25fb 100644 --- a/sbt/src/sbt-test/java/cross/test +++ b/sbt/src/sbt-test/java/cross/test @@ -4,3 +4,12 @@ > java++ 10! > run > check 10 + +# test safe switching +$ copy-file changes/build.sbt build.sbt +$ delete out.txt +> reload +> clean +> java++ 10 +> run +> check 10