mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
settings-sync: fix enabling/disabling of dynamic plugins: IDEA-301159
Use correct API. The previously used API only updates the disabled_plugins.txt which is processed only after restart, which is fine for non-dynamic plugins, but not for dynamic ones. GitOrigin-RevId: 2355b742eb0bccd1bc0953aa9451f9600b90c61a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
123f7ba7ce
commit
3ff68f6493
+5
-4
@@ -1,6 +1,7 @@
|
||||
package com.intellij.settingsSync.plugins
|
||||
|
||||
import com.intellij.ide.plugins.DisabledPluginsState
|
||||
import com.intellij.ide.plugins.PluginEnabler
|
||||
import com.intellij.ide.plugins.PluginManagerCore
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.extensions.PluginId
|
||||
@@ -10,12 +11,12 @@ class CorePluginManagerProxy : PluginManagerProxy {
|
||||
|
||||
override fun getPlugins() = PluginManagerCore.getPlugins()
|
||||
|
||||
override fun enablePlugin(pluginId: PluginId) {
|
||||
PluginManagerCore.enablePlugin(pluginId)
|
||||
override fun enablePlugins(plugins: Set<PluginId>) {
|
||||
PluginEnabler.getInstance().enableById(plugins)
|
||||
}
|
||||
|
||||
override fun disablePlugin(pluginId: PluginId) {
|
||||
PluginManagerCore.disablePlugin(pluginId)
|
||||
override fun disablePlugins(plugins: Set<PluginId>) {
|
||||
PluginEnabler.getInstance().disableById(plugins)
|
||||
}
|
||||
|
||||
override fun addDisablePluginListener(disabledListener: Runnable, parentDisposable: Disposable) {
|
||||
|
||||
@@ -11,8 +11,8 @@ interface PluginManagerProxy {
|
||||
}
|
||||
|
||||
fun getPlugins(): Array<IdeaPluginDescriptor>
|
||||
fun enablePlugin(pluginId: PluginId)
|
||||
fun disablePlugin(pluginId: PluginId)
|
||||
fun enablePlugins(plugins: Set<PluginId>)
|
||||
fun disablePlugins(plugins: Set<PluginId>)
|
||||
fun findPlugin(pluginId: PluginId): IdeaPluginDescriptor?
|
||||
|
||||
fun createInstaller(): SettingsSyncPluginInstaller
|
||||
|
||||
+11
-8
@@ -6,6 +6,7 @@ import com.intellij.ide.plugins.PluginStateListener
|
||||
import com.intellij.ide.plugins.PluginStateManager
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.runInEdt
|
||||
import com.intellij.openapi.components.*
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.openapi.extensions.PluginId
|
||||
@@ -88,8 +89,8 @@ internal class SettingsSyncPluginManager : PersistentStateComponent<SettingsSync
|
||||
val pluginManagerProxy = PluginManagerProxy.getInstance()
|
||||
val installer = pluginManagerProxy.createInstaller()
|
||||
|
||||
val pluginsToDisable = mutableListOf<PluginId>()
|
||||
val pluginsToEnable = mutableListOf<PluginId>()
|
||||
val pluginsToDisable = mutableSetOf<PluginId>()
|
||||
val pluginsToEnable = mutableSetOf<PluginId>()
|
||||
val pluginsToInstall = mutableListOf<PluginId>()
|
||||
|
||||
synchronized(LOCK) {
|
||||
@@ -118,14 +119,16 @@ internal class SettingsSyncPluginManager : PersistentStateComponent<SettingsSync
|
||||
}
|
||||
}
|
||||
|
||||
LOG.info("Enabling plugins: $pluginsToEnable")
|
||||
for (plugin in pluginsToEnable) {
|
||||
pluginManagerProxy.enablePlugin(plugin)
|
||||
runInEdt {
|
||||
LOG.info("Enabling plugins: $pluginsToEnable")
|
||||
pluginManagerProxy.enablePlugins(pluginsToEnable)
|
||||
}
|
||||
LOG.info("Disabling plugins: $pluginsToDisable")
|
||||
for (plugin in pluginsToDisable) {
|
||||
pluginManagerProxy.disablePlugin(plugin)
|
||||
|
||||
runInEdt {
|
||||
LOG.info("Disabling plugins: $pluginsToDisable")
|
||||
pluginManagerProxy.disablePlugins(pluginsToDisable)
|
||||
}
|
||||
|
||||
LOG.info("Installing plugins: $pluginsToInstall")
|
||||
installer.installPlugins(pluginsToInstall)
|
||||
}
|
||||
|
||||
+3
-4
@@ -134,7 +134,7 @@ class SettingsSyncPluginManagerTest : LightPlatformTestCase() {
|
||||
"QuickJump",
|
||||
listOf(TestPluginDependency("com.intellij.modules.platform", false))
|
||||
)
|
||||
testPluginManager.addPluginDescriptor(pluginManager, descriptor)
|
||||
testPluginManager.addPluginDescriptors(pluginManager, descriptor)
|
||||
TestCase.assertTrue(descriptor.isEnabled)
|
||||
loadPluginManagerState(incomingPluginData)
|
||||
pluginManager.pushChangesToIde()
|
||||
@@ -151,7 +151,7 @@ class SettingsSyncPluginManagerTest : LightPlatformTestCase() {
|
||||
"QuickJump",
|
||||
listOf(TestPluginDependency("com.intellij.modules.platform", false))
|
||||
)
|
||||
testPluginManager.addPluginDescriptor(pluginManager, descriptor)
|
||||
testPluginManager.addPluginDescriptors(pluginManager, descriptor)
|
||||
assertSerializedStateEquals(
|
||||
"""
|
||||
<component>
|
||||
@@ -183,8 +183,7 @@ class SettingsSyncPluginManagerTest : LightPlatformTestCase() {
|
||||
"codeflections.typengo",
|
||||
listOf(TestPluginDependency("com.intellij.modules.platform", false))
|
||||
)
|
||||
testPluginManager.addPluginDescriptor(pluginManager, quickJump)
|
||||
testPluginManager.addPluginDescriptor(pluginManager, typengo)
|
||||
testPluginManager.addPluginDescriptors(pluginManager, quickJump, typengo)
|
||||
|
||||
loadPluginManagerState(incomingPluginData)
|
||||
pluginManager.state.plugins["codeflections.typengo"] = SettingsSyncPluginManager.PluginData().apply {
|
||||
|
||||
@@ -13,27 +13,31 @@ import java.util.concurrent.CopyOnWriteArrayList
|
||||
internal class TestPluginManager : PluginManagerProxy {
|
||||
val installer = TestPluginInstaller()
|
||||
private val ownPluginDescriptors = HashMap<PluginId, IdeaPluginDescriptor>()
|
||||
private val disabledPluginListeners = CopyOnWriteArrayList<Runnable>()
|
||||
private val pluginEnabledStateListeners = CopyOnWriteArrayList<Runnable>()
|
||||
|
||||
override fun getPlugins(): Array<IdeaPluginDescriptor> {
|
||||
val descriptors = arrayListOf<IdeaPluginDescriptor>()
|
||||
descriptors.addAll(PluginManagerCore.getPlugins())
|
||||
descriptors.addAll(ownPluginDescriptors.values)
|
||||
return descriptors.toTypedArray()
|
||||
return ownPluginDescriptors.values.toTypedArray()
|
||||
}
|
||||
|
||||
override fun enablePlugin(pluginId: PluginId) {
|
||||
val descriptor = findPlugin(pluginId)
|
||||
assert(descriptor is TestPluginDescriptor)
|
||||
descriptor?.isEnabled = true
|
||||
override fun enablePlugins(plugins: Set<PluginId>) {
|
||||
for (plugin in plugins) {
|
||||
val descriptor = findPlugin(plugin)
|
||||
assert(descriptor is TestPluginDescriptor)
|
||||
descriptor?.isEnabled = true
|
||||
}
|
||||
for (pluginListener in pluginEnabledStateListeners) {
|
||||
pluginListener.run()
|
||||
}
|
||||
}
|
||||
|
||||
override fun disablePlugin(pluginId: PluginId) {
|
||||
val descriptor = findPlugin(pluginId)
|
||||
assert(descriptor is TestPluginDescriptor)
|
||||
descriptor?.isEnabled = false
|
||||
for (disabledPluginListener in disabledPluginListeners) {
|
||||
disabledPluginListener.run()
|
||||
override fun disablePlugins(plugins: Set<PluginId>) {
|
||||
for (plugin in plugins) {
|
||||
val descriptor = findPlugin(plugin)
|
||||
assert(descriptor is TestPluginDescriptor)
|
||||
descriptor?.isEnabled = false
|
||||
}
|
||||
for (pluginListener in pluginEnabledStateListeners) {
|
||||
pluginListener.run()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,9 +46,9 @@ internal class TestPluginManager : PluginManagerProxy {
|
||||
}
|
||||
|
||||
override fun addDisablePluginListener(disabledListener: Runnable, parentDisposable: Disposable) {
|
||||
disabledPluginListeners.add(disabledListener)
|
||||
pluginEnabledStateListeners.add(disabledListener)
|
||||
Disposer.register(parentDisposable, Disposable {
|
||||
disabledPluginListeners.remove(disabledListener)
|
||||
pluginEnabledStateListeners.remove(disabledListener)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -59,8 +63,18 @@ internal class TestPluginManager : PluginManagerProxy {
|
||||
return installer
|
||||
}
|
||||
|
||||
fun addPluginDescriptor(pluginManager: SettingsSyncPluginManager, descriptor: IdeaPluginDescriptor) {
|
||||
ownPluginDescriptors[descriptor.pluginId] = descriptor
|
||||
pluginManager.getPluginStateListener().install(descriptor)
|
||||
fun addPluginDescriptors(pluginManager: SettingsSyncPluginManager, vararg descriptors: IdeaPluginDescriptor) {
|
||||
for (descriptor in descriptors) {
|
||||
ownPluginDescriptors[descriptor.pluginId] = descriptor
|
||||
pluginManager.getPluginStateListener().install(descriptor)
|
||||
}
|
||||
}
|
||||
|
||||
fun disablePlugin(pluginId: PluginId) {
|
||||
disablePlugins(setOf(pluginId))
|
||||
}
|
||||
|
||||
fun enablePlugin(pluginId: PluginId) {
|
||||
enablePlugins(setOf(pluginId))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user