From 4a3dcd0b5ee963138c0de3c91c82a4b6c4eca1ef Mon Sep 17 00:00:00 2001 From: Louis Vignier Date: Mon, 22 Apr 2024 17:47:04 +0200 Subject: [PATCH] [jdk] Use a workspace model subscription in UnknownSdkStartupChecker #IJPL-16015 Fixed GitOrigin-RevId: 384d58434987bc9e7dc6dd2d27316663c175374b --- .../impl/UnknownSdkStartupChecker.kt | 41 +++++++------------ 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkStartupChecker.kt b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkStartupChecker.kt index 663317b13e51..7890652a0932 100644 --- a/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkStartupChecker.kt +++ b/platform/lang-impl/src/com/intellij/openapi/projectRoots/impl/UnknownSdkStartupChecker.kt @@ -8,13 +8,12 @@ import com.intellij.openapi.extensions.PluginDescriptor import com.intellij.openapi.progress.blockingContext import com.intellij.openapi.project.Project import com.intellij.openapi.project.ex.ProjectEx -import com.intellij.openapi.projectRoots.ProjectJdkTable -import com.intellij.openapi.projectRoots.Sdk -import com.intellij.openapi.roots.ModuleRootEvent -import com.intellij.openapi.roots.ModuleRootListener import com.intellij.openapi.roots.ex.ProjectRootManagerEx import com.intellij.openapi.roots.ui.configuration.UnknownSdkResolver import com.intellij.openapi.startup.ProjectActivity +import com.intellij.platform.backend.workspace.WorkspaceModel +import com.intellij.platform.workspace.jps.entities.ContentRootEntity +import com.intellij.platform.workspace.jps.entities.SdkEntity private class UnknownSdkStartupChecker : ProjectActivity { init { @@ -24,8 +23,18 @@ private class UnknownSdkStartupChecker : ProjectActivity { } } - override suspend fun execute(project: Project) : Unit = blockingContext { - checkUnknownSdks(project) + override suspend fun execute(project: Project) { + blockingContext { + checkUnknownSdks(project) + } + + WorkspaceModel.getInstance(project).subscribe { _, changes -> + changes.collect { event -> + if (event.getChanges(SdkEntity::class.java).any() || event.getChanges(ContentRootEntity::class.java).any()) { + checkUnknownSdks(project) + } + } + } UnknownSdkResolver.EP_NAME.addExtensionPointListener(object: ExtensionPointListener { override fun extensionAdded(extension: UnknownSdkResolver, pluginDescriptor: PluginDescriptor) { @@ -37,29 +46,9 @@ private class UnknownSdkStartupChecker : ProjectActivity { } }, project) - project.messageBus.connect().subscribe(ModuleRootListener.TOPIC, object: ModuleRootListener { - override fun rootsChanged(event: ModuleRootEvent) { - checkUnknownSdks(event.project) - } - }) - ProjectRootManagerEx.getInstanceEx(project).addProjectJdkListener { checkUnknownSdks(project) } - - project.messageBus.simpleConnect().subscribe(ProjectJdkTable.JDK_TABLE_TOPIC, object : ProjectJdkTable.Listener { - override fun jdkAdded(jdk: Sdk) { - checkUnknownSdks(project) - } - - override fun jdkRemoved(jdk: Sdk) { - checkUnknownSdks(project) - } - - override fun jdkNameChanged(jdk: Sdk, previousName: String) { - checkUnknownSdks(project) - } - }) } private fun checkUnknownSdks(project: Project) {