From 7e86caa1d41721d29cb1abcdb614e9ff0374daf9 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 7 May 2014 15:13:24 +0400 Subject: [PATCH] DOM stubs: exclude some dom extenders from stub building --- plugins/devkit/src/dom/IdeaPlugin.java | 1 - plugins/devkit/src/dom/impl/ExtensionDomExtender.java | 5 +++++ .../testSources/codeInsight/PluginXmlDomStubsTest.java | 3 --- .../src/com/intellij/util/xml/reflect/DomExtenderEP.java | 2 ++ .../src/com/intellij/util/xml/reflect/DomExtender.java | 8 ++++++++ .../com/intellij/util/xml/stubs/DomStubBuilderTest.java | 5 +++++ 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/plugins/devkit/src/dom/IdeaPlugin.java b/plugins/devkit/src/dom/IdeaPlugin.java index f1dae2fab0d1..d1d3c355f93f 100644 --- a/plugins/devkit/src/dom/IdeaPlugin.java +++ b/plugins/devkit/src/dom/IdeaPlugin.java @@ -105,7 +105,6 @@ public interface IdeaPlugin extends DomElement { @NotNull @SubTagList("extensions") - @Stubbed List getExtensions(); Extensions addExtensions(); diff --git a/plugins/devkit/src/dom/impl/ExtensionDomExtender.java b/plugins/devkit/src/dom/impl/ExtensionDomExtender.java index 7fdfdeecc632..f5c83ccb66bc 100644 --- a/plugins/devkit/src/dom/impl/ExtensionDomExtender.java +++ b/plugins/devkit/src/dom/impl/ExtensionDomExtender.java @@ -147,6 +147,11 @@ public class ExtensionDomExtender extends DomExtender { } } + @Override + public boolean supportsStubs() { + return false; + } + private static Set getVisiblePlugins(IdeaPlugin ideaPlugin) { Set result = ContainerUtil.newHashSet(); MultiMap byId = getPluginMap(ideaPlugin.getManager().getProject()); diff --git a/plugins/devkit/testSources/codeInsight/PluginXmlDomStubsTest.java b/plugins/devkit/testSources/codeInsight/PluginXmlDomStubsTest.java index 4326a14aab4f..d30d8aa6a960 100644 --- a/plugins/devkit/testSources/codeInsight/PluginXmlDomStubsTest.java +++ b/plugins/devkit/testSources/codeInsight/PluginXmlDomStubsTest.java @@ -29,9 +29,6 @@ public class PluginXmlDomStubsTest extends DomStubTest { " Element:depends\n" + " Element:module\n" + " Attribute:value:myModule\n" + - " Element:extensions\n" + - " Attribute:xmlns:someNS\n" + - " Attribute:defaultExtensionNs:com.intellij\n" + " Element:extensionPoints\n" + " Element:extensionPoint\n" + " Attribute:name:myEP\n" + diff --git a/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java b/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java index b797fda0ed10..1f12500aef34 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java +++ b/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java @@ -21,6 +21,7 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.project.Project; import com.intellij.util.xml.impl.DomInvocationHandler; import com.intellij.util.xmlb.annotations.Attribute; +import com.intellij.xml.util.XmlUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -53,6 +54,7 @@ public class DomExtenderEP extends AbstractExtensionPointBean { } } if (myDomClass.isAssignableFrom(handler.getRawType())) { + if (!myExtender.supportsStubs() && XmlUtil.isStubBuilding()) return registrar; if (registrar == null) { registrar = new DomExtensionsRegistrarImpl(); } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomExtender.java b/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomExtender.java index 938f564c8c43..3f38901b862b 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomExtender.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomExtender.java @@ -33,4 +33,12 @@ public abstract class DomExtender { * @param registrar a place to register your own DOM children descriptions */ public abstract void registerExtensions(@NotNull T t, @NotNull final DomExtensionsRegistrar registrar); + + /** + * Makes stub building for extensions available. + * To be compatible with general stubs contract, extension should NOT depend on anything beyond current file's content. + */ + public boolean supportsStubs() { + return true; + } } diff --git a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java index c5e3a92b8932..fd42c5dfeafc 100644 --- a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java +++ b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java @@ -106,5 +106,10 @@ public class DomStubBuilderTest extends DomStubTest { public void registerExtensions(@NotNull Bar bar, @NotNull DomExtensionsRegistrar registrar) { registrar.registerAttributeChildExtension(new XmlName("extend"), Custom.class); } + + @Override + public boolean supportsStubs() { + return true; + } } }