From 8e857ecfccfbb822aeffac1cb995d9e90ff2280f Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 8 Feb 2013 18:11:09 +0400 Subject: [PATCH] IDEA-100729 Allow make 2nd level configurables available for non-default project only --- .../openapi/options/ConfigurableEP.java | 2 ++ .../NonDefaultProjectConfigurable.java | 3 +++ .../ex/ConfigurableExtensionPointUtil.java | 24 ++++++++++--------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java b/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java index 26d725a9f7bf..27aebd2efbf4 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java +++ b/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java @@ -90,6 +90,8 @@ public class ConfigurableEP extends AbstractExten @Attribute("id") public String id; + + /** Marks project level configurables that do not apply to the default project. */ @Attribute("nonDefaultProject") public boolean nonDefaultProject; diff --git a/platform/platform-api/src/com/intellij/openapi/options/NonDefaultProjectConfigurable.java b/platform/platform-api/src/com/intellij/openapi/options/NonDefaultProjectConfigurable.java index 6f491f2e2529..ddf9d13546b5 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/NonDefaultProjectConfigurable.java +++ b/platform/platform-api/src/com/intellij/openapi/options/NonDefaultProjectConfigurable.java @@ -16,10 +16,13 @@ package com.intellij.openapi.options; /** + * @deprecated Please use {@link ConfigurableEP#nonDefaultProject} instead. + * * Marker interface that should be implemented by project level configurables that do not apply * to the default project. * * @author yole */ +@Deprecated public interface NonDefaultProjectConfigurable { } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java index 1dd3d80b45fe..a3f859887f8c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java @@ -42,10 +42,16 @@ public class ConfigurableExtensionPointUtil { final Configurable[] components, @Nullable ConfigurableFilter filter) { final List result = new ArrayList(); - ContainerUtil.addAll(result, components); + for (Configurable component : components) { + if (!isSuppressed(component, filter)) { + result.add(component); + } + } + final Map idToConfigurable = new HashMap(); for (ConfigurableEP ep : extensions) { final Configurable configurable = ConfigurableWrapper.wrapConfigurable(ep); + if (isSuppressed(configurable, filter)) continue; if (configurable instanceof ConfigurableWrapper) { final ConfigurableWrapper wrapper = (ConfigurableWrapper)configurable; idToConfigurable.put(wrapper.getId(), wrapper); @@ -75,19 +81,15 @@ public class ConfigurableExtensionPointUtil { } ContainerUtil.addAll(result, idToConfigurable.values()); - final ListIterator iterator = result.listIterator(); - while (iterator.hasNext()) { - Configurable each = iterator.next(); - if (each instanceof Configurable.Assistant - || each instanceof OptionalConfigurable && !((OptionalConfigurable) each).needDisplay() - || filter != null && !filter.isIncluded(each)) { - iterator.remove(); - } - } - return result; } + private static boolean isSuppressed(Configurable each, ConfigurableFilter filter) { + return each instanceof Configurable.Assistant + || each instanceof OptionalConfigurable && !((OptionalConfigurable) each).needDisplay() + || filter != null && !filter.isIncluded(each); + } + /* private static void dumpConfigurable(ExtensionPointName> configurablesExtensionPoint, ConfigurableEP ep,