mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJPL-180572 Remove createSession API and refactor session handling logic
GitOrigin-RevId: e07ee8332fe2f6f0aa90748418c3e54cbce6df75
This commit is contained in:
committed by
intellij-monorepo-bot
parent
91074d9acb
commit
3fa0978993
@@ -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
|
||||
- <init>(com.intellij.openapi.project.Project):V
|
||||
- pf:getEnabledMap():java.util.Map
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
+10
-21
@@ -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<PluginUiModel> view = new ArrayList<>();
|
||||
private final Map<PluginId, PluginEnabledState> 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;
|
||||
|
||||
@@ -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())) {
|
||||
|
||||
+3
-3
@@ -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<PluginUiModel>()
|
||||
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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ interface UiPluginManagerController {
|
||||
fun loadPluginDetails(model: PluginUiModel): PluginUiModel?
|
||||
fun loadPluginReviews(pluginId: PluginId, page: Int): List<PluginReviewComment>?
|
||||
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)
|
||||
|
||||
-4
@@ -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)
|
||||
}
|
||||
|
||||
-6
@@ -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<BackendRpcCoroutineContext>().coroutineScope.launch {
|
||||
PluginManagerApi.getInstance().closeSession(sessionId)
|
||||
|
||||
-1
@@ -41,7 +41,6 @@ interface PluginManagerApi : RemoteApi<Unit> {
|
||||
suspend fun getAllPluginsTags(): Set<String>
|
||||
suspend fun getAllVendors(): Set<String>
|
||||
suspend fun updateDescriptorsForInstalledPlugins()
|
||||
suspend fun createSession(sessionId: String)
|
||||
suspend fun closeSession(sessionId: String)
|
||||
suspend fun setEnabledState(sessionId: String, pluginIds: List<PluginId>, enable: Boolean)
|
||||
suspend fun enablePlugins(sessionId: String, ids: List<PluginId>, bool: Boolean, id: ProjectId?): SetEnabledStateResult
|
||||
|
||||
Reference in New Issue
Block a user