From a465522727859ba188425af4d7307b345ab1a653 Mon Sep 17 00:00:00 2001 From: Tako Schotanus Date: Thu, 9 Feb 2023 18:41:59 +0100 Subject: [PATCH] chore: prefer installing default java version With this new code if there's an open-ended request for a Java version older than the one Jbang considers "default" we'll install the default version instead. (So if there's code reqesting `//JAVA 9+` we'll install Java 11 instead of 9, but if code requests `//JAVA 16+` we'll install 16) --- src/main/java/dev/jbang/net/JdkManager.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/dev/jbang/net/JdkManager.java b/src/main/java/dev/jbang/net/JdkManager.java index f7f83cc4a..b7e431981 100644 --- a/src/main/java/dev/jbang/net/JdkManager.java +++ b/src/main/java/dev/jbang/net/JdkManager.java @@ -14,6 +14,7 @@ import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -252,8 +253,8 @@ public static JdkProvider.Jdk getJdk(@Nullable String versionOrId, boolean updat private static JdkProvider.Jdk getJdkByVersion(int requestedVersion, boolean openVersion, boolean updatableOnly) { JdkProvider.Jdk jdk = getInstalledJdkByVersion(requestedVersion, openVersion, updatableOnly); if (jdk == null) { - if (requestedVersion > 0) { - jdk = getAvailableJdkByVersion(requestedVersion); + if (requestedVersion > 0 && (requestedVersion >= Settings.getDefaultJavaVersion() || !openVersion)) { + jdk = getAvailableJdkByVersion(requestedVersion, false); } else { jdk = getJdkByVersion(Settings.getDefaultJavaVersion(), true, updatableOnly); } @@ -345,8 +346,8 @@ private static JdkProvider.Jdk getInstalledJdkById(String requestedId, boolean u } @Nonnull - private static JdkProvider.Jdk getAvailableJdkByVersion(int version) { - List jdks = getJdkByVersion(listAvailableJdks(), version); + private static JdkProvider.Jdk getAvailableJdkByVersion(int version, boolean openVersion) { + List jdks = getJdkByVersion(listAvailableJdks(), version, openVersion); if (jdks.isEmpty()) { throw new ExitException(EXIT_INVALID_INPUT, "JDK version is not available for installation: " + version + "\n" @@ -528,8 +529,15 @@ public static boolean isCurrentJdkManaged() { return home != null && updatableProviders().stream().anyMatch(p -> p.getJdkByPath(home) != null); } - private static List getJdkByVersion(Collection jdks, int version) { - return jdks.stream().filter(jdk -> jdk.getMajorVersion() == version).collect(Collectors.toList()); + private static List getJdkByVersion(Collection jdks, int version, + boolean openVersion) { + Stream s = jdks.stream(); + if (openVersion) { + s = s.filter(jdk -> jdk.getMajorVersion() >= version); + } else { + s = s.filter(jdk -> jdk.getMajorVersion() == version); + } + return s.collect(Collectors.toList()); } private static List getJdkById(Collection jdks, String id) {