diff --git a/platform/platform-impl/api-dump-unreviewed.txt b/platform/platform-impl/api-dump-unreviewed.txt index 8058205c5312..342af439b414 100644 --- a/platform/platform-impl/api-dump-unreviewed.txt +++ b/platform/platform-impl/api-dump-unreviewed.txt @@ -3195,7 +3195,6 @@ f:com.intellij.ide.plugins.InstalledPluginsState - wasUpdated(com.intellij.openapi.extensions.PluginId):Z - wasUpdatedWithRestart(com.intellij.openapi.extensions.PluginId):Z c:com.intellij.ide.plugins.InstalledPluginsTableModel -- pf:sessionId:java.util.UUID - pf:view:java.util.List - (com.intellij.openapi.project.Project):V - pf:getEnabledMap():java.util.Map diff --git a/platform/platform-impl/api-dump.txt b/platform/platform-impl/api-dump.txt index c13f55f52944..03f66942697f 100644 --- a/platform/platform-impl/api-dump.txt +++ b/platform/platform-impl/api-dump.txt @@ -229,6 +229,8 @@ f:com.intellij.ide.plugins.DependencyInformation - hashCode():I f:com.intellij.ide.plugins.InstalledPluginsState - getInstalledWithoutRestartPlugins():java.util.Collection +c:com.intellij.ide.plugins.InstalledPluginsTableModel +- pf:mySessionId:java.util.UUID com.intellij.ide.plugins.PluginEnableStateChangedListener - a:stateChanged(java.util.Collection,Z):V f:com.intellij.ide.plugins.PluginInstallCallbackData diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/InstallFromDiskAction.java b/platform/platform-impl/src/com/intellij/ide/plugins/InstallFromDiskAction.java index 9015578fa68d..ee6288992eed 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/InstallFromDiskAction.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/InstallFromDiskAction.java @@ -3,6 +3,8 @@ package com.intellij.ide.plugins; import com.intellij.icons.AllIcons; import com.intellij.ide.IdeBundle; +import com.intellij.ide.plugins.marketplace.InitSessionResult; +import com.intellij.ide.plugins.newui.DefaultUiPluginManagerController; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -24,30 +26,33 @@ import javax.swing.*; import java.nio.file.Path; import java.util.Locale; import java.util.Set; +import java.util.UUID; import java.util.function.Consumer; @ApiStatus.Internal public class InstallFromDiskAction extends DumbAwareAction { private static final String PLUGINS_PRESELECTION_PATH = "plugins.preselection.path"; - private final @NotNull InstalledPluginsTableModel myTableModel; + private InstalledPluginsTableModel myTableModel; private final @NotNull PluginEnabler myPluginEnabler; private final @Nullable JComponent myParentComponent; @SuppressWarnings({"unused", "ActionPresentationInstantiatedInCtor"}) // called reflectively InstallFromDiskAction() { - this(new InstalledPluginsTableModel(null), PluginEnabler.HEADLESS, null); + this(null, PluginEnabler.HEADLESS, null); } @SuppressWarnings("ActionPresentationInstantiatedInCtor") protected InstallFromDiskAction( - @NotNull InstalledPluginsTableModel tableModel, + @Nullable InstalledPluginsTableModel tableModel, @NotNull PluginEnabler pluginEnabler, @Nullable JComponent parentComponent ) { super(IdeBundle.messagePointer("action.InstallFromDiskAction.text"), AllIcons.Nodes.Plugin); - myTableModel = tableModel; + if (tableModel != null) { + myTableModel = tableModel; + } myPluginEnabler = pluginEnabler; myParentComponent = parentComponent; } @@ -70,7 +75,11 @@ public class InstallFromDiskAction extends DumbAwareAction { public void actionPerformed(@NotNull AnActionEvent e) { var project = e.getProject(); var file = e.getData(CommonDataKeys.VIRTUAL_FILE); - installPluginFromDisk(file, project, myTableModel, myPluginEnabler, myParentComponent, callbackData -> { + var sessionId = UUID.randomUUID(); + //As backend and frontend have their own actions, we don't need a combined state and can use the local one. + InitSessionResult initSessionResult = DefaultUiPluginManagerController.INSTANCE.initSession(sessionId.toString()); + var tableModel = myTableModel == null ? new InstalledPluginsTableModel(null, initSessionResult, sessionId) : myTableModel; + installPluginFromDisk(file, project, tableModel, myPluginEnabler, myParentComponent, callbackData -> { onPluginInstalledFromDisk(callbackData, project); }); } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java index 851e2260a8b6..6519c0fecd3b 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsTableModel.java @@ -2,8 +2,6 @@ package com.intellij.ide.plugins; import com.intellij.ide.plugins.marketplace.InitSessionResult; -import com.intellij.ide.plugins.newui.PluginManagerSession; -import com.intellij.ide.plugins.newui.PluginManagerSessionService; import com.intellij.ide.plugins.newui.PluginUiModel; import com.intellij.ide.plugins.newui.UiPluginManager; import com.intellij.openapi.application.ex.ApplicationManagerEx; @@ -26,15 +24,19 @@ public class InstalledPluginsTableModel { protected final List view = new ArrayList<>(); private final Map myEnabled = new HashMap<>(); private final @Nullable Project myProject; - protected final UUID mySessionId = UUID.randomUUID(); - @ApiStatus.Internal - protected final PluginManagerSession mySession = initializeAndGetSession(); + protected final UUID mySessionId; public InstalledPluginsTableModel(@Nullable Project project) { + this(project, null, UUID.randomUUID()); + } + + @ApiStatus.Internal + public InstalledPluginsTableModel(@Nullable Project project, @Nullable InitSessionResult initSessionResult, UUID sessionId) { myProject = project; - InitSessionResult initSessionResult = UiPluginManager.getInstance().initSession(mySessionId); - view.addAll(initSessionResult.getVisiblePluginsList()); - initSessionResult.getPluginStates().forEach((pluginId, pluginState) -> { + mySessionId = sessionId; + InitSessionResult session = initSessionResult == null ? UiPluginManager.getInstance().initSession(mySessionId) : initSessionResult; + view.addAll(session.getVisiblePluginsList()); + session.getPluginStates().forEach((pluginId, pluginState) -> { myEnabled.put(pluginId, pluginState != null ? (pluginState ? PluginEnabledState.ENABLED : PluginEnabledState.DISABLED) : null); }); } @@ -47,19 +49,6 @@ public class InstalledPluginsTableModel { return isLoaded(pluginId, getEnabledMap()); } - private PluginManagerSession initializeAndGetSession() { - UiPluginManager.getInstance().createSession(mySessionId); - PluginManagerSession session = PluginManagerSessionService.getInstance().getSession(mySessionId); - if (session == null) { - // Temporary code, until not all code is split. Will be removed soon - // To avoid cases when some methoods are already on the backend and others are still trying to get some state from the backend - // Just an empty session to avoid NPE - // Should not affect any functionality, when registry option is disabled. - return PluginManagerSessionService.getInstance().createSession(mySessionId.toString()); - } - return session; - } - private void setEnabled(@NotNull PluginUiModel ideaPluginDescriptor) { PluginId pluginId = ideaPluginDescriptor.getPluginId(); PluginEnabledState enabled = ideaPluginDescriptor.isEnabled() ? PluginEnabledState.ENABLED : PluginEnabledState.DISABLED; diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java index a1c430edddcb..2c75a5f71ff5 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java @@ -9,6 +9,8 @@ import com.intellij.ide.plugins.marketplace.MarketplacePluginDownloadService; import com.intellij.ide.plugins.marketplace.PluginSignatureChecker; import com.intellij.ide.plugins.marketplace.statistics.PluginManagerUsageCollector; import com.intellij.ide.plugins.marketplace.statistics.enums.InstallationSourceEnum; +import com.intellij.ide.plugins.newui.PluginManagerSession; +import com.intellij.ide.plugins.newui.PluginManagerSessionService; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.application.ex.ApplicationInfoEx; @@ -354,6 +356,12 @@ public final class PluginInstaller { PluginManagerMain.suggestToEnableInstalledDependantPlugins(pluginEnabler, installedPlugins); + if (!isRestartRequired) { + PluginManagerSession session = PluginManagerSessionService.getInstance().getSession(model.mySessionId.toString()); + if (session != null) { + session.getDynamicPluginsToInstall().put(pluginDescriptor.getPluginId(), new PendingDynamicPluginInstall(file, pluginDescriptor)); + } + } callback.accept(new PluginInstallCallbackData(file, pluginDescriptor, isRestartRequired)); for (var callbackData : installedDependencies) { if (!callbackData.getPluginDescriptor().getPluginId().equals(pluginDescriptor.getPluginId())) { diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt index 001eb01901d1..1ec3d117a531 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/DefaultUiPluginManagerController.kt @@ -54,7 +54,7 @@ object DefaultUiPluginManagerController : UiPluginManagerController { } override fun initSession(sessionId: String): InitSessionResult { - val session = findSession(sessionId) ?: return InitSessionResult(emptyList(), emptyMap()) + val session = createSession(sessionId) val applicationInfo = ApplicationInfo.getInstance() val visiblePlugins = mutableListOf() for (plugin in getInstalledAndPendingPlugins()) { @@ -124,8 +124,8 @@ object DefaultUiPluginManagerController : UiPluginManagerController { } } - override fun createSession(sessionId: String) { - PluginManagerSessionService.getInstance().createSession(sessionId) + fun createSession(sessionId: String): PluginManagerSession { + return PluginManagerSessionService.getInstance().createSession(sessionId) } override fun closeSession(sessionId: String) { diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/MyPluginModel.java b/platform/platform-impl/src/com/intellij/ide/plugins/newui/MyPluginModel.java index 544376f7921b..e5ab5b51cfc1 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/MyPluginModel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/MyPluginModel.java @@ -159,11 +159,6 @@ public class MyPluginModel extends InstalledPluginsTableModel implements PluginE IdeaPluginDescriptor descriptor = callbackData.getPluginDescriptor(); CheckErrorsResult errors = UiPluginManager.getInstance().getErrors(mySessionId.toString(), descriptor.getPluginId()); appendOrUpdateDescriptor(new PluginUiModelAdapter(descriptor), callbackData.getRestartNeeded(), getErrors(errors)); - if (!callbackData.getRestartNeeded() && callbackData.getFile() != null && descriptor instanceof IdeaPluginDescriptorImpl) { - mySession.getDynamicPluginsToInstall().put(descriptor.getPluginId(), - new PendingDynamicPluginInstall(callbackData.getFile(), - (IdeaPluginDescriptorImpl)descriptor)); - } } public void addComponent(@NotNull ListPluginComponent component) { diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt index 9032e0844ab8..d431f3fa2d50 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManager.kt @@ -37,10 +37,6 @@ class UiPluginManager { return getController().getPlugins() } - fun createSession(uuid: UUID) { - getController().createSession(uuid.toString()) - } - fun closeSession(uuid: UUID) { getController().closeSession(uuid.toString()) } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt index d90b12796e01..81bcc80be3be 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/newui/UiPluginManagerController.kt @@ -38,7 +38,6 @@ interface UiPluginManagerController { fun loadPluginDetails(model: PluginUiModel): PluginUiModel? fun loadPluginReviews(pluginId: PluginId, page: Int): List? fun loadPluginMetadata(externalPluginId: String): IntellijPluginMetadata? - fun createSession(sessionId: String) fun closeSession(sessionId: String) fun uninstallDynamicPlugin(parentComponent: JComponent?, sessionId: String, pluginId: PluginId, isUpdate: Boolean): Boolean fun deletePluginFiles(pluginId: PluginId) diff --git a/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt b/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt index 5be8db62f289..c95aa010acc3 100644 --- a/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt +++ b/platform/pluginManager/backend/src/com/intellij/platform/pluginManager/backend/rpc/BackendPluginManagerApi.kt @@ -121,10 +121,6 @@ class BackendPluginManagerApi : PluginManagerApi { DefaultUiPluginManagerController.closeSession(sessionId) } - override suspend fun createSession(sessionId: String) { - DefaultUiPluginManagerController.createSession(sessionId) - } - override suspend fun executeMarketplaceQuery(query: String, count: Int, includeIncompatible: Boolean): PluginSearchResult { return DefaultUiPluginManagerController.executePluginsSearch(query, count, includeIncompatible) } diff --git a/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt b/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt index d6ae404022d1..7170a1aba0ef 100644 --- a/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt +++ b/platform/pluginManager/frontend/src/com/intellij/platform/pluginManager/frontend/BackendUiPluginManagerController.kt @@ -262,12 +262,6 @@ class BackendUiPluginManagerController() : UiPluginManagerController { return awaitForResult { PluginManagerApi.getInstance().isNeedUpdate(pluginId) } } - override fun createSession(sessionId: String) { - awaitForResult { - PluginManagerApi.getInstance().createSession(sessionId) - } - } - override fun closeSession(sessionId: String) { service().coroutineScope.launch { PluginManagerApi.getInstance().closeSession(sessionId) diff --git a/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt b/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt index d2f272f04b54..2ee977dc490f 100644 --- a/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt +++ b/platform/pluginManager/shared/src/com/intellij/platform/pluginManager/shared/rpc/PluginManagerApi.kt @@ -41,7 +41,6 @@ interface PluginManagerApi : RemoteApi { suspend fun getAllPluginsTags(): Set suspend fun getAllVendors(): Set suspend fun updateDescriptorsForInstalledPlugins() - suspend fun createSession(sessionId: String) suspend fun closeSession(sessionId: String) suspend fun setEnabledState(sessionId: String, pluginIds: List, enable: Boolean) suspend fun enablePlugins(sessionId: String, ids: List, bool: Boolean, id: ProjectId?): SetEnabledStateResult