mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
extract PicoContainerAwareInterfaceExtensionPoint
This commit is contained in:
+3
-2
@@ -4,6 +4,7 @@ package com.intellij.openapi.extensions.impl;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.*;
|
||||
import com.intellij.openapi.extensions.impl.InterfaceExtensionPoint.PicoContainerAwareInterfaceExtensionPoint;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
@@ -118,7 +119,7 @@ public final class ExtensionsAreaImpl implements ExtensionsArea {
|
||||
point = new BeanExtensionPoint<>(pointName, beanClassName, myPicoContainer, pluginDescriptor);
|
||||
}
|
||||
else {
|
||||
point = new InterfaceExtensionPoint<>(pointName, interfaceClassName, myPicoContainer, pluginDescriptor);
|
||||
point = new PicoContainerAwareInterfaceExtensionPoint<>(pointName, interfaceClassName, myPicoContainer, pluginDescriptor);
|
||||
}
|
||||
registerExtensionPoint(point);
|
||||
}
|
||||
@@ -259,7 +260,7 @@ public final class ExtensionsAreaImpl implements ExtensionsArea {
|
||||
PluginDescriptor pluginDescriptor = new UndefinedPluginDescriptor();
|
||||
ExtensionPointImpl<Object> point;
|
||||
if (kind == ExtensionPoint.Kind.INTERFACE) {
|
||||
point = new InterfaceExtensionPoint<>(extensionPointName, extensionPointBeanClass, myPicoContainer, pluginDescriptor);
|
||||
point = new PicoContainerAwareInterfaceExtensionPoint<>(extensionPointName, extensionPointBeanClass, myPicoContainer, pluginDescriptor);
|
||||
}
|
||||
else {
|
||||
point = new BeanExtensionPoint<>(extensionPointName, extensionPointBeanClass, myPicoContainer, pluginDescriptor);
|
||||
|
||||
+33
-18
@@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.picocontainer.ComponentAdapter;
|
||||
import org.picocontainer.MutablePicoContainer;
|
||||
|
||||
public final class InterfaceExtensionPoint<T> extends ExtensionPointImpl<T> {
|
||||
public class InterfaceExtensionPoint<T> extends ExtensionPointImpl<T> {
|
||||
public InterfaceExtensionPoint(@NotNull String name, @NotNull Class<T> clazz, @NotNull MutablePicoContainer picoContainer) {
|
||||
super(name, clazz.getName(), picoContainer, new UndefinedPluginDescriptor());
|
||||
|
||||
@@ -22,19 +22,6 @@ public final class InterfaceExtensionPoint<T> extends ExtensionPointImpl<T> {
|
||||
super(name, className, picoContainer, pluginDescriptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void reset() {
|
||||
// we don't check myLoadedAdapters because programmatically loaded extensions are not registered in pico container
|
||||
//noinspection NonPrivateFieldAccessedInSynchronizedContext
|
||||
for (ExtensionComponentAdapter adapter : myAdapters) {
|
||||
if (adapter instanceof ComponentAdapter) {
|
||||
myPicoContainer.unregisterComponent(((ComponentAdapter)adapter).getComponentKey());
|
||||
}
|
||||
}
|
||||
|
||||
super.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected ExtensionComponentAdapter createAdapterAndRegisterInPicoContainerIfNeeded(@NotNull Element extensionElement, @NotNull PluginDescriptor pluginDescriptor, @NotNull MutablePicoContainer picoContainer) {
|
||||
@@ -43,10 +30,7 @@ public final class InterfaceExtensionPoint<T> extends ExtensionPointImpl<T> {
|
||||
throw new RuntimeException("'implementation' attribute not specified for '" + getName() + "' extension in '"
|
||||
+ pluginDescriptor.getPluginId() + "' plugin");
|
||||
}
|
||||
ExtensionComponentAdapter adapter = doCreateAdapter(implementationClassName, extensionElement, shouldDeserializeInstance(extensionElement), pluginDescriptor, true);
|
||||
// no need to register bean extension - only InterfaceExtensionPoint registers
|
||||
picoContainer.registerComponent((ComponentAdapter)adapter);
|
||||
return adapter;
|
||||
return doCreateAdapter(implementationClassName, extensionElement, shouldDeserializeInstance(extensionElement), pluginDescriptor, true);
|
||||
}
|
||||
|
||||
private static boolean shouldDeserializeInstance(@NotNull Element extensionElement) {
|
||||
@@ -64,4 +48,35 @@ public final class InterfaceExtensionPoint<T> extends ExtensionPointImpl<T> {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static final class PicoContainerAwareInterfaceExtensionPoint<T> extends InterfaceExtensionPoint<T> {
|
||||
PicoContainerAwareInterfaceExtensionPoint(@NotNull String name,
|
||||
@NotNull String className,
|
||||
@NotNull MutablePicoContainer picoContainer,
|
||||
@NotNull PluginDescriptor pluginDescriptor) {
|
||||
super(name, className, picoContainer, pluginDescriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
protected ExtensionComponentAdapter createAdapterAndRegisterInPicoContainerIfNeeded(@NotNull Element extensionElement,
|
||||
@NotNull PluginDescriptor pluginDescriptor,
|
||||
@NotNull MutablePicoContainer picoContainer) {
|
||||
ExtensionComponentAdapter adapter = super.createAdapterAndRegisterInPicoContainerIfNeeded(extensionElement, pluginDescriptor, picoContainer);
|
||||
picoContainer.registerComponent((ComponentAdapter)adapter);
|
||||
return adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void reset() {
|
||||
//noinspection NonPrivateFieldAccessedInSynchronizedContext
|
||||
for (ExtensionComponentAdapter adapter : myAdapters) {
|
||||
if (adapter instanceof ComponentAdapter) {
|
||||
myPicoContainer.unregisterComponent(((ComponentAdapter)adapter).getComponentKey());
|
||||
}
|
||||
}
|
||||
|
||||
super.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user