From 428c1a1799740c3f57e6d0d5828b1d995410fc92 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Tue, 12 Oct 2021 23:49:06 +0800 Subject: [PATCH] feat(java): WIP: show expected java version range when no valid java. --- .../jackhuang/hmcl/game/LauncherHelper.java | 2 ++ .../hmcl/game/JavaVersionConstraint.java | 30 ++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index 64bb568b7..e29f21d62 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -318,6 +318,8 @@ public final class LauncherHelper { Runnable continueAction = () -> future.complete(JavaVersion.fromCurrentEnvironment()); if (setting.isJavaAutoSelected()) { +// JavaVersionConstraint.VersionRange range = JavaVersionConstraint.findSuitableJavaVersionRange(gameVersion, version); + // TODO: download java 16 if necessary! Controllers.dialog(i18n("launch.failed.no_accepted_java"), i18n("message.warning"), MessageType.WARNING, continueAction); } else { Controllers.dialog(i18n("launch.wrong_javadir"), i18n("message.warning"), MessageType.WARNING, continueAction); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java index 635b5f27b..526f0da16 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/JavaVersionConstraint.java @@ -115,7 +115,7 @@ public enum JavaVersionConstraint { return true; } - public static Pair, Range> findSuitableJavaVersionRange(VersionNumber gameVersion, Version version) { + public static VersionRange findSuitableJavaVersionRange(VersionNumber gameVersion, Version version) { Range mandatoryJavaRange = versionRange(MIN, MAX); Range suggestedJavaRange = versionRange(MIN, MAX); for (JavaVersionConstraint java : values()) { @@ -129,26 +129,24 @@ public enum JavaVersionConstraint { } } } - return pair(mandatoryJavaRange, suggestedJavaRange); + return new VersionRange(mandatoryJavaRange, suggestedJavaRange); } @Nullable public static JavaVersion findSuitableJavaVersion(VersionNumber gameVersion, Version version) throws InterruptedException { - Pair, Range> range = findSuitableJavaVersionRange(gameVersion, version); - Range mandatoryJavaRange = range.getKey(); - Range suggestedJavaRange = range.getValue(); + VersionRange range = findSuitableJavaVersionRange(gameVersion, version); JavaVersion mandatory = null; JavaVersion suggested = null; for (JavaVersion javaVersion : JavaVersion.getJavas()) { // select the latest java version that this version accepts. - if (mandatoryJavaRange.contains(javaVersion.getVersionNumber())) { + if (range.getMandatory().contains(javaVersion.getVersionNumber())) { if (mandatory == null) mandatory = javaVersion; else if (javaVersion.getVersionNumber().compareTo(mandatory.getVersionNumber()) > 0) { mandatory = javaVersion; } } - if (suggestedJavaRange.contains(javaVersion.getVersionNumber())) { + if (range.getSuggested().contains(javaVersion.getVersionNumber())) { if (suggested == null) suggested = javaVersion; else if (javaVersion.getVersionNumber().compareTo(suggested.getVersionNumber()) > 0) { suggested = javaVersion; @@ -169,4 +167,22 @@ public enum JavaVersionConstraint { private static Range versionRange(String fromInclusive, String toExclusive) { return Range.between(VersionNumber.asVersion(fromInclusive), VersionNumber.asVersion(toExclusive)); } + + public static class VersionRange { + private final Range mandatory; + private final Range suggested; + + public VersionRange(Range mandatory, Range suggested) { + this.mandatory = mandatory; + this.suggested = suggested; + } + + public Range getMandatory() { + return mandatory; + } + + public Range getSuggested() { + return suggested; + } + } }