[jdk] Use a workspace model subscription in UnknownSdkStartupChecker

#IJPL-16015 Fixed

GitOrigin-RevId: 384d58434987bc9e7dc6dd2d27316663c175374b
This commit is contained in:
Louis Vignier
2024-04-26 19:56:05 +00:00
committed by intellij-monorepo-bot
parent 3dfdbff173
commit 4a3dcd0b5e
@@ -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<UnknownSdkResolver> {
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) {