diff --git a/java/idea-ui/intellij.java.ui.tests.iml b/java/idea-ui/intellij.java.ui.tests.iml
index 70e9a1b2328b..ba257424d0c8 100644
--- a/java/idea-ui/intellij.java.ui.tests.iml
+++ b/java/idea-ui/intellij.java.ui.tests.iml
@@ -26,5 +26,8 @@
+
+
+
\ No newline at end of file
diff --git a/java/idea-ui/testSrc/com/intellij/ui/ProjectWizardJdkComboBoxTest.kt b/java/idea-ui/testSrc/com/intellij/ui/ProjectWizardJdkComboBoxTest.kt
new file mode 100644
index 000000000000..fadf88387e00
--- /dev/null
+++ b/java/idea-ui/testSrc/com/intellij/ui/ProjectWizardJdkComboBoxTest.kt
@@ -0,0 +1,77 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.ui
+
+import com.intellij.ide.projectWizard.ProjectWizardJdkComboBox
+import com.intellij.ide.projectWizard.ProjectWizardJdkIntent
+import com.intellij.ide.projectWizard.ProjectWizardTestCase
+import com.intellij.openapi.Disposable
+import com.intellij.openapi.application.writeAction
+import com.intellij.openapi.projectRoots.ProjectJdkTable
+import com.intellij.openapi.projectRoots.Sdk
+import com.intellij.openapi.projectRoots.SimpleJavaSdkType
+import com.intellij.openapi.util.Disposer
+import com.intellij.platform.eel.path.EelPath
+import com.intellij.platform.eel.provider.LocalEelDescriptor
+import com.intellij.platform.eel.provider.utils.EelPathUtils
+import com.intellij.platform.testFramework.junit5.eel.fixture.eelFixture
+import com.intellij.testFramework.common.timeoutRunBlocking
+import com.intellij.testFramework.junit5.TestApplication
+import com.intellij.testFramework.junit5.TestDisposable
+import org.junit.jupiter.api.Assertions
+import org.junit.jupiter.api.Test
+import java.nio.file.Files
+import java.nio.file.Path
+
+@TestApplication
+class ProjectWizardJdkComboBoxTest {
+ val eelFixture = eelFixture(EelPath.OS.UNIX)
+
+ @Test
+ fun `changing eel changes available sdks`(@TestDisposable disposable: Disposable): Unit = timeoutRunBlocking {
+ val localSdk = createLocalSdk(disposable)
+ val eelSdk = createEelSdk(disposable)
+
+ val comboBox = ProjectWizardJdkComboBox(null, disposable)
+
+ comboBox.eelChanged(LocalEelDescriptor)
+ Assertions.assertTrue(comboBox.contains(localSdk))
+ Assertions.assertFalse(comboBox.contains(eelSdk))
+
+ comboBox.eelChanged(eelFixture.get().eelDescriptor)
+ Assertions.assertFalse(comboBox.contains(localSdk))
+ Assertions.assertTrue(comboBox.contains(eelSdk))
+ }
+
+
+ suspend fun createSdk(path: Path, name: String, disposable: Disposable): Sdk {
+ val jdkTable = ProjectJdkTable.getInstance()
+ val javaSdkType = SimpleJavaSdkType.getInstance()
+ Disposer.register(disposable) {
+ Files.delete(path)
+ }
+ val sdk = jdkTable.createSdk(name, javaSdkType)
+ val modificator = sdk.sdkModificator
+ modificator.homePath = path.toString()
+ writeAction {
+ modificator.commitChanges()
+ jdkTable.addJdk(sdk, disposable)
+ }
+ return sdk
+ }
+
+ suspend fun createLocalSdk(disposable: Disposable): Sdk {
+ val tempDir = Files.createTempDirectory("test-")
+ return createSdk(tempDir, "local-sdk", disposable)
+ }
+
+ suspend fun createEelSdk(disposable: Disposable): Sdk {
+ val eel = eelFixture.get()
+ val tempDir = EelPathUtils.createTemporaryDirectory(eel.eelApi)
+ return createSdk(tempDir, "eel-sdk", disposable)
+ }
+
+ fun ProjectWizardJdkComboBox.contains(sdk: Sdk): Boolean {
+ return model.items.find { it is ProjectWizardJdkIntent.ExistingJdk && it.jdk == sdk } != null
+ }
+
+}
\ No newline at end of file
diff --git a/platform/eel-provider/src/com/intellij/platform/eel/provider/utils/eelPathUtils.kt b/platform/eel-provider/src/com/intellij/platform/eel/provider/utils/eelPathUtils.kt
index 39f99e153c83..aca7d7f4cc4c 100644
--- a/platform/eel-provider/src/com/intellij/platform/eel/provider/utils/eelPathUtils.kt
+++ b/platform/eel-provider/src/com/intellij/platform/eel/provider/utils/eelPathUtils.kt
@@ -65,11 +65,16 @@ object EelPathUtils {
val projectFilePath = project.projectFilePath ?: return Files.createTempDirectory(prefix)
return runBlockingMaybeCancellable {
val eel = Path.of(projectFilePath).getEelApi()
- val file = eel.fs.createTemporaryDirectory(EelFileSystemApi.CreateTemporaryEntryOptions.Builder().prefix(prefix).build()).getOrThrowFileSystemException()
- eel.mapper.toNioPath(file)
+ createTemporaryDirectory(eel, prefix)
}
}
+ @JvmStatic
+ suspend fun createTemporaryDirectory(eelApi: EelApi, prefix: String = ""): Path {
+ val file = eelApi.fs.createTemporaryDirectory(EelFileSystemApi.CreateTemporaryEntryOptions.Builder().prefix(prefix).build()).getOrThrowFileSystemException()
+ return eelApi.mapper.toNioPath(file)
+ }
+
@JvmStatic
fun renderAsEelPath(path: Path): String {
if (isPathLocal(path)) {