From 7d2c397439b10773b5a7809ca486ab2af86be45b Mon Sep 17 00:00:00 2001 From: Liudmila Kornilova Date: Thu, 13 Nov 2025 19:33:08 +0100 Subject: [PATCH] IJPL-218412 ModifiableRootModel.setSdk throws IllegalStateException if SDK id doesn't exist in the list of SDKs GitOrigin-RevId: e0127f45b5b28928b41c3746a4d6536a9ad3ca32 --- .../daemon/impl/UnknownSdkTrackerTest.java | 18 ++++++++++++++++++ .../roots/ModifiableRootModelBridgeImpl.kt | 5 +++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/UnknownSdkTrackerTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/UnknownSdkTrackerTest.java index 9160b24fa472..fe74ba144b58 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/UnknownSdkTrackerTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/impl/UnknownSdkTrackerTest.java @@ -179,6 +179,7 @@ public class UnknownSdkTrackerTest extends JavaCodeInsightFixtureTestCase { private class SdkTestCases { final Sdk broken = ProjectJdkTable.getInstance().createSdk("broken-sdk-123", JavaSdk.getInstance()); + final Sdk jdkNotInJdkTable = ProjectJdkTable.getInstance().createSdk("not-in-jdk-table-123", JavaSdk.getInstance()); final Sdk valid = IdeaTestUtil.getMockJdk18(); private SdkTestCases() { @@ -211,6 +212,23 @@ public class UnknownSdkTrackerTest extends JavaCodeInsightFixtureTestCase { }; } + public void testMissingModuleSdk() { + new SdkTestCases() { + { + WriteAction.run(() -> { + ModifiableRootModel m = ModuleRootManager.getInstance(getModule()).getModifiableModel(); + m.setSdk(jdkNotInJdkTable); + m.commit(); + + ProjectRootManager.getInstance(getProject()).setProjectSdk(valid); + }); + + final List panel = detectMissingSdks(); + assertThat(panel).hasSize(1).first().asString().startsWith("SdkFixInfo:SdkFixInfo {MissingSdkInfo(mySdkName=" + jdkNotInJdkTable.getName()); + } + }; + } + public void testValidProjectSdk() { new SdkTestCases() { { diff --git a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModifiableRootModelBridgeImpl.kt b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModifiableRootModelBridgeImpl.kt index dfb4e8ba79f4..178769d84727 100644 --- a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModifiableRootModelBridgeImpl.kt +++ b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/roots/ModifiableRootModelBridgeImpl.kt @@ -10,6 +10,7 @@ import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.* +import com.intellij.openapi.roots.DependencyScope import com.intellij.openapi.roots.impl.ModuleOrderEnumerator import com.intellij.openapi.roots.impl.RootConfigurationAccessor import com.intellij.openapi.roots.impl.RootModelBase.CollectDependentModules @@ -24,7 +25,6 @@ import com.intellij.platform.workspace.jps.CustomModuleEntitySource import com.intellij.platform.workspace.jps.JpsFileDependentEntitySource import com.intellij.platform.workspace.jps.JpsFileEntitySource import com.intellij.platform.workspace.jps.entities.* -import com.intellij.platform.workspace.jps.entities.DependencyScope as EntitiesDependencyScope import com.intellij.platform.workspace.jps.serialization.impl.LibraryNameGenerator import com.intellij.platform.workspace.storage.CachedValue import com.intellij.platform.workspace.storage.EntitySource @@ -46,6 +46,7 @@ import org.jdom.Element import org.jetbrains.jps.model.module.JpsModuleSourceRoot import org.jetbrains.jps.model.module.JpsModuleSourceRootType import java.util.concurrent.ConcurrentHashMap +import com.intellij.platform.workspace.jps.entities.DependencyScope as EntitiesDependencyScope internal class ModifiableRootModelBridgeImpl( diff: MutableEntityStorage, @@ -610,7 +611,7 @@ internal class ModifiableRootModelBridgeImpl( } else { if (ModifiableRootModelBridge.findSdk(project, jdk.name, jdk.sdkType.name) == null) { - error("setSdk: sdk '${jdk.name}' type '${jdk.sdkType.name}' is not registered in ProjectJdkTable") + LOG.info("setSdk: sdk '${jdk.name}' type '${jdk.sdkType.name}' is not registered in ProjectJdkTable") } setInvalidSdk(jdk.name, jdk.sdkType.name) }