improve the implementation of expandJavaHomes

This commit is contained in:
Eugene Yokota 2019-03-26 23:06:49 -04:00
parent c0cd65af92
commit 29ebd1222c
2 changed files with 34 additions and 9 deletions

View File

@ -477,18 +477,34 @@ private[sbt] object CrossJava {
if (s eq null) ""
else s
// expand Java versions to 1-20 to 1.x, and vice versa to accept both "1.8" and "8"
private val oneDot = Map((1L to 20L).toVector flatMap { i =>
Vector(Vector(i) -> Vector(1L, i), Vector(1L, i) -> Vector(i))
}: _*)
def expandJavaHomes(hs: Map[String, File]): Map[String, File] =
hs flatMap {
def expandJavaHomes(hs: Map[String, File]): Map[String, File] = {
val parsed = hs map {
case (k, v) => JavaVersion(k) -> v
}
// first ignore vnd
val withAndWithoutVnd = parsed flatMap {
case (k, v) =>
val jv = JavaVersion(k)
if (oneDot.contains(jv.numbers))
Vector(k -> v, jv.withNumbers(oneDot(jv.numbers)).toString -> v)
if (k.vendor.isDefined) Vector(k -> v, k.withVendor(None) -> v)
else Vector(k -> v)
}
val normalizeNumbers = withAndWithoutVnd flatMap {
case (k, v) =>
k.numbers match {
case Vector(1L, minor, _*) =>
Vector(k -> v, k.withNumbers(Vector(minor)) -> v)
case Vector(major) if major > 1 =>
Vector(k -> v, k.withNumbers(Vector(1L, major)) -> v)
case Vector(major, minor, _*) if major > 1 =>
Vector(k -> v, k.withNumbers(Vector(major)) -> v, k.withNumbers(Vector(1L, major)) -> v)
case _ =>
Vector(k -> v)
}
}
val result: Map[String, File] = normalizeNumbers map {
case (k, v) => (k.toString -> v)
}
result
}
def wrapNull(a: Array[String]): Vector[String] =
if (a eq null) Vector()

View File

@ -10,6 +10,7 @@ package internal
import org.scalatest._
import sbt.internal.CrossJava.JavaDiscoverConfig._
import scala.collection.immutable.ListMap
class CrossJavaTest extends FunSuite with DiagrammedAssertions {
test("The Java home selector should select the most recent") {
@ -85,6 +86,14 @@ class CrossJavaTest extends FunSuite with DiagrammedAssertions {
assert(file.getName == "11.0.2.hs-adpt")
}
test("expandJavaHomes") {
val conf = new SdkmanDiscoverConfig {
override def candidates() = Vector("11.0.2.hs-adpt")
}
val hs = CrossJava.expandJavaHomes(ListMap(conf.javaHomes: _*))
assert(hs.contains("11"))
}
test("SDKMAN candidate parsing") {
assert(
CrossJava