From 65b5af76bd18321935058a4243fe9f17f30de50d Mon Sep 17 00:00:00 2001 From: Dmitry Yudin Date: Sat, 15 Jun 2024 23:09:24 +0200 Subject: [PATCH] IJPL-156058 Update JDK handling in warmup activity This update refactors the JdkWarmupProjectActivity class, implementing a better check for existing JDKs. This change optimizes the way the class avoids creating unnecessary JDKs. GitOrigin-RevId: 930a98cc6ed03bbbbbf2f79b5d5d6bfe262ad950 --- .../ide/warmup/JdkWarmupProjectActivity.kt | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/java/java-impl/src/com/intellij/ide/warmup/JdkWarmupProjectActivity.kt b/java/java-impl/src/com/intellij/ide/warmup/JdkWarmupProjectActivity.kt index efb79634b30f..7a46bc8a96e3 100644 --- a/java/java-impl/src/com/intellij/ide/warmup/JdkWarmupProjectActivity.kt +++ b/java/java-impl/src/com/intellij/ide/warmup/JdkWarmupProjectActivity.kt @@ -8,10 +8,10 @@ import com.intellij.openapi.components.serviceAsync import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.ProjectJdkTable +import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil.createUniqueSdkName import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.startup.ProjectActivity import com.intellij.openapi.util.registry.Registry -import java.nio.file.Path internal class JdkWarmupProjectActivity : ProjectActivity { override suspend fun execute(project: Project) { @@ -31,18 +31,14 @@ internal class JdkWarmupProjectActivity : ProjectActivity { return } - val configuredJdkPath = Path.of(configuredJdk) val jdkName = serviceAsync().getEnvironmentValue(JvmEnvironmentKeyProvider.Keys.JDK_NAME, "warmup_jdk") - val jdk = JavaSdk.getInstance().createJdk(jdkName, configuredJdkPath.toString()) - val projectJdkTable = ProjectJdkTable.getInstance() - projectJdkTable.findJdk(jdkName, jdk.sdkType.name).let { - if (it == null) writeAction { - projectJdkTable.addJdk(jdk) - } - else if (it.homePath != jdk.homePath) writeAction { - projectJdkTable.updateJdk(it, jdk) - } + val jdks = ProjectJdkTable.getInstance().allJdks + val compatibleJdk = jdks.filter { it.homePath == configuredJdk }.run { + find { it.name == jdkName } ?: firstOrNull() } + + val jdk = compatibleJdk ?: JavaSdk.getInstance().createJdk(createUniqueSdkName(jdkName, jdks.toList()), configuredJdk) + writeAction { ProjectRootManager.getInstance(project).projectSdk = jdk }