From c6650705f48c9c14a4facde714f4f93e23ab147e Mon Sep 17 00:00:00 2001 From: Alexander Koshevoy Date: Mon, 20 Oct 2025 02:06:17 +0200 Subject: [PATCH] [wsm] IJPL-178632 Separate JpsGlobalModelLoadedListener by environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pass `InternalEnvironmentName` through the JPS global model loaded flow and gate the Ruby `SdkRefresher` listener to `InternalEnvironmentName.Local`, preventing the "This method may be invoked only once per session." exception. The listener now ignores non‑local environments. Applying the logic there is postponed until it's adapted to use the eel context. (cherry picked from commit 9ee29949ed6322d6f08484d9411f70bc5595c90b) IJ-CR-179816 GitOrigin-RevId: 0e0a93fd83f2354c2e67c811f6c7d2993d1a6b49 --- .../impl/jps/serialization/JpsGlobalModelSynchronizerImpl.kt | 4 ++-- .../workspaceModel/ide/JpsGlobalModelLoadedListener.kt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/jps/serialization/JpsGlobalModelSynchronizerImpl.kt b/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/jps/serialization/JpsGlobalModelSynchronizerImpl.kt index b39dd5423060..7435e1e602e1 100644 --- a/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/jps/serialization/JpsGlobalModelSynchronizerImpl.kt +++ b/platform/platform-impl/src/com/intellij/workspaceModel/ide/impl/jps/serialization/JpsGlobalModelSynchronizerImpl.kt @@ -241,7 +241,7 @@ open class JpsGlobalModelSynchronizerImpl(private val coroutineScope: CoroutineS } } // Notify the listeners that synchronization process completed - ApplicationManager.getApplication().messageBus.syncPublisher(JpsGlobalModelLoadedListener.LOADED).loaded() + ApplicationManager.getApplication().messageBus.syncPublisher(JpsGlobalModelLoadedListener.LOADED).loaded(environmentName) } private fun loadGlobalEntitiesToEmptyStorage( @@ -295,7 +295,7 @@ open class JpsGlobalModelSynchronizerImpl(private val coroutineScope: CoroutineS callbacks.forEach { it.invoke() } if (notifyListeners) { // Notify the listeners that synchronization process completed - ApplicationManager.getApplication().messageBus.syncPublisher(JpsGlobalModelLoadedListener.LOADED).loaded() + ApplicationManager.getApplication().messageBus.syncPublisher(JpsGlobalModelLoadedListener.LOADED).loaded(environmentName) } } } diff --git a/platform/projectModel-api/src/com/intellij/workspaceModel/ide/JpsGlobalModelLoadedListener.kt b/platform/projectModel-api/src/com/intellij/workspaceModel/ide/JpsGlobalModelLoadedListener.kt index 5394f3e9ea73..59bbb4b7c5da 100644 --- a/platform/projectModel-api/src/com/intellij/workspaceModel/ide/JpsGlobalModelLoadedListener.kt +++ b/platform/projectModel-api/src/com/intellij/workspaceModel/ide/JpsGlobalModelLoadedListener.kt @@ -1,6 +1,7 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.workspaceModel.ide +import com.intellij.platform.workspace.storage.InternalEnvironmentName import com.intellij.util.messages.Topic import org.jetbrains.annotations.ApiStatus import java.util.* @@ -8,7 +9,7 @@ import java.util.* @ApiStatus.Internal interface JpsGlobalModelLoadedListener : EventListener { /** This method will be executed right after JPS global model loading e.g., SDK or global libraries */ - fun loaded() + fun loaded(environmentName: InternalEnvironmentName) companion object { @Topic.AppLevel