Use WriteAction for existing JDK check in JavaGradleProjectResolver

Updated methods to create and add SDK within a WriteAction, streamlining the process and minimizing potential concurrency issues.

GitOrigin-RevId: 2958149855ec78b86902d6ea34297d32dab931f8
This commit is contained in:
Dmitry Yudin
2024-06-21 16:44:06 +02:00
committed by intellij-monorepo-bot
parent 49f5b59af6
commit fd30803a4e

View File

@@ -4,7 +4,7 @@ package org.jetbrains.plugins.gradle.service.project;
import com.intellij.execution.CommandLineUtil;
import com.intellij.externalSystem.JavaModuleData;
import com.intellij.externalSystem.JavaProjectData;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.externalSystem.model.DataNode;
import com.intellij.openapi.externalSystem.model.ProjectKeys;
@@ -515,18 +515,20 @@ public final class JavaGradleProjectResolver extends AbstractProjectResolverExte
}
private static @NotNull Sdk lookupJdkByPath(@NotNull String sdkHome) {
var sdkType = ExternalSystemJdkProvider.getInstance().getJavaSdkType();
var sdkProvider = ExternalSystemJdkProvider.getInstance();
var sdkType = sdkProvider.getJavaSdkType();
var sdkName = sdkType.suggestSdkName(null, sdkHome);
var sdk = findSdkInSdkTable(sdkName, sdkHome);
if (sdk != null) {
return sdk;
}
var effectiveSdkName = SdkConfigurationUtil.createUniqueSdkName(sdkName, ProjectJdkTable.getInstance().getSdksOfType(sdkType));
var effectiveSdk = ExternalSystemJdkProvider.getInstance().createJdk(effectiveSdkName, sdkHome);
ApplicationManager.getApplication().invokeAndWait(() -> {
SdkConfigurationUtil.addSdk(effectiveSdk);
return WriteAction.computeAndWait(() -> {
var projectJdkTable = ProjectJdkTable.getInstance();
var effectiveSdkName = SdkConfigurationUtil.createUniqueSdkName(sdkName, projectJdkTable.getSdksOfType(sdkType));
var effectiveSdk = sdkProvider.createJdk(effectiveSdkName, sdkHome);
projectJdkTable.addJdk(effectiveSdk);
return effectiveSdk;
});
return effectiveSdk;
}
private @Nullable GradleProjectSettings getProjectSettings() {