From cdbe339f118b940bea819eba60615f2366816dd9 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 21 Sep 2012 13:39:28 +0400 Subject: [PATCH] EditorOptions mapped to XML --- .../options/editor/EditorOptions.java | 28 +-------- .../openapi/options/ConfigurableEP.java | 7 +++ .../options/ex/ConfigurableWrapper.java | 61 ++++++++++++++----- .../src/META-INF/LangExtensions.xml | 24 ++++---- 4 files changed, 67 insertions(+), 53 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptions.java b/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptions.java index 55b16b1ca55d..130a726ac8ff 100644 --- a/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/editor/EditorOptions.java @@ -17,27 +17,16 @@ package com.intellij.application.options.editor; import com.intellij.openapi.application.ApplicationBundle; -import com.intellij.openapi.options.*; -import com.intellij.openapi.options.ex.ConfigurableWrapper; +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.SearchableConfigurable; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import java.util.List; -public class EditorOptions implements SearchableConfigurable.Parent { +public class EditorOptions implements SearchableConfigurable { @NonNls public static final String ID = "preferences.editor"; private EditorOptionsPanel myEditorOptionsPanel; - private Configurable[] myChildren; - - @Override - public Configurable[] getConfigurables() { - if (myChildren == null) { - final List configurables = ConfigurableWrapper.createConfigurables(EditorOptionsProviderEP.EP_NAME); - myChildren = configurables.toArray(new EditorOptionsProvider[configurables.size()]); - } - return myChildren; - } @Override public String getDisplayName() { @@ -60,16 +49,6 @@ public class EditorOptions implements SearchableConfigurable.Parent { return null; } - @Override - public boolean hasOwnContent() { - return true; - } - - @Override - public boolean isVisible() { - return true; - } - @Override public JComponent createComponent() { myEditorOptionsPanel = new EditorOptionsPanel(); @@ -98,6 +77,5 @@ public class EditorOptions implements SearchableConfigurable.Parent { @Override public void disposeUIResources() { myEditorOptionsPanel = null; - } } 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 83793b7ad627..57cbd6139027 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java +++ b/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java @@ -53,6 +53,7 @@ public class ConfigurableEP extends AbstractExten public String getDisplayName() { if (displayName != null) return displayName; + LOG.assertTrue(bundle != null, "Bundle missed for " + this); final ResourceBundle resourceBundle = AbstractBundle.getResourceBundle(bundle, myPluginDescriptor.getPluginClassLoader()); return displayName = CommonBundle.message(resourceBundle, key); } @@ -61,6 +62,12 @@ public class ConfigurableEP extends AbstractExten @AbstractCollection(surroundWithTag = false) public ConfigurableEP[] children; + /** + * Extension point of ConfigurableEP type to calculate children + */ + @Attribute("childrenEPName") + public String childrenEPName; + public ConfigurableEP[] getChildren() { for (ConfigurableEP child : children) { child.myPicoContainer = myPicoContainer; 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 820143d189e7..9f8c0e36dbfb 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 @@ -18,6 +18,7 @@ package com.intellij.openapi.options.ex; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.options.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.NullableFunction; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nls; @@ -31,13 +32,24 @@ import java.util.List; * @author Dmitry Avdeev * Date: 9/17/12 */ -public class ConfigurableWrapper implements SearchableConfigurable, Configurable.Composite { +public class ConfigurableWrapper implements SearchableConfigurable { private static final ConfigurableWrapper[] EMPTY_ARRAY = new ConfigurableWrapper[0]; + private static final NullableFunction,Configurable> CONFIGURABLE_FUNCTION = new NullableFunction, Configurable>() { + @Override + public Configurable fun(ConfigurableEP ep) { + return wrapConfigurable(ep); + } + }; @Nullable public static T wrapConfigurable(ConfigurableEP ep) { - return ep.displayName != null || ep.key != null ? (T)new ConfigurableWrapper(ep) : ep.createConfigurable(); + if (ep.displayName != null || ep.key != null) { + return (T)(ep.children != null || ep.childrenEPName != null ? new CompositeWrapper(ep) : new ConfigurableWrapper(ep)); + } + else { + return ep.createConfigurable(); + } } public static List createConfigurables(ExtensionPointName> name) { @@ -60,17 +72,9 @@ public class ConfigurableWrapper implements SearchableConfigurable, Configurable } private final ConfigurableEP myEp; - private final ConfigurableWrapper[] myKids; public ConfigurableWrapper(ConfigurableEP ep) { myEp = ep; - myKids = ep.children == null ? EMPTY_ARRAY : ContainerUtil.mapNotNull(ep.getChildren(), - new NullableFunction() { - @Override - public ConfigurableWrapper fun(ConfigurableEP ep) { - return ep.isAvailable() ? new ConfigurableWrapper(ep) : null; - } - }, new ConfigurableWrapper[0]); } private UnnamedConfigurable myConfigurable; @@ -124,11 +128,6 @@ public class ConfigurableWrapper implements SearchableConfigurable, Configurable getConfigurable().disposeUIResources(); } - @Override - public Configurable[] getConfigurables() { - return myKids; - } - @NotNull @Override public String getId() { @@ -141,4 +140,36 @@ public class ConfigurableWrapper implements SearchableConfigurable, Configurable final UnnamedConfigurable configurable = getConfigurable(); return configurable instanceof SearchableConfigurable ? ((SearchableConfigurable)configurable).enableSearch(option) : null; } + + private static class CompositeWrapper extends ConfigurableWrapper implements Configurable.Composite { + + private final Configurable[] myKids; + + public CompositeWrapper(ConfigurableEP ep) { + super(ep); + Configurable[] kids; + if (ep.children == null) { + kids = EMPTY_ARRAY; + } + else { + kids = ContainerUtil.mapNotNull(ep.getChildren(), + new NullableFunction() { + @Override + public ConfigurableWrapper fun(ConfigurableEP ep) { + return ep.isAvailable() ? new ConfigurableWrapper(ep) : null; + } + }, EMPTY_ARRAY); + } + if (ep.childrenEPName != null) { + kids = ArrayUtil.mergeArrays(kids, ContainerUtil.mapNotNull(((ConfigurableEP[])Extensions.getExtensions(ep.childrenEPName)), + CONFIGURABLE_FUNCTION, new Configurable[0])); + } + myKids = kids; + } + + @Override + public Configurable[] getConfigurables() { + return myKids; + } + } } diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index f66138aa3f15..c3b3764d3361 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -341,15 +341,11 @@ serviceImplementation="com.intellij.codeInspection.ex.ProjectInspectionProfilesVisibleTreeState"/> - + - - - - @@ -568,18 +564,20 @@ - - + + - - - - - + + + + +