From 3ec3f15f9258bc4f0af2fdc560d215bb985b15d8 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 16 Oct 2012 17:28:50 +0400 Subject: [PATCH] IDEA-92949: xml mapping for dynamic child. nested children supported --- .../com/intellij/openapi/options/ConfigurableEP.java | 7 +++++++ .../openapi/options/ex/ConfigurableWrapper.java | 10 +++++----- plugins/copyright/src/META-INF/plugin.xml | 7 ++++++- 3 files changed, 18 insertions(+), 6 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 72880d015536..26d725a9f7bf 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java +++ b/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java @@ -68,6 +68,13 @@ public class ConfigurableEP extends AbstractExten @Attribute("childrenEPName") public String childrenEPName; + /** + * Indicates that configurable has dynamically calculated children. + * {@link com.intellij.openapi.options.Configurable.Composite#getConfigurables()} will be called for such configurables. + */ + @Attribute("dynamic") + public boolean dynamic; + @Attribute("parentId") public String parentId; diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java index f309e7532bd5..cdd01d2ff80a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java @@ -46,7 +46,7 @@ public class ConfigurableWrapper implements SearchableConfigurable { @Nullable public static T wrapConfigurable(ConfigurableEP ep) { if (ep.displayName != null || ep.key != null) { - return (T)(ep.children != null || ep.childrenEPName != null ? new CompositeWrapper(ep) : new ConfigurableWrapper(ep)); + return (T)(ep.children != null || ep.childrenEPName != null || ep.dynamic ? new CompositeWrapper(ep) : new ConfigurableWrapper(ep)); } else { return ep.createConfigurable(); @@ -162,15 +162,15 @@ public class ConfigurableWrapper implements SearchableConfigurable { public CompositeWrapper(ConfigurableEP ep, Configurable... kids) { super(ep); - if (ep.children == null) { - kids = EMPTY_ARRAY; + if (ep.dynamic) { + kids = ((Composite)getConfigurable()).getConfigurables(); } - else { + else if (ep.children != null) { kids = ContainerUtil.mapNotNull(ep.getChildren(), new NullableFunction() { @Override public ConfigurableWrapper fun(ConfigurableEP ep) { - return ep.isAvailable() ? new ConfigurableWrapper(ep) : null; + return ep.isAvailable() ? (ConfigurableWrapper)wrapConfigurable(ep) : null; } }, EMPTY_ARRAY); } diff --git a/plugins/copyright/src/META-INF/plugin.xml b/plugins/copyright/src/META-INF/plugin.xml index 9bd98018d7f6..75e879b8636e 100644 --- a/plugins/copyright/src/META-INF/plugin.xml +++ b/plugins/copyright/src/META-INF/plugin.xml @@ -11,7 +11,12 @@ com.intellij.modules.java - + + + +