Skip to content

Commit

Permalink
chore: prefer installing default java version
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
quintesse committed Feb 10, 2023
1 parent f0b1bbc commit a465522
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions src/main/java/dev/jbang/net/JdkManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -345,8 +346,8 @@ private static JdkProvider.Jdk getInstalledJdkById(String requestedId, boolean u
}

@Nonnull
private static JdkProvider.Jdk getAvailableJdkByVersion(int version) {
List<JdkProvider.Jdk> jdks = getJdkByVersion(listAvailableJdks(), version);
private static JdkProvider.Jdk getAvailableJdkByVersion(int version, boolean openVersion) {
List<JdkProvider.Jdk> jdks = getJdkByVersion(listAvailableJdks(), version, openVersion);
if (jdks.isEmpty()) {
throw new ExitException(EXIT_INVALID_INPUT, "JDK version is not available for installation: " + version
+ "\n"
Expand Down Expand Up @@ -528,8 +529,15 @@ public static boolean isCurrentJdkManaged() {
return home != null && updatableProviders().stream().anyMatch(p -> p.getJdkByPath(home) != null);
}

private static List<JdkProvider.Jdk> getJdkByVersion(Collection<JdkProvider.Jdk> jdks, int version) {
return jdks.stream().filter(jdk -> jdk.getMajorVersion() == version).collect(Collectors.toList());
private static List<JdkProvider.Jdk> getJdkByVersion(Collection<JdkProvider.Jdk> jdks, int version,
boolean openVersion) {
Stream<JdkProvider.Jdk> 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<JdkProvider.Jdk> getJdkById(Collection<JdkProvider.Jdk> jdks, String id) {
Expand Down

0 comments on commit a465522

Please sign in to comment.