From 8488dea93a9d9dd81ccbb4308c5d0ff058f6f42c Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Mon, 1 Sep 2014 15:01:54 +0400 Subject: [PATCH] Settings: allow to make a group from any configurable. --- .../options/ex/ConfigurableWrapper.java | 19 +++++++++++--- .../options/ex/MixedConfigurableGroup.java | 25 +++++++++++-------- .../src/META-INF/VcsExtensions.xml | 2 +- 3 files changed, 32 insertions(+), 14 deletions(-) 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 3b67a3478368..dc0e80fe17c8 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 @@ -55,9 +55,11 @@ public class ConfigurableWrapper implements SearchableConfigurable { return null; // it is allowed to return null from provider } } - return ep.children != null || ep.childrenEPName != null || ep.dynamic - ? (T)new CompositeWrapper(ep, configurable) - : (T)new ConfigurableWrapper(ep, configurable); + return !ep.dynamic && ep.children == null && ep.childrenEPName == null + ? (T)new ConfigurableWrapper(ep, configurable) + : "itself".equals(ep.groupId) + ? (T)new GroupWrapper(ep, configurable) + : (T)new CompositeWrapper(ep, configurable); } else { return ep.createConfigurable(); @@ -231,4 +233,15 @@ public class ConfigurableWrapper implements SearchableConfigurable { return this; } } + + private static final class GroupWrapper extends CompositeWrapper implements ConfigurableGroup { + private GroupWrapper(@NotNull ConfigurableEP ep, @Nullable UnnamedConfigurable configurable, Configurable... kids) { + super(ep, configurable, kids); + } + + @Override + public String getShortName() { + return getDisplayName(); + } + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java index e3404ec017cd..e9d369edbc59 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java @@ -102,17 +102,23 @@ public final class MixedConfigurableGroup implements SearchableConfigurable, Con } public static ConfigurableGroup[] getGroups(Configurable... configurables) { + ArrayList groups = new ArrayList(); HashMap> map = new HashMap>(); for (Configurable configurable : configurables) { - String groupId = null; - if (configurable instanceof ConfigurableWrapper) { - groupId = ((ConfigurableWrapper)configurable).getExtensionPoint().groupId; + if (configurable instanceof ConfigurableGroup) { + groups.add((ConfigurableGroup)configurable); } - ArrayList list = map.get(groupId); - if (list == null) { - map.put(groupId, list = new ArrayList()); + else { + String groupId = null; + if (configurable instanceof ConfigurableWrapper) { + groupId = ((ConfigurableWrapper)configurable).getExtensionPoint().groupId; + } + ArrayList list = map.get(groupId); + if (list == null) { + map.put(groupId, list = new ArrayList()); + } + list.add(configurable); } - list.add(configurable); } ArrayList buildList = map.get("build"); if (buildList != null) { @@ -124,9 +130,8 @@ public final class MixedConfigurableGroup implements SearchableConfigurable, Con buildList.add(0, buildTools); } } - ArrayList groups = new ArrayList(map.size()); - groups.add(new MixedConfigurableGroup("appearance", map)); - groups.add(new MixedConfigurableGroup("editor", map)); + groups.add(0, new MixedConfigurableGroup("appearance", map)); + groups.add(1, new MixedConfigurableGroup("editor", map)); groups.add(new MixedConfigurableGroup("project", map)); groups.add(new MixedConfigurableGroup("build", map)); groups.add(new MixedConfigurableGroup("language", map)); diff --git a/platform/platform-resources/src/META-INF/VcsExtensions.xml b/platform/platform-resources/src/META-INF/VcsExtensions.xml index 2322381c3b89..9aa86cfb9a01 100644 --- a/platform/platform-resources/src/META-INF/VcsExtensions.xml +++ b/platform/platform-resources/src/META-INF/VcsExtensions.xml @@ -25,7 +25,7 @@ - +