generic debugger settings: merge to support AppCode (all settings on one page)

This commit is contained in:
Vladimir Krivosheev
2014-07-23 17:46:13 +02:00
parent c257053753
commit e40e8e81ec
4 changed files with 43 additions and 44 deletions
@@ -47,7 +47,7 @@ class JavaDebuggerSettings extends XDebuggerSettings<Element> {
};
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:
@@ -35,7 +35,7 @@ import org.jetbrains.annotations.Nullable;
*/
public abstract class XDebuggerSettings<T> implements PersistentStateComponent<T> {
public enum Category {
ROOT, DATA_VIEWS, STEPPING, HOTSWAP
GENERAL, DATA_VIEWS, STEPPING, HOTSWAP
}
public static final ExtensionPointName<XDebuggerSettings> EXTENSION_POINT = ExtensionPointName.create("com.intellij.xdebugger.settings");
@@ -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<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);
}
}
}
List<Configurable> rootConfigurables = getConfigurables(Category.ROOT, providers);
private static MergedCompositeConfigurable computeGeneralConfigurables(@NotNull List<DebuggerSettingsPanelProvider> providers) {
List<Configurable> 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<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);
}
// 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);
}
});
return new MergedCompositeConfigurable("", "", mergedRootConfigurables);
}
@Override
@@ -44,7 +44,7 @@ public class XDebuggerSettingsPanelProviderImpl extends DebuggerSettingsPanelPro
@Override
public Collection<? extends Configurable> getConfigurable(@NotNull XDebuggerSettings.Category category) {
List<Configurable> list;
if (category == XDebuggerSettings.Category.ROOT) {
if (category == XDebuggerSettings.Category.GENERAL) {
list = new SmartList<Configurable>(SimpleConfigurable.create("debugger.general", "", GeneralConfigurableUi.class, new Getter<XDebuggerGeneralSettings>() {
@Override
public XDebuggerGeneralSettings get() {