diff options
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings')
10 files changed, 267 insertions, 355 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java index d140a74f35c8..6ee307cfa573 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DataViewsConfigurable.java @@ -17,7 +17,7 @@ package com.intellij.xdebugger.impl.settings; import com.intellij.openapi.options.Configurable; import com.intellij.xdebugger.XDebuggerBundle; -import com.intellij.xdebugger.settings.XDebuggerSettings; +import com.intellij.xdebugger.settings.DebuggerSettingsCategory; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -41,8 +41,8 @@ class DataViewsConfigurable extends SubCompositeConfigurable implements Configur @NotNull @Override - protected XDebuggerSettings.Category getCategory() { - return XDebuggerSettings.Category.DATA_VIEWS; + protected DebuggerSettingsCategory getCategory() { + return DebuggerSettingsCategory.DATA_VIEWS; } @NotNull 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 a3f4e847288c..58896a87f596 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 @@ -20,26 +20,23 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.SmartList; +import com.intellij.util.containers.ContainerUtil; import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.impl.DebuggerSupport; -import com.intellij.xdebugger.settings.XDebuggerSettings; -import org.jetbrains.annotations.Nls; +import com.intellij.xdebugger.settings.DebuggerConfigurableProvider; +import com.intellij.xdebugger.settings.DebuggerSettingsCategory; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; +import java.util.*; -/** - * @author Eugene Belyaev & Eugene Zhuravlev - */ public class DebuggerConfigurable implements SearchableConfigurable.Parent { public static final String DISPLAY_NAME = XDebuggerBundle.message("debugger.configurable.display.name"); static final Configurable[] EMPTY_CONFIGURABLES = new Configurable[0]; + private static final DebuggerSettingsCategory[] MERGED_CATEGORIES = {DebuggerSettingsCategory.STEPPING, DebuggerSettingsCategory.HOTSWAP}; private Configurable myRootConfigurable; private Configurable[] myChildren; @@ -71,89 +68,84 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent { return; } - List<DebuggerSettingsPanelProvider> providers = DebuggerConfigurableProvider.getSortedProviders(); - List<Configurable> configurables = new SmartList<Configurable>(); configurables.add(new DataViewsConfigurable()); - List<Configurable> steppingConfigurables = DebuggerConfigurableProvider.getConfigurables(XDebuggerSettings.Category.STEPPING, providers); - if (!steppingConfigurables.isEmpty()) { - configurables.add(new SteppingConfigurable(steppingConfigurables)); + DebuggerConfigurableProvider[] providers = DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions(); + computeMergedConfigurables(providers, configurables); + + //noinspection deprecation + for (DebuggerSettingsPanelProvider provider : getSortedProviders()) { + configurables.addAll(provider.getConfigurables()); + @SuppressWarnings("deprecation") + Configurable providerRootConfigurable = provider.getRootConfigurable(); + if (providerRootConfigurable != null) { + configurables.add(providerRootConfigurable); + } } - Configurable rootConfigurable = computeRootConfigurable(providers, configurables); + for (DebuggerConfigurableProvider provider : providers) { + configurables.addAll(provider.getConfigurables(DebuggerSettingsCategory.ROOT)); + } - if (configurables.isEmpty() && rootConfigurable == null) { + 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; } } - @Nullable - private static Configurable computeRootConfigurable(@NotNull List<DebuggerSettingsPanelProvider> providers, @NotNull List<Configurable> 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); - } + private static void computeMergedConfigurables(@NotNull DebuggerConfigurableProvider[] providers, @NotNull List<Configurable> result) { + for (DebuggerSettingsCategory category : MERGED_CATEGORIES) { + List<Configurable> configurables = getConfigurables(category, providers); + if (!configurables.isEmpty()) { + String id = category.name().toLowerCase(Locale.ENGLISH); + result.add(new MergedCompositeConfigurable("debugger." + id, XDebuggerBundle.message("debugger." + id + ".display.name"), + configurables.toArray(new Configurable[configurables.size()]))); } } + } - List<Configurable> rootConfigurables = DebuggerConfigurableProvider.getConfigurables(XDebuggerSettings.Category.ROOT, providers); + @Nullable + private static MergedCompositeConfigurable computeGeneralConfigurables(@NotNull DebuggerConfigurableProvider[] providers) { + List<Configurable> rootConfigurables = getConfigurables(DebuggerSettingsCategory.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; - } - - // move unnamed to top - Arrays.sort(mergedRootConfigurables, new Comparator<Configurable>() { - @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) { - @NotNull - @Override - public String getId() { - throw new UnsupportedOperationException(); - } - @Nls - @Override - public String getDisplayName() { - throw new UnsupportedOperationException(); - } - }; - } + Configurable[] mergedRootConfigurables = rootConfigurables.toArray(new Configurable[rootConfigurables.size()]); + // move unnamed to top + Arrays.sort(mergedRootConfigurables, new Comparator<Configurable>() { + @Override + public int compare(@NotNull Configurable o1, @NotNull Configurable o2) { + boolean c1e = StringUtil.isEmpty(o1.getDisplayName()); + return c1e == StringUtil.isEmpty(o2.getDisplayName()) ? 0 : (c1e ? -1 : 1); + } + }); + return new MergedCompositeConfigurable("", "", mergedRootConfigurables); } @Override public void apply() throws ConfigurationException { - for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) { - support.getSettingsPanelProvider().apply(); - } if (myRootConfigurable != null) { myRootConfigurable.apply(); } @@ -206,4 +198,51 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent { public String getId() { return "project.propDebugger"; } + + @SuppressWarnings("deprecation") + @NotNull + private static List<DebuggerSettingsPanelProvider> getSortedProviders() { + List<DebuggerSettingsPanelProvider> providers = null; + for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) { + DebuggerSettingsPanelProvider provider = support.getSettingsPanelProvider(); + if (providers == null) { + providers = new SmartList<DebuggerSettingsPanelProvider>(); + } + providers.add(provider); + } + + if (ContainerUtil.isEmpty(providers)) { + return Collections.emptyList(); + } + + if (providers.size() > 1) { + Collections.sort(providers, new Comparator<DebuggerSettingsPanelProvider>() { + @Override + public int compare(@NotNull DebuggerSettingsPanelProvider o1, @NotNull DebuggerSettingsPanelProvider o2) { + return o2.getPriority() - o1.getPriority(); + } + }); + } + return providers; + } + + @NotNull + static List<Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category) { + return getConfigurables(category, DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions()); + } + + @NotNull + private static List<Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category, @NotNull DebuggerConfigurableProvider[] providers) { + List<Configurable> configurables = null; + for (DebuggerConfigurableProvider provider : providers) { + Collection<? extends Configurable> providerConfigurables = provider.getConfigurables(category); + if (!providerConfigurables.isEmpty()) { + if (configurables == null) { + configurables = new SmartList<Configurable>(); + } + configurables.addAll(providerConfigurables); + } + } + return ContainerUtil.notNullize(configurables); + } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java deleted file mode 100644 index 80651cadc830..000000000000 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2000-2010 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.xdebugger.impl.settings; - -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurableProvider; -import com.intellij.util.SmartList; -import com.intellij.util.containers.ContainerUtil; -import com.intellij.xdebugger.impl.DebuggerSupport; -import com.intellij.xdebugger.settings.XDebuggerSettings; -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -/** - * @author nik - */ -public class DebuggerConfigurableProvider extends ConfigurableProvider { - @NotNull - static List<DebuggerSettingsPanelProvider> getSortedProviders() { - List<DebuggerSettingsPanelProvider> providers = null; - for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) { - DebuggerSettingsPanelProvider provider = support.getSettingsPanelProvider(); - if (providers == null) { - providers = new SmartList<DebuggerSettingsPanelProvider>(); - } - providers.add(provider); - } - - if (ContainerUtil.isEmpty(providers)) { - return Collections.emptyList(); - } - - if (providers.size() > 1) { - Collections.sort(providers, new Comparator<DebuggerSettingsPanelProvider>() { - @Override - public int compare(DebuggerSettingsPanelProvider o1, DebuggerSettingsPanelProvider o2) { - return o2.getPriority() - o1.getPriority(); - } - }); - } - return providers; - } - - @Override - public Configurable createConfigurable() { - return new DebuggerConfigurable(); - } - - @NotNull - static List<Configurable> getConfigurables(@NotNull XDebuggerSettings.Category category) { - List<DebuggerSettingsPanelProvider> providers = getSortedProviders(); - return providers.isEmpty() ? Collections.<Configurable>emptyList() : getConfigurables(category, providers); - } - - @NotNull - static List<Configurable> getConfigurables(@NotNull XDebuggerSettings.Category category, @NotNull List<DebuggerSettingsPanelProvider> providers) { - List<Configurable> configurables = null; - for (DebuggerSettingsPanelProvider provider : providers) { - Collection<? extends Configurable> providerConfigurables = provider.getConfigurable(category); - if (!providerConfigurables.isEmpty()) { - if (configurables == null) { - configurables = new SmartList<Configurable>(); - } - configurables.addAll(providerConfigurables); - } - } - return ContainerUtil.notNullize(configurables); - } -} diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java index 68e6de064b9a..5b0dde609e0c 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java @@ -16,15 +16,15 @@ package com.intellij.xdebugger.impl.settings; import com.intellij.openapi.options.Configurable; -import com.intellij.xdebugger.settings.XDebuggerSettings; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; +@Deprecated /** - * @author nik + * @deprecated Use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider} */ public abstract class DebuggerSettingsPanelProvider { public int getPriority() { @@ -36,23 +36,20 @@ public abstract class DebuggerSettingsPanelProvider { return Collections.emptyList(); } + @Deprecated + /** + * @deprecated Please use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider#generalApplied(com.intellij.xdebugger.settings.DebuggerSettingsCategory)} + */ public void apply() { } @Nullable @Deprecated - public Configurable getRootConfigurable() { - return null; - } - - @NotNull - public Collection<? extends Configurable> getConfigurable(@NotNull XDebuggerSettings.Category category) { - return Collections.emptyList(); - } - /** - * General settings of category were applied + * @deprecated Please use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider#getConfigurables(com.intellij.xdebugger.settings.DebuggerSettingsCategory)} and + * check {@link com.intellij.xdebugger.settings.DebuggerSettingsCategory#GENERAL} */ - public void generalApplied(@NotNull XDebuggerSettings.Category category) { + public Configurable getRootConfigurable() { + return null; } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/GeneralConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/GeneralConfigurable.java deleted file mode 100644 index 466279bce977..000000000000 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/GeneralConfigurable.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.xdebugger.impl.settings; - -import com.intellij.openapi.options.ConfigurableBase; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -class GeneralConfigurable extends ConfigurableBase<GeneralConfigurableUi, XDebuggerGeneralSettings> { - @Override - protected XDebuggerGeneralSettings getSettings() { - return XDebuggerSettingsManager.getInstanceImpl().getGeneralSettings(); - } - - @Override - protected GeneralConfigurableUi createUi() { - return new GeneralConfigurableUi(); - } - - @NotNull - @Override - public String getId() { - return "debugger.general"; - } - - @Nls - @Override - public String getDisplayName() { - return ""; - } - - @Nullable - @Override - public String getHelpTopic() { - return null; - } -}
\ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java index be0bdbf0ab2f..ccfc2708cb9e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java @@ -7,6 +7,8 @@ import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.TitledSeparator; +import com.intellij.xdebugger.settings.DebuggerConfigurableProvider; +import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -14,18 +16,34 @@ import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; -abstract class MergedCompositeConfigurable implements SearchableConfigurable { +class MergedCompositeConfigurable implements SearchableConfigurable { static final EmptyBorder BOTTOM_INSETS = new EmptyBorder(0, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0); + private static final Insets FIRST_COMPONENT_INSETS = new Insets(0, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0); + private static final Insets N_COMPONENT_INSETS = new Insets(IdeBorderFactory.TITLED_BORDER_TOP_INSET, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0); + protected final Configurable[] children; protected JComponent rootComponent; - protected MergedCompositeConfigurable(@NotNull Configurable[] children) { + private final String id; + private final String displayName; + + public MergedCompositeConfigurable(@NotNull String id, @NotNull String displayName, @NotNull Configurable[] children) { this.children = children; + this.id = id; + this.displayName = displayName; } - protected boolean isUseTitledBorder() { - return true; + @NotNull + @Override + public String getId() { + return id; + } + + @Nls + @Override + public String getDisplayName() { + return displayName; } @Nullable @@ -40,26 +58,47 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable { return children.length == 1 ? children[0].getHelpTopic() : null; } + /** + * false by default. + * + * If Ruby general settings will be without titled border in RubyMine, user could think that all other debugger categories also about Ruby. + */ + protected boolean isUseTargetedProductPolicyIfSeveralChildren() { + return false; + } + @Nullable @Override public JComponent createComponent() { if (rootComponent == null) { + Configurable firstConfigurable = children[0]; if (children.length == 1) { - rootComponent = children[0].createComponent(); + rootComponent = firstConfigurable.createComponent(); + String rootComponentDisplayName = firstConfigurable.getDisplayName(); + if (!StringUtil.isEmpty(rootComponentDisplayName) && !isTargetedToProduct(firstConfigurable)) { + rootComponent.setBorder(IdeBorderFactory.createTitledBorder(rootComponentDisplayName, false, FIRST_COMPONENT_INSETS)); + } } else { - JPanel panel = createPanel(isUseTitledBorder()); - for (Configurable child : children) { - JComponent component = child.createComponent(); + boolean isFirstNamed = true; + JPanel panel = createPanel(true); + for (Configurable configurable : children) { + JComponent component = configurable.createComponent(); assert component != null; - if (isUseTitledBorder()) { - String displayName = child.getDisplayName(); - if (StringUtil.isEmpty(displayName)) { - component.setBorder(BOTTOM_INSETS); + String displayName = configurable.getDisplayName(); + if (StringUtil.isEmpty(displayName)) { + component.setBorder(BOTTOM_INSETS); + } + else { + boolean addBorder = true; + if (isUseTargetedProductPolicyIfSeveralChildren() && isFirstNamed) { + isFirstNamed = false; + if (isTargetedToProduct(configurable)) { + addBorder = false; + } } - else { - Insets insets = new Insets(children[0] == child ? 0 : IdeBorderFactory.TITLED_BORDER_TOP_INSET, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0); - component.setBorder(IdeBorderFactory.createTitledBorder(displayName, false, insets)); + if (addBorder) { + component.setBorder(IdeBorderFactory.createTitledBorder(displayName, false, firstConfigurable == configurable ? FIRST_COMPONENT_INSETS : N_COMPONENT_INSETS)); } } panel.add(component); @@ -70,6 +109,15 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable { return rootComponent; } + static boolean isTargetedToProduct(@NotNull Configurable configurable) { + for (DebuggerConfigurableProvider provider : DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions()) { + if (provider.isTargetedToProduct(configurable)) { + return true; + } + } + return false; + } + @NotNull static JPanel createPanel(boolean isUseTitledBorder) { int verticalGap = TitledSeparator.TOP_INSET; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java deleted file mode 100644 index 5f16424c1790..000000000000 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.xdebugger.impl.settings; - -import com.intellij.openapi.options.Configurable; -import com.intellij.xdebugger.XDebuggerBundle; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -class SteppingConfigurable extends MergedCompositeConfigurable { - public SteppingConfigurable(@NotNull List<Configurable> configurables) { - super(configurables.toArray(new Configurable[configurables.size()])); - } - - @NotNull - @Override - public String getId() { - return "debugger.stepping"; - } - - @Nls - @Override - public String getDisplayName() { - return XDebuggerBundle.message("debugger.stepping.display.name"); - } -}
\ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java index 489e4bd80307..f06b6bcc1107 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java @@ -20,8 +20,8 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.ui.IdeBorderFactory; -import com.intellij.xdebugger.impl.DebuggerSupport; -import com.intellij.xdebugger.settings.XDebuggerSettings; +import com.intellij.xdebugger.settings.DebuggerConfigurableProvider; +import com.intellij.xdebugger.settings.DebuggerSettingsCategory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -77,7 +77,7 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent protected abstract DataViewsConfigurableUi createRootUi(); @NotNull - protected abstract XDebuggerSettings.Category getCategory(); + protected abstract DebuggerSettingsCategory getCategory(); private boolean isChildrenMerged() { return children != null && children.length == 1; @@ -86,7 +86,7 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent @Override public final Configurable[] getConfigurables() { if (children == null) { - List<Configurable> configurables = DebuggerConfigurableProvider.getConfigurables(getCategory()); + List<Configurable> configurables = DebuggerConfigurable.getConfigurables(getCategory()); children = configurables.toArray(new Configurable[configurables.size()]); } return isChildrenMerged() ? DebuggerConfigurable.EMPTY_CONFIGURABLES : children; @@ -115,10 +115,12 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent c.setBorder(MergedCompositeConfigurable.BOTTOM_INSETS); panel.add(c); } - for (Configurable child : children) { - JComponent component = child.createComponent(); + for (Configurable configurable : children) { + JComponent component = configurable.createComponent(); if (component != null) { - component.setBorder(IdeBorderFactory.createTitledBorder(child.getDisplayName(), false)); + if (children[0] != configurable || !MergedCompositeConfigurable.isTargetedToProduct(configurable)) { + component.setBorder(IdeBorderFactory.createTitledBorder(configurable.getDisplayName(), false)); + } panel.add(component); } } @@ -164,8 +166,8 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent public final void apply() throws ConfigurationException { if (root != null) { root.apply(getSettings()); - for (DebuggerSupport support : DebuggerSupport.getDebuggerSupports()) { - support.getSettingsPanelProvider().generalApplied(getCategory()); + for (DebuggerConfigurableProvider provider : DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions()) { + provider.generalApplied(getCategory()); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerConfigurableProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerConfigurableProvider.java new file mode 100644 index 000000000000..2a7f636784c4 --- /dev/null +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerConfigurableProvider.java @@ -0,0 +1,74 @@ +package com.intellij.xdebugger.impl.settings; + +import com.intellij.openapi.options.Configurable; +import com.intellij.openapi.options.SimpleConfigurable; +import com.intellij.openapi.util.Getter; +import com.intellij.util.SmartList; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.xdebugger.settings.DebuggerConfigurableProvider; +import com.intellij.xdebugger.settings.DebuggerSettingsCategory; +import com.intellij.xdebugger.settings.XDebuggerSettings; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.List; + +class XDebuggerConfigurableProvider extends DebuggerConfigurableProvider { + @NotNull + @Override + public Collection<? extends Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category) { + List<Configurable> list; + if (category == DebuggerSettingsCategory.GENERAL) { + list = new SmartList<Configurable>(SimpleConfigurable.create("debugger.general", "", GeneralConfigurableUi.class, new Getter<XDebuggerGeneralSettings>() { + @Override + public XDebuggerGeneralSettings get() { + return XDebuggerSettingsManager.getInstanceImpl().getGeneralSettings(); + } + })); + } + else { + list = null; + } + + for (XDebuggerSettings<?> settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) { + Collection<? extends Configurable> configurables = settings.createConfigurables(category); + if (!configurables.isEmpty()) { + if (list == null) { + list = new SmartList<Configurable>(); + } + list.addAll(configurables); + } + } + + if (category == DebuggerSettingsCategory.ROOT) { + for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) { + @SuppressWarnings("deprecation") + Configurable configurable = settings.createConfigurable(); + if (configurable != null) { + if (list == null) { + list = new SmartList<Configurable>(); + } + list.add(configurable); + } + } + } + return ContainerUtil.notNullize(list); + } + + @Override + public void generalApplied(@NotNull DebuggerSettingsCategory category) { + for (XDebuggerSettings<?> settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) { + settings.generalApplied(category); + } + } + + @Override + public boolean isTargetedToProduct(@NotNull Configurable configurable) { + for (XDebuggerSettings<?> settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) { + if (settings.isTargetedToProduct(configurable)) { + return true; + } + } + return super.isTargetedToProduct(configurable); + } +}
\ No newline at end of file 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 deleted file mode 100644 index 2e20230198c6..000000000000 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.xdebugger.impl.settings; - -import com.intellij.openapi.options.Configurable; -import com.intellij.util.SmartList; -import com.intellij.util.containers.ContainerUtil; -import com.intellij.xdebugger.settings.XDebuggerSettings; -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; -import java.util.List; - -/** - * @author nik - */ -public class XDebuggerSettingsPanelProviderImpl extends DebuggerSettingsPanelProvider { - @NotNull - @Override - public Collection<? extends Configurable> getConfigurables() { - List<Configurable> list = new SmartList<Configurable>(); - for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) { - ContainerUtil.addIfNotNull(list, settings.createConfigurable()); - } - return list; - } - - @NotNull - @Override - public Collection<? extends Configurable> getConfigurable(@NotNull XDebuggerSettings.Category category) { - List<Configurable> list; - if (category == XDebuggerSettings.Category.ROOT) { - list = new SmartList<Configurable>(new GeneralConfigurable()); - } - else { - list = null; - } - - for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) { - Configurable configurable = settings.createConfigurable(category); - if (configurable != null) { - if (list == null) { - list = new SmartList<Configurable>(); - } - list.add(configurable); - } - } - return ContainerUtil.notNullize(list); - } - - @Override - public void generalApplied(@NotNull XDebuggerSettings.Category category) { - for (XDebuggerSettings settings : XDebuggerSettingsManager.getInstanceImpl().getSettingsList()) { - settings.generalApplied(category); - } - } -} |