IJPL-218412 ModifiableRootModel.setSdk throws IllegalStateException if SDK id doesn't exist in the list of SDKs

GitOrigin-RevId: e0127f45b5b28928b41c3746a4d6536a9ad3ca32
This commit is contained in:
Liudmila Kornilova
2025-11-13 20:09:56 +00:00
committed by intellij-monorepo-bot
parent e99ab1cec5
commit 7d2c397439
2 changed files with 21 additions and 2 deletions
@@ -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<String> panel = detectMissingSdks();
assertThat(panel).hasSize(1).first().asString().startsWith("SdkFixInfo:SdkFixInfo {MissingSdkInfo(mySdkName=" + jdkNotInJdkTable.getName());
}
};
}
public void testValidProjectSdk() {
new SdkTestCases() {
{
@@ -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)
}