mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-07 22:09:38 +07:00
[java] improves JDK version detection (IDEA-172477)
This commit is contained in:
@@ -15,11 +15,15 @@
|
||||
*/
|
||||
package com.intellij.openapi.projectRoots;
|
||||
|
||||
import com.intellij.openapi.util.Version;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Represents version of Java SDK. Use {@code JavaSdk#getVersion(Sdk)} method to obtain version of an {@code Sdk}.
|
||||
@@ -28,25 +32,29 @@ import java.util.Arrays;
|
||||
* @see LanguageLevel
|
||||
*/
|
||||
public enum JavaSdkVersion {
|
||||
JDK_1_0(LanguageLevel.JDK_1_3, new String[]{"1.0"}),
|
||||
JDK_1_1(LanguageLevel.JDK_1_3, new String[]{"1.1"}),
|
||||
JDK_1_2(LanguageLevel.JDK_1_3, new String[]{"1.2"}),
|
||||
JDK_1_3(LanguageLevel.JDK_1_3, new String[]{"1.3"}),
|
||||
JDK_1_4(LanguageLevel.JDK_1_4, new String[]{"1.4"}),
|
||||
JDK_1_5(LanguageLevel.JDK_1_5, new String[]{"1.5", "5.0"}),
|
||||
JDK_1_6(LanguageLevel.JDK_1_6, new String[]{"1.6", "6.0"}),
|
||||
JDK_1_7(LanguageLevel.JDK_1_7, new String[]{"1.7", "7.0"}),
|
||||
JDK_1_8(LanguageLevel.JDK_1_8, new String[]{"1.8", "8.0"}),
|
||||
JDK_1_9(LanguageLevel.JDK_1_9, new String[]{"1.9", "9.0", "9-ea"}),
|
||||
JDK_10(LanguageLevel.JDK_1_9, new String[]{"10.0", "10-ea"});
|
||||
JDK_1_0(LanguageLevel.JDK_1_3, 0, new String[]{"1.0"}),
|
||||
JDK_1_1(LanguageLevel.JDK_1_3, 1, new String[]{"1.1"}),
|
||||
JDK_1_2(LanguageLevel.JDK_1_3, 2, new String[]{"1.2"}),
|
||||
JDK_1_3(LanguageLevel.JDK_1_3, 3, new String[]{"1.3"}),
|
||||
JDK_1_4(LanguageLevel.JDK_1_4, 4, new String[]{"1.4"}),
|
||||
JDK_1_5(LanguageLevel.JDK_1_5, 5, new String[]{"1.5", "5.0"}),
|
||||
JDK_1_6(LanguageLevel.JDK_1_6, 6, new String[]{"1.6", "6.0"}),
|
||||
JDK_1_7(LanguageLevel.JDK_1_7, 7, new String[]{"1.7", "7.0"}),
|
||||
JDK_1_8(LanguageLevel.JDK_1_8, 8, new String[]{"1.8", "8.0"}),
|
||||
JDK_1_9(LanguageLevel.JDK_1_9, 9, new String[]{"1.9", "9.0", "9-ea"}),
|
||||
JDK_10(LanguageLevel.JDK_1_9, 10, new String[]{"10.0", "10-ea"});
|
||||
|
||||
private static final JavaSdkVersion MAX_JDK = JDK_1_9;
|
||||
|
||||
private static final Pattern JAVA_VERSION = Pattern.compile("java version \"(\\d.*)\"");
|
||||
|
||||
private final LanguageLevel myMaxLanguageLevel;
|
||||
private final int myRelease;
|
||||
private final String[] myVersionStrings;
|
||||
|
||||
JavaSdkVersion(@NotNull LanguageLevel maxLanguageLevel, @NotNull String[] description) {
|
||||
JavaSdkVersion(@NotNull LanguageLevel maxLanguageLevel, int release, @NotNull String[] description) {
|
||||
myMaxLanguageLevel = maxLanguageLevel;
|
||||
myRelease = release;
|
||||
myVersionStrings = description;
|
||||
}
|
||||
|
||||
@@ -87,6 +95,17 @@ public enum JavaSdkVersion {
|
||||
|
||||
@Nullable
|
||||
public static JavaSdkVersion fromVersionString(@NotNull String versionString) {
|
||||
Matcher matcher = JAVA_VERSION.matcher(versionString.trim());
|
||||
if (matcher.matches()) {
|
||||
versionString = matcher.group(1);
|
||||
}
|
||||
|
||||
Version parsed = Version.parseVersion(versionString);
|
||||
if (parsed != null && parsed.major > 0) {
|
||||
int release = parsed.major == 1 ? parsed.minor : parsed.major;
|
||||
return ContainerUtil.find(values(), v -> v.myRelease == release);
|
||||
}
|
||||
|
||||
for (JavaSdkVersion version : values()) {
|
||||
for (String pattern : version.myVersionStrings) {
|
||||
if (versionString.contains(pattern)) {
|
||||
@@ -94,6 +113,7 @@ public enum JavaSdkVersion {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user