mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJPL-233642 wrap deferred listener calls, remember original EP
GitOrigin-RevId: ea43db34b2dc41965283b6d37155523042a88cc3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1aa3bba927
commit
9818fc3698
+13
@@ -0,0 +1,13 @@
|
||||
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.openapi.extensions.impl
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPoint
|
||||
import com.intellij.openapi.util.IntellijInternalApi
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@IntellijInternalApi
|
||||
@ApiStatus.Internal
|
||||
class ExtensionPointDeferredListenersNotification(
|
||||
val ep: ExtensionPointImpl<*>,
|
||||
val notify: Runnable,
|
||||
)
|
||||
@@ -847,7 +847,7 @@ sealed class ExtensionPointImpl<T : Any>(@JvmField val name: String,
|
||||
@Synchronized
|
||||
fun registerExtensions(descriptors: List<ExtensionDescriptor>,
|
||||
pluginDescriptor: PluginDescriptor,
|
||||
listenerCallbacks: MutableList<in Runnable>?) {
|
||||
listenerCallbacks: MutableList<ExtensionPointDeferredListenersNotification>?) {
|
||||
adaptersAreSorted = false
|
||||
|
||||
val oldAdapters = adapters
|
||||
@@ -891,7 +891,9 @@ sealed class ExtensionPointImpl<T : Any>(@JvmField val name: String,
|
||||
break
|
||||
}
|
||||
|
||||
listenerCallbacks.add { notifyListeners(isRemoved = false, adapters = addedAdapters, listeners = listeners) }
|
||||
listenerCallbacks.add(ExtensionPointDeferredListenersNotification(this) {
|
||||
notifyListeners(isRemoved = false, adapters = addedAdapters, listeners = listeners)
|
||||
})
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
|
||||
@@ -133,7 +133,11 @@ class ExtensionsAreaImpl(private val componentManager: ComponentManager) : Exten
|
||||
}
|
||||
}
|
||||
|
||||
fun registerExtensions(extensions: Map<String, List<ExtensionDescriptor>>, pluginDescriptor: PluginDescriptor, listenerCallbacks: MutableList<in Runnable>?) {
|
||||
fun registerExtensions(
|
||||
extensions: Map<String, List<ExtensionDescriptor>>,
|
||||
pluginDescriptor: PluginDescriptor,
|
||||
listenerCallbacks: MutableList<ExtensionPointDeferredListenersNotification>?,
|
||||
) {
|
||||
for ((descriptors, point) in intersectMaps(extensions, nameToPointMap)) {
|
||||
point.registerExtensions(descriptors, pluginDescriptor = pluginDescriptor, listenerCallbacks)
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ import com.intellij.openapi.extensions.ExtensionDescriptor
|
||||
import com.intellij.openapi.extensions.ExtensionPointDescriptor
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.extensions.PluginId
|
||||
import com.intellij.openapi.extensions.impl.ExtensionPointDeferredListenersNotification
|
||||
import com.intellij.openapi.extensions.impl.ExtensionsAreaImpl
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.keymap.impl.BundledKeymapBean
|
||||
@@ -1070,7 +1071,7 @@ object DynamicPlugins {
|
||||
app.messageBus.syncPublisher(DynamicPluginListener.TOPIC).beforePluginLoaded(pluginDescriptor)
|
||||
app.runWriteAction {
|
||||
try {
|
||||
val listenerCallbacks = mutableListOf<Runnable>()
|
||||
val listenerCallbacks = mutableListOf<ExtensionPointDeferredListenersNotification>()
|
||||
|
||||
// 4. load into service container
|
||||
loadModules(modules = pluginWithContentModules, app = app, listenerCallbacks = listenerCallbacks)
|
||||
@@ -1093,7 +1094,9 @@ object DynamicPlugins {
|
||||
|
||||
PluginManagerCore.setPluginSet(pluginSet)
|
||||
|
||||
listenerCallbacks.forEach(Runnable::run)
|
||||
listenerCallbacks.forEach {
|
||||
it.notify.run()
|
||||
}
|
||||
|
||||
DynamicPluginsUsagesCollector.logDescriptorLoad(pluginDescriptor)
|
||||
PluginManagerCore.clearPluginNonLoadReasonFor(pluginDescriptor.pluginId)
|
||||
@@ -1278,7 +1281,11 @@ private fun optionalDependenciesOnPlugin(
|
||||
.toSet()
|
||||
}
|
||||
|
||||
private fun loadModules(modules: List<IdeaPluginDescriptorImpl>, app: ApplicationImpl, listenerCallbacks: MutableList<in Runnable>) {
|
||||
private fun loadModules(
|
||||
modules: List<IdeaPluginDescriptorImpl>,
|
||||
app: ApplicationImpl,
|
||||
listenerCallbacks: MutableList<ExtensionPointDeferredListenersNotification>,
|
||||
) {
|
||||
app.registerComponents(modules = modules, app = app, listenerCallbacks = listenerCallbacks)
|
||||
for (openProject in getOpenedProjects()) {
|
||||
openProject.getComponentManagerImpl().registerComponents(modules = modules, app = app, listenerCallbacks = listenerCallbacks)
|
||||
|
||||
+2
-1
@@ -7,6 +7,7 @@ import com.intellij.ide.plugins.IdeaPluginDescriptorImpl
|
||||
import com.intellij.openapi.application.Application
|
||||
import com.intellij.openapi.components.ServiceDescriptor
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.openapi.extensions.impl.ExtensionPointDeferredListenersNotification
|
||||
import com.intellij.serviceContainer.ComponentManagerImpl
|
||||
import com.intellij.serviceContainer.throwAlreadyDisposedError
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -64,7 +65,7 @@ abstract class ClientAwareComponentManager: ComponentManagerImpl {
|
||||
final override fun registerComponents(
|
||||
modules: List<IdeaPluginDescriptorImpl>,
|
||||
app: Application?,
|
||||
listenerCallbacks: MutableList<in Runnable>?
|
||||
listenerCallbacks: MutableList<ExtensionPointDeferredListenersNotification>?
|
||||
) {
|
||||
super.registerComponents(modules = modules,
|
||||
app = app,
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.intellij.openapi.components.impl.stores.IComponentStore
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.openapi.extensions.impl.ExtensionPointDeferredListenersNotification
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.ProjectManager
|
||||
import com.intellij.openapi.project.impl.ProjectImpl
|
||||
@@ -99,7 +100,7 @@ abstract class ClientSessionImpl(
|
||||
final override fun registerComponents(
|
||||
modules: List<IdeaPluginDescriptorImpl>,
|
||||
app: Application?,
|
||||
listenerCallbacks: MutableList<in Runnable>?
|
||||
listenerCallbacks: MutableList<ExtensionPointDeferredListenersNotification>?
|
||||
) {
|
||||
for (rootModule in modules) {
|
||||
registerServices(getContainerDescriptor(rootModule).services, rootModule)
|
||||
|
||||
+2
-1
@@ -25,6 +25,7 @@ import com.intellij.openapi.components.impl.stores.ComponentStoreOwner
|
||||
import com.intellij.openapi.components.impl.stores.IComponentStore
|
||||
import com.intellij.openapi.diagnostic.*
|
||||
import com.intellij.openapi.extensions.*
|
||||
import com.intellij.openapi.extensions.impl.ExtensionPointDeferredListenersNotification
|
||||
import com.intellij.openapi.extensions.impl.ExtensionPointImpl
|
||||
import com.intellij.openapi.extensions.impl.ExtensionsAreaImpl
|
||||
import com.intellij.openapi.extensions.impl.createExtensionPoints
|
||||
@@ -316,7 +317,7 @@ abstract class ComponentManagerImpl(
|
||||
open fun registerComponents(
|
||||
modules: List<IdeaPluginDescriptorImpl>,
|
||||
app: Application?,
|
||||
listenerCallbacks: MutableList<in Runnable>? = null,
|
||||
listenerCallbacks: MutableList<ExtensionPointDeferredListenersNotification>? = null,
|
||||
) {
|
||||
val activityNamePrefix = activityNamePrefix()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user