From e40e8e81ec557c65377b42ae06cb8d0171ca6608 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 23 Jul 2014 17:45:24 +0200 Subject: [PATCH] generic debugger settings: merge to support AppCode (all settings on one page) --- .../settings/JavaDebuggerSettings.java | 2 +- .../xdebugger/settings/XDebuggerSettings.java | 2 +- .../impl/settings/DebuggerConfigurable.java | 81 +++++++++---------- .../XDebuggerSettingsPanelProviderImpl.java | 2 +- 4 files changed, 43 insertions(+), 44 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java index 942af0a1c527..2adecda5a961 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/JavaDebuggerSettings.java @@ -47,7 +47,7 @@ class JavaDebuggerSettings extends XDebuggerSettings { }; switch (category) { - case ROOT: + case GENERAL: return SimpleConfigurable.create("reference.idesettings.debugger.launching", OptionsBundle.message("options.java.display.name"), DebuggerLaunchingConfigurable.class, debuggerSettingsGetter); case DATA_VIEWS: diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java b/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java index dbf3d3211d59..08ea1f00f455 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java @@ -35,7 +35,7 @@ import org.jetbrains.annotations.Nullable; */ public abstract class XDebuggerSettings implements PersistentStateComponent { public enum Category { - ROOT, DATA_VIEWS, STEPPING, HOTSWAP + GENERAL, DATA_VIEWS, STEPPING, HOTSWAP } public static final ExtensionPointName EXTENSION_POINT = ExtensionPointName.create("com.intellij.xdebugger.settings"); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java index 97d64206ca55..dcdcdd3b7a34 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java @@ -78,17 +78,38 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent { computeMergedConfigurables(providers, configurables); - Configurable rootConfigurable = computeRootConfigurable(providers, configurables); - if (configurables.isEmpty() && rootConfigurable == null) { + for (DebuggerSettingsPanelProvider provider : providers) { + configurables.addAll(provider.getConfigurables()); + @SuppressWarnings("deprecation") + Configurable providerRootConfigurable = provider.getRootConfigurable(); + if (providerRootConfigurable != null) { + configurables.add(providerRootConfigurable); + } + } + + MergedCompositeConfigurable mergedGeneralConfigurable = computeGeneralConfigurables(providers); + if (configurables.isEmpty() && mergedGeneralConfigurable == null) { + myRootConfigurable = null; myChildren = EMPTY_CONFIGURABLES; } - else if (rootConfigurable == null && configurables.size() == 1) { - myRootConfigurable = configurables.get(0); - myChildren = EMPTY_CONFIGURABLES; + else if (configurables.size() == 1) { + Configurable firstConfigurable = configurables.get(0); + if (mergedGeneralConfigurable == null) { + myRootConfigurable = firstConfigurable; + myChildren = EMPTY_CONFIGURABLES; + } + else { + Configurable[] generalConfigurables = mergedGeneralConfigurable.children; + Configurable[] mergedArray = new Configurable[generalConfigurables.length + 1]; + System.arraycopy(generalConfigurables, 0, mergedArray, 0, generalConfigurables.length); + mergedArray[generalConfigurables.length] = firstConfigurable; + myRootConfigurable = new MergedCompositeConfigurable("", "", mergedArray); + myChildren = firstConfigurable instanceof SearchableConfigurable.Parent ? ((Parent)firstConfigurable).getConfigurables() : EMPTY_CONFIGURABLES; + } } else { myChildren = configurables.toArray(new Configurable[configurables.size()]); - myRootConfigurable = rootConfigurable; + myRootConfigurable = mergedGeneralConfigurable; } } @@ -104,44 +125,22 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent { } @Nullable - private static Configurable computeRootConfigurable(@NotNull List providers, @NotNull List configurables) { - Configurable deprecatedRootConfigurable = null; - for (DebuggerSettingsPanelProvider provider : providers) { - configurables.addAll(provider.getConfigurables()); - @SuppressWarnings("deprecation") - Configurable providerRootConfigurable = provider.getRootConfigurable(); - if (providerRootConfigurable != null) { - if (deprecatedRootConfigurable == null) { - deprecatedRootConfigurable = providerRootConfigurable; - } - else { - configurables.add(providerRootConfigurable); - } - } - } - - List rootConfigurables = getConfigurables(Category.ROOT, providers); + private static MergedCompositeConfigurable computeGeneralConfigurables(@NotNull List providers) { + List rootConfigurables = getConfigurables(Category.GENERAL, providers); if (rootConfigurables.isEmpty()) { - return deprecatedRootConfigurable; + return null; } - else { - Configurable[] mergedRootConfigurables = new Configurable[rootConfigurables.size() + (deprecatedRootConfigurable == null ? 0 : 1)]; - rootConfigurables.toArray(mergedRootConfigurables); - if (deprecatedRootConfigurable != null) { - mergedRootConfigurables[rootConfigurables.size()] = deprecatedRootConfigurable; + + Configurable[] mergedRootConfigurables = rootConfigurables.toArray(new Configurable[rootConfigurables.size()]); + // move unnamed to top + Arrays.sort(mergedRootConfigurables, new Comparator() { + @Override + public int compare(Configurable o1, Configurable o2) { + boolean c1e = StringUtil.isEmpty(o1.getDisplayName()); + return c1e == StringUtil.isEmpty(o2.getDisplayName()) ? 0 : (c1e ? -1 : 1); } - - // move unnamed to top - Arrays.sort(mergedRootConfigurables, new Comparator() { - @Override - public int compare(Configurable o1, Configurable o2) { - boolean c1e = StringUtil.isEmpty(o1.getDisplayName()); - return c1e == StringUtil.isEmpty(o2.getDisplayName()) ? 0 : (c1e ? -1 : 1); - } - }); - - return new MergedCompositeConfigurable("", "", mergedRootConfigurables); - } + }); + return new MergedCompositeConfigurable("", "", mergedRootConfigurables); } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java index bfc4194a3e02..b15ada07bf48 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java @@ -44,7 +44,7 @@ public class XDebuggerSettingsPanelProviderImpl extends DebuggerSettingsPanelPro @Override public Collection getConfigurable(@NotNull XDebuggerSettings.Category category) { List list; - if (category == XDebuggerSettings.Category.ROOT) { + if (category == XDebuggerSettings.Category.GENERAL) { list = new SmartList(SimpleConfigurable.create("debugger.general", "", GeneralConfigurableUi.class, new Getter() { @Override public XDebuggerGeneralSettings get() {