From 094aec6946eb77fcaef6af0be7896c426d7e9b54 Mon Sep 17 00:00:00 2001 From: pasynkov Date: Tue, 24 Oct 2017 19:12:40 +0300 Subject: [PATCH] register extension for extension point (for Upsource) (cherry picked from commit 5076526) --- .../openapi/extensions/ExtensionsArea.java | 1 + .../extensions/impl/ExtensionsAreaImpl.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java index 7d8de145001c..54701d419800 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/ExtensionsArea.java @@ -44,6 +44,7 @@ public interface ExtensionsArea { void registerExtensionPoint(@NotNull PluginDescriptor pluginDescriptor, @NotNull Element extensionPointElement); void registerExtension(@NotNull PluginDescriptor pluginDescriptor, @NotNull Element extensionElement, String ns); + void registerExtension(@NotNull final ExtensionPoint extensionPoint, @NotNull final PluginDescriptor pluginDescriptor, @NotNull final Element extensionElement); String getAreaClass(); } diff --git a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java index 929eedf935dc..df2c54b5bd12 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionsAreaImpl.java @@ -155,6 +155,29 @@ public class ExtensionsAreaImpl implements ExtensionsArea { extensionPoint.registerExtensionAdapter(adapter); } + // Used in Upsource + @Override + public void registerExtension(@NotNull final ExtensionPoint extensionPoint, @NotNull final PluginDescriptor pluginDescriptor, @NotNull final Element extensionElement) { + if (!Extensions.isComponentSuitableForOs(extensionElement.getAttributeValue("os"))) { + return; + } + + ExtensionComponentAdapter adapter; + if (extensionPoint.getKind() == ExtensionPoint.Kind.INTERFACE) { + String implClass = extensionElement.getAttributeValue("implementation"); + if (implClass == null) { + throw new RuntimeException("'implementation' attribute not specified for '" + extensionPoint.getName() + "' extension in '" + pluginDescriptor.getPluginId() + .getIdString() + "' plugin"); + } + adapter = new ExtensionComponentAdapter(implClass, extensionElement, myPicoContainer, pluginDescriptor, shouldDeserializeInstance(extensionElement)); + } + else { + adapter = new ExtensionComponentAdapter(extensionPoint.getClassName(), extensionElement, myPicoContainer, pluginDescriptor, true); + } + myPicoContainer.registerComponent(adapter); + ((ExtensionPointImpl)extensionPoint).registerExtensionAdapter(adapter); + } + private static boolean shouldDeserializeInstance(Element extensionElement) { // has content if (!extensionElement.getContent().isEmpty()) return true;