[java] restores JDK version deduction from a string; restores assertion

This commit is contained in:
Roman Shevchenko
2017-12-21 18:38:15 +01:00
parent 758e004a5d
commit 2ef60a41f9
2 changed files with 21 additions and 22 deletions
@@ -48,7 +48,8 @@ public class JavaSdkImpl extends JavaSdk {
private static final String VM_EXE_NAME = "java"; // do not use JavaW.exe for Windows because of issues with encoding
private final Map<String, JavaVersion> myCachedSdkHomeToVersion = new ConcurrentHashMap<>();
private final Map<String, String> myCachedSdkHomeToVersionString = new ConcurrentHashMap<>();
private final Map<String, JavaSdkVersion> myCachedVersionStringToJdkVersion = new ConcurrentHashMap<>();
public JavaSdkImpl(final VirtualFileManager fileManager, final FileTypeManager fileTypeManager) {
super("JavaSDK");
@@ -72,7 +73,9 @@ public class JavaSdkImpl extends JavaSdk {
private void updateCache(VirtualFileEvent event) {
if (FileTypes.ARCHIVE.equals(fileTypeManager.getFileTypeByFileName(event.getFileName()))) {
String filePath = event.getFile().getPath();
myCachedSdkHomeToVersion.keySet().removeIf(sdkHome -> FileUtil.isAncestor(sdkHome, filePath, false));
if (myCachedSdkHomeToVersionString.keySet().removeIf(sdkHome -> FileUtil.isAncestor(sdkHome, filePath, false))) {
myCachedVersionStringToJdkVersion.clear();
}
}
}
});
@@ -195,7 +198,7 @@ public class JavaSdkImpl extends JavaSdk {
@Override
public String suggestSdkName(String currentSdkName, String sdkHome) {
JavaVersion version = getJavaVersion(sdkHome);
JavaVersion version = JavaVersion.tryParse(getVersionString(sdkHome));
if (version == null) return currentSdkName;
StringBuilder suggested = new StringBuilder();
@@ -280,24 +283,19 @@ public class JavaSdkImpl extends JavaSdk {
modificator.addRoot(root, annoType);
}
@Nullable
private JavaVersion getJavaVersion(String sdkHome) {
return myCachedSdkHomeToVersion.computeIfAbsent(sdkHome, k -> {
@Override
public final String getVersionString(String sdkHome) {
return myCachedSdkHomeToVersionString.computeIfAbsent(sdkHome, k -> {
JdkVersionDetector.JdkVersionInfo jdkInfo = SdkVersionUtil.getJdkVersionInfo(k);
return jdkInfo != null ? jdkInfo.version : null;
return jdkInfo != null ? JdkVersionDetector.formatVersionString(jdkInfo.version) : null;
});
}
@Override
public final String getVersionString(String sdkHome) {
JavaVersion version = getJavaVersion(sdkHome);
return version != null ? JdkVersionDetector.formatVersionString(version) : null;
}
@Override
public JavaSdkVersion getVersion(@NotNull Sdk sdk) {
JavaVersion version = getJavaVersion(sdk.getHomePath());
return version != null ? JavaSdkVersion.fromJavaVersion(version) : null;
String versionString = sdk.getVersionString();
return versionString == null ? null :
myCachedVersionStringToJdkVersion.computeIfAbsent(versionString, JavaSdkVersion::fromVersionString);
}
@Override
@@ -23,6 +23,7 @@ import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.TestOnly;
import org.junit.Assert;
import org.junit.Assume;
import java.io.File;
@@ -157,19 +158,18 @@ public class IdeaTestUtil extends PlatformTestUtil {
}
@TestOnly
public static void setTestVersion(@NotNull final JavaSdkVersion testVersion, @NotNull Module module, @NotNull Disposable parentDisposable) {
ModuleRootManager rootManager = ModuleRootManager.getInstance(module);
final Sdk sdk = rootManager.getSdk();
final String oldVersionString = sdk.getVersionString();
public static void setTestVersion(@NotNull JavaSdkVersion testVersion, @NotNull Module module, @NotNull Disposable parentDisposable) {
Sdk sdk = ModuleRootManager.getInstance(module).getSdk();
Assert.assertNotNull(sdk);
String oldVersionString = sdk.getVersionString();
// hack
((SdkModificator)sdk).setVersionString(testVersion.getDescription());
//assert JavaSdk.getInstance().getVersion(sdk) == testVersion;
Assert.assertSame(testVersion, JavaSdk.getInstance().getVersion(sdk));
Disposer.register(parentDisposable, () -> ((SdkModificator)sdk).setVersionString(oldVersionString));
}
@NotNull
public static String requireRealJdkHome() {
String javaHome = SystemProperties.getJavaHome();
@@ -180,7 +180,8 @@ public class IdeaTestUtil extends PlatformTestUtil {
return path;
}
}
//noinspection ConstantConditions
Assume.assumeTrue("Cannot find JDK, checked paths: " + paths, false);
return null;
}
}
}