feat(java): WIP: show expected java version range when no valid java.

This commit is contained in:
huanghongxun
2021-10-12 23:49:06 +08:00
parent 8892e2b273
commit 428c1a1799
2 changed files with 25 additions and 7 deletions

View File

@@ -318,6 +318,8 @@ public final class LauncherHelper {
Runnable continueAction = () -> future.complete(JavaVersion.fromCurrentEnvironment()); Runnable continueAction = () -> future.complete(JavaVersion.fromCurrentEnvironment());
if (setting.isJavaAutoSelected()) { 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); Controllers.dialog(i18n("launch.failed.no_accepted_java"), i18n("message.warning"), MessageType.WARNING, continueAction);
} else { } else {
Controllers.dialog(i18n("launch.wrong_javadir"), i18n("message.warning"), MessageType.WARNING, continueAction); Controllers.dialog(i18n("launch.wrong_javadir"), i18n("message.warning"), MessageType.WARNING, continueAction);

View File

@@ -115,7 +115,7 @@ public enum JavaVersionConstraint {
return true; return true;
} }
public static Pair<Range<VersionNumber>, Range<VersionNumber>> findSuitableJavaVersionRange(VersionNumber gameVersion, Version version) { public static VersionRange findSuitableJavaVersionRange(VersionNumber gameVersion, Version version) {
Range<VersionNumber> mandatoryJavaRange = versionRange(MIN, MAX); Range<VersionNumber> mandatoryJavaRange = versionRange(MIN, MAX);
Range<VersionNumber> suggestedJavaRange = versionRange(MIN, MAX); Range<VersionNumber> suggestedJavaRange = versionRange(MIN, MAX);
for (JavaVersionConstraint java : values()) { for (JavaVersionConstraint java : values()) {
@@ -129,26 +129,24 @@ public enum JavaVersionConstraint {
} }
} }
} }
return pair(mandatoryJavaRange, suggestedJavaRange); return new VersionRange(mandatoryJavaRange, suggestedJavaRange);
} }
@Nullable @Nullable
public static JavaVersion findSuitableJavaVersion(VersionNumber gameVersion, Version version) throws InterruptedException { public static JavaVersion findSuitableJavaVersion(VersionNumber gameVersion, Version version) throws InterruptedException {
Pair<Range<VersionNumber>, Range<VersionNumber>> range = findSuitableJavaVersionRange(gameVersion, version); VersionRange range = findSuitableJavaVersionRange(gameVersion, version);
Range<VersionNumber> mandatoryJavaRange = range.getKey();
Range<VersionNumber> suggestedJavaRange = range.getValue();
JavaVersion mandatory = null; JavaVersion mandatory = null;
JavaVersion suggested = null; JavaVersion suggested = null;
for (JavaVersion javaVersion : JavaVersion.getJavas()) { for (JavaVersion javaVersion : JavaVersion.getJavas()) {
// select the latest java version that this version accepts. // 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; if (mandatory == null) mandatory = javaVersion;
else if (javaVersion.getVersionNumber().compareTo(mandatory.getVersionNumber()) > 0) { else if (javaVersion.getVersionNumber().compareTo(mandatory.getVersionNumber()) > 0) {
mandatory = javaVersion; mandatory = javaVersion;
} }
} }
if (suggestedJavaRange.contains(javaVersion.getVersionNumber())) { if (range.getSuggested().contains(javaVersion.getVersionNumber())) {
if (suggested == null) suggested = javaVersion; if (suggested == null) suggested = javaVersion;
else if (javaVersion.getVersionNumber().compareTo(suggested.getVersionNumber()) > 0) { else if (javaVersion.getVersionNumber().compareTo(suggested.getVersionNumber()) > 0) {
suggested = javaVersion; suggested = javaVersion;
@@ -169,4 +167,22 @@ public enum JavaVersionConstraint {
private static Range<VersionNumber> versionRange(String fromInclusive, String toExclusive) { private static Range<VersionNumber> versionRange(String fromInclusive, String toExclusive) {
return Range.between(VersionNumber.asVersion(fromInclusive), VersionNumber.asVersion(toExclusive)); return Range.between(VersionNumber.asVersion(fromInclusive), VersionNumber.asVersion(toExclusive));
} }
public static class VersionRange {
private final Range<VersionNumber> mandatory;
private final Range<VersionNumber> suggested;
public VersionRange(Range<VersionNumber> mandatory, Range<VersionNumber> suggested) {
this.mandatory = mandatory;
this.suggested = suggested;
}
public Range<VersionNumber> getMandatory() {
return mandatory;
}
public Range<VersionNumber> getSuggested() {
return suggested;
}
}
} }