move "Data Type Renderers" to "Data Views" node

This commit is contained in:
Vladimir Krivosheev
2014-07-24 17:13:51 +02:00
parent 8e044eb58d
commit bcae7b03fb
20 changed files with 261 additions and 307 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* 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.
@@ -17,14 +17,12 @@ package com.intellij.debugger.actions;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.engine.JavaDebugProcess;
import com.intellij.debugger.settings.DebuggerDataViewsConfigurable;
import com.intellij.debugger.settings.JavaDebuggerSettings;
import com.intellij.debugger.settings.NodeRendererSettings;
import com.intellij.debugger.settings.UserRenderersConfigurable;
import com.intellij.idea.ActionsBundle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.options.CompositeConfigurable;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.TabbedConfigurable;
@@ -40,16 +38,9 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.util.ArrayList;
import java.util.List;
/**
* User: lex
* Date: Sep 26, 2003
* Time: 4:39:53 PM
*/
public class CustomizeContextViewAction extends XDebuggerTreeActionBase {
@Override
public void actionPerformed(AnActionEvent e) {
perform(null, "", e);
@@ -58,15 +49,11 @@ public class CustomizeContextViewAction extends XDebuggerTreeActionBase {
@Override
protected void perform(XValueNodeImpl node, @NotNull String nodeName, AnActionEvent e) {
final Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
Disposable disposable = Disposer.newDisposable();
final CompositeConfigurable configurable = new TabbedConfigurable(disposable) {
SingleConfigurableEditor editor = new SingleConfigurableEditor(project, new TabbedConfigurable(disposable) {
@Override
protected List<Configurable> createConfigurables() {
ArrayList<Configurable> array = new ArrayList<Configurable>();
array.add(new DebuggerDataViewsConfigurable(project));
array.add(new UserRenderersConfigurable(project));
return array;
return JavaDebuggerSettings.createDataViewsConfigurable();
}
@Override
@@ -89,13 +76,12 @@ public class CustomizeContextViewAction extends XDebuggerTreeActionBase {
protected void createConfigurableTabs() {
for (Configurable configurable : getConfigurables()) {
JComponent component = configurable.createComponent();
component.setBorder(new EmptyBorder(8,8,8,8));
assert component != null;
component.setBorder(new EmptyBorder(8, 8, 8, 8));
myTabbedPane.addTab(configurable.getDisplayName(), component);
}
}
};
SingleConfigurableEditor editor = new SingleConfigurableEditor(project, configurable);
});
Disposer.register(editor.getDisposable(), disposable);
editor.show();
}
@@ -29,7 +29,6 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.UnnamedConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
@@ -41,7 +40,7 @@ import com.intellij.ui.table.JBTable;
import com.intellij.util.Function;
import com.intellij.util.ui.AbstractTableCellEditor;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
@@ -70,7 +69,6 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
private DebuggerExpressionTextField myChildrenEditor;
private DebuggerExpressionTextField myChildrenExpandedEditor;
private DebuggerExpressionTextField myListChildrenEditor;
private JComponent myChildrenListEditor;
private JLabel myExpandedLabel;
private JPanel myMainPanel;
private JBTable myTable;
@@ -79,10 +77,6 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
private static final int NAME_TABLE_COLUMN = 0;
private static final int EXPRESSION_TABLE_COLUMN = 1;
public CompoundRendererConfigurable(@Nullable Project project) {
myProject = project;
}
public void setRenderer(NodeRenderer renderer) {
if (renderer instanceof CompoundReferenceRenderer) {
myRenderer = (CompoundReferenceRenderer)renderer;
@@ -98,6 +92,8 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
return myRenderer;
}
@Override
@NotNull
public JComponent createComponent() {
if (myProject == null) {
myProject = JavaDebuggerSupport.getContextProjectForEditorFieldsInDebuggerConfigurables();
@@ -121,10 +117,11 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
myLabelEditor = new DebuggerExpressionTextField(myProject, null, "ClassLabelExpression");
myChildrenEditor = new DebuggerExpressionTextField(myProject, null, "ClassChildrenExpression");
myChildrenExpandedEditor = new DebuggerExpressionTextField(myProject, null, "ClassChildrenExpression");
myChildrenListEditor = createChildrenListEditor();
JComponent myChildrenListEditor = createChildrenListEditor();
final ItemListener updateListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
@Override
public void itemStateChanged(@NotNull ItemEvent e) {
updateEnabledState();
}
};
@@ -133,7 +130,8 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
myRbExpressionChildrenRenderer.addItemListener(updateListener);
myClassNameField = new ClassNameEditorWithBrowseButton(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@Override
public void actionPerformed(@NotNull ActionEvent e) {
PsiClass psiClass = DebuggerUtils.getInstance()
.chooseClassDialog(DebuggerBundle.message("title.compound.renderer.configurable.choose.renderer.reference.type"), myProject);
if (psiClass != null) {
@@ -145,7 +143,8 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}, myProject);
final EditorTextField textField = myClassNameField.getEditorTextField();
final FocusAdapter updateContextListener = new FocusAdapter() {
public void focusLost(FocusEvent e) {
@Override
public void focusLost(@NotNull FocusEvent e) {
updateContext(myClassNameField.getText());
}
};
@@ -206,6 +205,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
private void updateContext(final String qName) {
ApplicationManager.getApplication().runReadAction(new Runnable() {
@Override
public void run() {
final Project project = myProject;
final PsiClass psiClass = project != null ? DebuggerUtils.findClass(qName, project, GlobalSearchScope.allScope(project)) : null;
@@ -214,6 +214,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
myChildrenExpandedEditor.setContext(psiClass);
myListChildrenEditor.setContext(psiClass);
assert project != null;
PsiType type = DebuggerUtils.getType(qName, project);
myLabelEditor.setThisType(type);
myChildrenEditor.setThisType(type);
@@ -251,17 +252,21 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
final TableColumn exprColumn = myTable.getColumnModel().getColumn(EXPRESSION_TABLE_COLUMN);
exprColumn.setCellEditor(new AbstractTableCellEditor() {
@Override
public Object getCellEditorValue() {
return myListChildrenEditor.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
myListChildrenEditor.setText((TextWithImports)value);
return myListChildrenEditor;
}
});
exprColumn.setCellRenderer(new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
@NotNull
@Override
public Component getTableCellRendererComponent(@NotNull JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
@@ -300,6 +305,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}).createPanel();
}
@Override
public boolean isModified() {
if (myRenderer == null) {
return false;
@@ -309,7 +315,8 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
return !DebuggerUtilsEx.externalizableEqual(cloned, myOriginalRenderer);
}
public void apply() throws ConfigurationException {
@Override
public void apply() {
if (myRenderer == null) {
return;
}
@@ -340,6 +347,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
renderer.setClassName(myClassNameField.getText());
}
@Override
public void reset() {
final TextWithImports emptyExpressionFragment = new TextWithImportsImpl(CodeFragmentKind.EXPRESSION, "");
((CardLayout)myMainPanel.getLayout()).show(myMainPanel, myRenderer == null ? EMPTY_PANEL_ID : DATA_PANEL_ID);
@@ -390,6 +398,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
updateContext(className);
}
@Override
public void disposeUIResources() {
myRenderer = null;
myOriginalRenderer = null;
@@ -410,7 +419,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
return (MyTableModel)myTable.getModel();
}
private final class MyTableModel extends AbstractTableModel {
private static final class MyTableModel extends AbstractTableModel {
private final List<Row> myData = new ArrayList<Row>();
public MyTableModel() {
@@ -423,18 +432,23 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public int getRowCount() {
return myData.size();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@NotNull
@Override
public Class getColumnClass(int columnIndex) {
switch (columnIndex) {
case NAME_TABLE_COLUMN:
@@ -446,6 +460,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (rowIndex >= getRowCount()) {
return null;
@@ -461,6 +476,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (rowIndex >= getRowCount()) {
return;
@@ -476,6 +492,8 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
}
}
@NotNull
@Override
public String getColumnName(int columnIndex) {
switch (columnIndex) {
case NAME_TABLE_COLUMN:
@@ -513,7 +531,7 @@ public class CompoundRendererConfigurable implements UnnamedConfigurable {
return pairs;
}
private final class Row {
private static final class Row {
public String name;
public TextWithImports value;
@@ -15,31 +15,40 @@
*/
package com.intellij.debugger.settings;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.OptionsBundle;
import com.intellij.openapi.options.SimpleConfigurable;
import com.intellij.openapi.util.Getter;
import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
import com.intellij.xdebugger.settings.XDebuggerSettings;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static java.util.Collections.singletonList;
/**
* We cannot now transform DebuggerSettings to XDebuggerSettings: getState/loadState is not called for EP,
* but we cannot use standard implementation to save our state, due to backward compatibility we must use own state spec.
*
* <p/>
* But we must implement createConfigurable as part of XDebuggerSettings otherwise java general settings will be before xdebugger general setting,
* because JavaDebuggerSettingsPanelProvider has higher priority than XDebuggerSettingsPanelProviderImpl.
*/
class JavaDebuggerSettings extends XDebuggerSettings<Element> {
public class JavaDebuggerSettings extends XDebuggerSettings<Element> {
protected JavaDebuggerSettings() {
super("java");
}
@Nullable
@NotNull
@Override
public Configurable createConfigurable(@NotNull Category category) {
final Getter<DebuggerSettings> debuggerSettingsGetter = new Getter<DebuggerSettings>() {
public Collection<? extends Configurable> createConfigurables(@NotNull DebuggerSettingsCategory category) {
Getter<DebuggerSettings> settingsGetter = new Getter<DebuggerSettings>() {
@Override
public DebuggerSettings get() {
return DebuggerSettings.getInstance();
@@ -48,21 +57,36 @@ class JavaDebuggerSettings extends XDebuggerSettings<Element> {
switch (category) {
case GENERAL:
return SimpleConfigurable.create("reference.idesettings.debugger.launching", OptionsBundle.message("options.java.display.name"),
DebuggerLaunchingConfigurable.class, debuggerSettingsGetter);
return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.launching", OptionsBundle.message("options.java.display.name"),
DebuggerLaunchingConfigurable.class, settingsGetter));
case DATA_VIEWS:
return new DebuggerDataViewsConfigurable(null);
return createDataViewsConfigurable();
case STEPPING:
return SimpleConfigurable.create("reference.idesettings.debugger.stepping", OptionsBundle.message("options.java.display.name"), DebuggerSteppingConfigurable.class, debuggerSettingsGetter);
return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.stepping", OptionsBundle.message("options.java.display.name"),
DebuggerSteppingConfigurable.class, settingsGetter));
case HOTSWAP:
return SimpleConfigurable.create("reference.idesettings.debugger.hotswap", OptionsBundle.message("options.java.display.name"), JavaHotSwapConfigurableUi.class, debuggerSettingsGetter);
return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.hotswap", OptionsBundle.message("options.java.display.name"),
JavaHotSwapConfigurableUi.class, settingsGetter));
}
return null;
return Collections.emptyList();
}
@SuppressWarnings("SpellCheckingInspection")
@NotNull
public static List<Configurable> createDataViewsConfigurable() {
return Arrays.<Configurable>asList(new DebuggerDataViewsConfigurable(null),
SimpleConfigurable.create("reference.idesettings.debugger.typerenderers", DebuggerBundle.message("user.renderers.configurable.display.name"),
UserRenderersConfigurable.class, new Getter<NodeRendererSettings>() {
@Override
public NodeRendererSettings get() {
return NodeRendererSettings.getInstance();
}
}));
}
@Override
public void generalApplied(@NotNull XDebuggerSettings.Category category) {
if (category == XDebuggerSettings.Category.DATA_VIEWS) {
public void generalApplied(@NotNull DebuggerSettingsCategory category) {
if (category == DebuggerSettingsCategory.DATA_VIEWS) {
NodeRendererSettings.getInstance().fireRenderersChanged();
}
}
@@ -20,17 +20,12 @@ import com.intellij.debugger.ui.tree.render.CompoundNodeRenderer;
import com.intellij.debugger.ui.tree.render.NodeRenderer;
import com.intellij.ide.util.ElementsChooser;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.options.ConfigurableUi;
import com.intellij.ui.DocumentAdapter;
import com.intellij.util.IconUtil;
import com.intellij.util.PlatformIcons;
import com.intellij.util.containers.InternalIterator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
@@ -44,8 +39,7 @@ import java.util.List;
* @author Eugene Zhuravlev
* Date: Feb 19, 2005
*/
public class UserRenderersConfigurable implements SearchableConfigurable, Configurable.NoScroll {
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.settings.UserRenderersConfigurable");
public class UserRenderersConfigurable implements ConfigurableUi<NodeRendererSettings> {
private static final Icon ADD_ICON = IconUtil.getAddIcon();
private static final Icon REMOVE_ICON = IconUtil.getRemoveIcon();
private static final Icon COPY_ICON = PlatformIcons.COPY_ICON;
@@ -56,35 +50,11 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
private JTextField myNameField;
private ElementsChooser<NodeRenderer> myRendererChooser;
private NodeRenderer myCurrentRenderer = null;
private final CompoundRendererConfigurable myRendererDataConfigurable;
public UserRenderersConfigurable(@Nullable Project project) {
myRendererDataConfigurable = new CompoundRendererConfigurable(project);
}
@Override
public String getDisplayName() {
return DebuggerBundle.message("user.renderers.configurable.display.name");
}
@Override
public String getHelpTopic() {
return "reference.idesettings.debugger.typerenderers";
}
private final CompoundRendererConfigurable myRendererDataConfigurable = new CompoundRendererConfigurable();
@Override
@NotNull
public String getId() {
return getHelpTopic();
}
@Override
public Runnable enableSearch(String option) {
return null;
}
@Override
public JComponent createComponent() {
public JComponent getComponent() {
final JPanel panel = new JPanel(new BorderLayout(4, 0));
final JComponent renderersList = createRenderersList();
@@ -146,7 +116,7 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
private void updateCurrentRenderer(List<NodeRenderer> selectedElements) {
if (selectedElements.size() != 1) {
// multiselection
// multi selection
setCurrentRenderer(null);
}
else {
@@ -158,13 +128,8 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
if (myCurrentRenderer == renderer) {
return;
}
try {
if (myRendererDataConfigurable.isModified()) {
myRendererDataConfigurable.apply();
}
}
catch (ConfigurationException e) {
LOG.error(e);
if (myRendererDataConfigurable.isModified()) {
myRendererDataConfigurable.apply();
}
myCurrentRenderer = renderer;
if (renderer != null) {
@@ -190,11 +155,11 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
}
@Override
public void apply() throws ConfigurationException {
public void apply(@NotNull NodeRendererSettings settings) {
myRendererDataConfigurable.apply();
flushTo(NodeRendererSettings.getInstance().getCustomRenderers());
flushTo(settings.getCustomRenderers());
NodeRendererSettings.getInstance().fireRenderersChanged();
settings.fireRenderersChanged();
}
private void flushTo(final RendererConfiguration rendererConfiguration) {
@@ -207,11 +172,10 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
}
@Override
public boolean isModified() {
public boolean isModified(@NotNull NodeRendererSettings settings) {
if (myRendererDataConfigurable.isModified()) {
return true;
}
final NodeRendererSettings settings = NodeRendererSettings.getInstance();
final RendererConfiguration rendererConfiguration = settings.getCustomRenderers();
if (myRendererChooser.getElementCount() != rendererConfiguration.getRendererCount()) {
return true;
@@ -222,9 +186,9 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
}
@Override
public void reset() {
public void reset(@NotNull NodeRendererSettings settings) {
myRendererChooser.removeAllElements();
final RendererConfiguration rendererConfiguration = NodeRendererSettings.getInstance().getCustomRenderers();
final RendererConfiguration rendererConfiguration = settings.getCustomRenderers();
final ArrayList<NodeRenderer> elementsToSelect = new ArrayList<NodeRenderer>(1);
rendererConfiguration.iterateRenderers(new InternalIterator<NodeRenderer>() {
@Override
@@ -242,12 +206,6 @@ public class UserRenderersConfigurable implements SearchableConfigurable, Config
myRendererDataConfigurable.reset();
}
@Override
public void disposeUIResources() {
myRendererChooser.removeAllElements();
myRendererDataConfigurable.disposeUIResources();
}
private class AddAction extends AnAction {
public AddAction() {
super(DebuggerBundle.message("button.add"), DebuggerBundle.message("user.renderers.configurable.button.description.add"), ADD_ICON);
@@ -18,7 +18,6 @@ package com.intellij.debugger.ui;
import com.intellij.debugger.DebuggerManagerEx;
import com.intellij.debugger.actions.*;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.settings.UserRenderersConfigurable;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
@@ -26,7 +25,6 @@ import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.xdebugger.AbstractDebuggerSession;
@@ -40,14 +38,12 @@ import com.intellij.xdebugger.impl.actions.MarkObjectActionHandler;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.evaluate.quick.common.QuickEvaluateHandler;
import com.intellij.xdebugger.impl.settings.DebuggerSettingsPanelProvider;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.util.Collection;
import java.util.Collections;
/**
* @author nik
@@ -66,7 +62,6 @@ public class JavaDebuggerSupport extends DebuggerSupport {
private final ShowExecutionPointActionHandler myShowExecutionPointActionHandler = new ShowExecutionPointActionHandler();
//private final EvaluateActionHandler myEvaluateActionHandler = new EvaluateActionHandler();
private final QuickEvaluateActionHandler myQuickEvaluateHandler = new QuickEvaluateActionHandler();
private final JavaDebuggerSettingsPanelProvider myDebuggerSettingsPanelProvider = new JavaDebuggerSettingsPanelProvider();
private final DebuggerActionHandler mySmartStepIntoHandler = new JvmSmartStepIntoActionHandler();
private final DebuggerActionHandler myAddToWatchedActionHandler = new AddToWatchActionHandler();
private final JavaMarkObjectActionHandler myMarkObjectActionHandler = new JavaMarkObjectActionHandler();
@@ -214,12 +209,6 @@ public class JavaDebuggerSupport extends DebuggerSupport {
return X_EDIT;
}
@Override
@NotNull
public DebuggerSettingsPanelProvider getSettingsPanelProvider() {
return myDebuggerSettingsPanelProvider;
}
private static class JavaBreakpointPanelProvider extends BreakpointPanelProvider<Breakpoint> {
//private final List<MyBreakpointManagerListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
@@ -333,19 +322,6 @@ public class JavaDebuggerSupport extends DebuggerSupport {
//}
}
final static class JavaDebuggerSettingsPanelProvider extends DebuggerSettingsPanelProvider {
@Override
public int getPriority() {
return 1;
}
@NotNull
@Override
public Collection<? extends Configurable> getConfigurables() {
return Collections.singletonList(new UserRenderersConfigurable(null));
}
}
public static Project getContextProjectForEditorFieldsInDebuggerConfigurables() {
//todo[nik] improve
Project project = CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext());
@@ -10,6 +10,7 @@
<extensionPoint name="xdebugger.settings" interface="com.intellij.xdebugger.settings.XDebuggerSettings"/>
<extensionPoint name="xdebugger.breakpointType" interface="com.intellij.xdebugger.breakpoints.XBreakpointType"/>
<extensionPoint name="xdebugger.debuggerSupport" interface="com.intellij.xdebugger.impl.DebuggerSupport"/>
<extensionPoint name="xdebugger.configurableProvider" interface="com.intellij.xdebugger.settings.DebuggerConfigurableProvider"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
@@ -29,11 +30,12 @@
<projectService serviceInterface="com.intellij.xdebugger.impl.XDebuggerHistoryManager"
serviceImplementation="com.intellij.xdebugger.impl.XDebuggerHistoryManager"/>
<applicationConfigurable groupId="build" dynamic="true" key="debugger.configurable.display.name" bundle="messages.XDebuggerBundle" provider="com.intellij.xdebugger.impl.settings.DebuggerConfigurableProvider"/>
<applicationConfigurable groupId="build" dynamic="true" key="debugger.configurable.display.name" bundle="messages.XDebuggerBundle" instance="com.intellij.xdebugger.impl.settings.DebuggerConfigurable"/>
<customizableActionGroupProvider implementation="com.intellij.xdebugger.impl.ui.XDebugTabCustomizableActionGroupProvider"/>
<xdebugger.debuggerSupport implementation="com.intellij.xdebugger.impl.XDebuggerSupport" order="first"/>
<xdebugger.configurableProvider implementation="com.intellij.xdebugger.impl.settings.XDebuggerConfigurableProvider" order="first"/>
<executor implementation="com.intellij.execution.executors.DefaultDebugExecutor" order="first,after run"/>
</extensions>
@@ -0,0 +1,38 @@
/*
* 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.settings;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.options.Configurable;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Collections;
public abstract class DebuggerConfigurableProvider {
public static final ExtensionPointName<DebuggerConfigurableProvider> EXTENSION_POINT = ExtensionPointName.create("com.intellij.xdebugger.configurableProvider");
@NotNull
public Collection<? extends Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category) {
return Collections.emptyList();
}
/**
* General settings of category were applied
*/
public void generalApplied(@NotNull DebuggerSettingsCategory category) {
}
}
@@ -0,0 +1,6 @@
package com.intellij.xdebugger.settings;
public enum DebuggerSettingsCategory {
ROOT /* will be placed under root "Debugger" node, use it with care */,
GENERAL, DATA_VIEWS, STEPPING, HOTSWAP
}
@@ -23,6 +23,9 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.Collections;
/**
* Implement this class to provide settings page for debugger. Settings page will be placed under 'Debugger' node in the 'Settings' dialog.
* An implementation should be registered in plugin.xml:
@@ -34,10 +37,6 @@ import org.jetbrains.annotations.Nullable;
* @author nik
*/
public abstract class XDebuggerSettings<T> implements PersistentStateComponent<T> {
public enum Category {
GENERAL, DATA_VIEWS, STEPPING, HOTSWAP
}
public static final ExtensionPointName<XDebuggerSettings> EXTENSION_POINT = ExtensionPointName.create("com.intellij.xdebugger.settings");
private final String myId;
@@ -57,17 +56,17 @@ public abstract class XDebuggerSettings<T> implements PersistentStateComponent<T
@Nullable
@Deprecated
/**
* @deprecated Please use {@link #createConfigurable(com.intellij.xdebugger.settings.XDebuggerSettings.Category)}
* @deprecated Please use {@link #createConfigurables(DebuggerSettingsCategory)}
*/
public Configurable createConfigurable() {
return null;
}
@Nullable
public Configurable createConfigurable(@NotNull Category category) {
return null;
@NotNull
public Collection<? extends Configurable> createConfigurables(@NotNull DebuggerSettingsCategory category) {
return Collections.emptyList();
}
public void generalApplied(@NotNull Category category) {
public void generalApplied(@NotNull DebuggerSettingsCategory category) {
}
}
@@ -36,6 +36,7 @@ import org.jetbrains.annotations.Nullable;
public abstract class DebuggerSupport {
private static final ExtensionPointName<DebuggerSupport> EXTENSION_POINT = ExtensionPointName.create("com.intellij.xdebugger.debuggerSupport");
@SuppressWarnings("deprecation")
private static final DebuggerSettingsPanelProvider EMPTY_SETTINGS_PANEL_PROVIDER = new DebuggerSettingsPanelProvider() {
};
@@ -60,6 +61,11 @@ public abstract class DebuggerSupport {
@NotNull
public abstract BreakpointPanelProvider<?> getBreakpointPanelProvider();
/**
* @deprecated Use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider}
*/
@Deprecated
@SuppressWarnings("deprecation")
@NotNull
public DebuggerSettingsPanelProvider getSettingsPanelProvider() {
return EMPTY_SETTINGS_PANEL_PROVIDER;
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* 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.
@@ -26,8 +26,6 @@ import com.intellij.xdebugger.impl.breakpoints.XBreakpointPanelProvider;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.evaluate.quick.XQuickEvaluateHandler;
import com.intellij.xdebugger.impl.evaluate.quick.common.QuickEvaluateHandler;
import com.intellij.xdebugger.impl.settings.DebuggerSettingsPanelProvider;
import com.intellij.xdebugger.impl.settings.XDebuggerSettingsPanelProviderImpl;
import org.jetbrains.annotations.NotNull;
/**
@@ -49,7 +47,6 @@ public class XDebuggerSupport extends DebuggerSupport {
private final XDebuggerSuspendedActionHandler myShowExecutionPointHandler;
private final XDebuggerEvaluateActionHandler myEvaluateHandler;
private final XQuickEvaluateHandler myQuickEvaluateHandler;
private final XDebuggerSettingsPanelProviderImpl mySettingsPanelProvider;
private final XAddToWatchesFromEditorActionHandler myAddToWatchesActionHandler;
private final DebuggerActionHandler myEvaluateInConsoleActionHandler = new XEvaluateInConsoleFromEditorActionHandler();
@@ -118,7 +115,6 @@ public class XDebuggerSupport extends DebuggerSupport {
myMuteBreakpointsHandler = new XDebuggerMuteBreakpointsHandler();
myEvaluateHandler = new XDebuggerEvaluateActionHandler();
myQuickEvaluateHandler = new XQuickEvaluateHandler();
mySettingsPanelProvider = new XDebuggerSettingsPanelProviderImpl();
myMarkObjectActionHandler = new XMarkObjectActionHandler();
myEditBreakpointActionHandler = new XDebuggerEditBreakpointActionHandler();
}
@@ -253,10 +249,4 @@ public class XDebuggerSupport extends DebuggerSupport {
public EditBreakpointActionHandler getEditBreakpointAction() {
return myEditBreakpointActionHandler;
}
@Override
@NotNull
public DebuggerSettingsPanelProvider getSettingsPanelProvider() {
return mySettingsPanelProvider;
}
}
@@ -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
@@ -23,8 +23,8 @@ 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 com.intellij.xdebugger.settings.XDebuggerSettings.Category;
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;
@@ -32,14 +32,11 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
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 Category[] MERGED_CATEGORIES = {Category.STEPPING, Category.HOTSWAP};
private static final DebuggerSettingsCategory[] MERGED_CATEGORIES = {DebuggerSettingsCategory.STEPPING, DebuggerSettingsCategory.HOTSWAP};
private Configurable myRootConfigurable;
private Configurable[] myChildren;
@@ -71,14 +68,14 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
return;
}
List<DebuggerSettingsPanelProvider> providers = getSortedProviders();
List<Configurable> configurables = new SmartList<Configurable>();
configurables.add(new DataViewsConfigurable());
DebuggerConfigurableProvider[] providers = DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions();
computeMergedConfigurables(providers, configurables);
for (DebuggerSettingsPanelProvider provider : providers) {
//noinspection deprecation
for (DebuggerSettingsPanelProvider provider : getSortedProviders()) {
configurables.addAll(provider.getConfigurables());
@SuppressWarnings("deprecation")
Configurable providerRootConfigurable = provider.getRootConfigurable();
@@ -113,8 +110,8 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
}
}
private static void computeMergedConfigurables(@NotNull List<DebuggerSettingsPanelProvider> providers, @NotNull List<Configurable> result) {
for (Category category : MERGED_CATEGORIES) {
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);
@@ -125,8 +122,8 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
}
@Nullable
private static MergedCompositeConfigurable computeGeneralConfigurables(@NotNull List<DebuggerSettingsPanelProvider> providers) {
List<Configurable> rootConfigurables = getConfigurables(Category.GENERAL, providers);
private static MergedCompositeConfigurable computeGeneralConfigurables(@NotNull DebuggerConfigurableProvider[] providers) {
List<Configurable> rootConfigurables = getConfigurables(DebuggerSettingsCategory.GENERAL, providers);
if (rootConfigurables.isEmpty()) {
return null;
}
@@ -198,6 +195,7 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
return "project.propDebugger";
}
@SuppressWarnings("deprecation")
@NotNull
private static List<DebuggerSettingsPanelProvider> getSortedProviders() {
List<DebuggerSettingsPanelProvider> providers = null;
@@ -225,15 +223,14 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
}
@NotNull
static List<Configurable> getConfigurables(@NotNull XDebuggerSettings.Category category) {
List<DebuggerSettingsPanelProvider> providers = getSortedProviders();
return providers.isEmpty() ? Collections.<Configurable>emptyList() : getConfigurables(category, providers);
static List<Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category) {
return getConfigurables(category, DebuggerConfigurableProvider.EXTENSION_POINT.getExtensions());
}
@NotNull
private static List<Configurable> getConfigurables(@NotNull XDebuggerSettings.Category category, @NotNull List<DebuggerSettingsPanelProvider> providers) {
private static List<Configurable> getConfigurables(@NotNull DebuggerSettingsCategory category, @NotNull DebuggerConfigurableProvider[] providers) {
List<Configurable> configurables = null;
for (DebuggerSettingsPanelProvider provider : providers) {
for (DebuggerConfigurableProvider provider : providers) {
Collection<? extends Configurable> providerConfigurables = provider.getConfigurables(category);
if (!providerConfigurables.isEmpty()) {
if (configurables == null) {
@@ -1,29 +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.openapi.options.ConfigurableProvider;
/**
* @author nik
*/
public class DebuggerConfigurableProvider extends ConfigurableProvider {
@Override
public Configurable createConfigurable() {
return new DebuggerConfigurable();
}
}
@@ -16,15 +16,15 @@
package com.intellij.xdebugger.impl.settings;
import com.intellij.openapi.options.Configurable;
import com.intellij.xdebugger.settings.XDebuggerSettings.Category;
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() {
@@ -38,7 +38,7 @@ public abstract class DebuggerSettingsPanelProvider {
@Deprecated
/**
* @deprecated Please use {@link #generalApplied(Category)}
* @deprecated Please use {@link com.intellij.xdebugger.settings.DebuggerConfigurableProvider#generalApplied(com.intellij.xdebugger.settings.DebuggerSettingsCategory)}
*/
public void apply() {
}
@@ -46,21 +46,10 @@ public abstract class DebuggerSettingsPanelProvider {
@Nullable
@Deprecated
/**
* @deprecated Please use {@link #getConfigurables(Category)} and
* check {@link Category#GENERAL}
* @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 Configurable getRootConfigurable() {
return null;
}
@NotNull
public Collection<? extends Configurable> getConfigurables(@NotNull Category category) {
return Collections.emptyList();
}
/**
* General settings of category were applied
*/
public void generalApplied(@NotNull Category category) {
}
}
@@ -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;
@@ -164,8 +164,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());
}
}
@@ -0,0 +1,64 @@
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);
}
}
}
@@ -1,77 +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.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.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> getConfigurables(@NotNull XDebuggerSettings.Category category) {
List<Configurable> list;
if (category == XDebuggerSettings.Category.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()) {
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);
}
}
}
@@ -23,19 +23,24 @@ import com.intellij.openapi.options.SimpleConfigurable;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.util.xmlb.XmlSerializerUtil;
import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
import com.intellij.xdebugger.settings.XDebuggerSettings;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.GroovyBundle;
import java.util.Collection;
import java.util.Collections;
import static java.util.Collections.singletonList;
/**
* @author ilyas
*/
@State(
name = "GroovyDebuggerSettings",
storages = {
name = "GroovyDebuggerSettings",
storages = {
@Storage(
file = StoragePathMacros.APP_CONFIG + "/groovy_debug.xml"
file = StoragePathMacros.APP_CONFIG + "/groovy_debug.xml"
)}
)
public class GroovyDebuggerSettings extends XDebuggerSettings<GroovyDebuggerSettings> implements Getter<GroovyDebuggerSettings> {
@@ -46,17 +51,19 @@ public class GroovyDebuggerSettings extends XDebuggerSettings<GroovyDebuggerSett
super("groovy_debugger");
}
@NotNull
@SuppressWarnings("EnumSwitchStatementWhichMissesCases")
@Nullable
@Override
public Configurable createConfigurable(@NotNull Category category) {
public Collection<? extends Configurable> createConfigurables(@NotNull DebuggerSettingsCategory category) {
switch (category) {
case STEPPING:
return SimpleConfigurable.create("reference.idesettings.debugger.groovy", GroovyBundle.message("groovy.debug.caption"), GroovySteppingConfigurableUi.class, this);
return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.groovy", GroovyBundle.message("groovy.debug.caption"),
"reference.idesettings.debugger.groovy", GroovySteppingConfigurableUi.class, this));
case HOTSWAP:
return SimpleConfigurable.create("reference.idesettings.debugger.groovy", GroovyBundle.message("groovy.debug.caption"), GroovyHotSwapConfigurableUi.class, this);
return singletonList(SimpleConfigurable.create("reference.idesettings.debugger.groovy", GroovyBundle.message("groovy.debug.caption"),
"reference.idesettings.debugger.groovy", GroovyHotSwapConfigurableUi.class, this));
}
return null;
return Collections.emptyList();
}
@Override
@@ -228,7 +228,7 @@ label.threads.view.configurable.current.thread.on.top=Move current thread to the
label.threads.view.configurable.show.stack.frames.for.synthetic.methods=Show stack &frames for synthetic methods
label.threads.view.configurable.show.thread.groups=Show thread &groups
threads.view.configurable.display.name=Customize Threads View
user.renderers.configurable.display.name=Data Type Renderers
user.renderers.configurable.display.name=Java Data Type Renderers
label.user.renderers.configurable.renderer.name=Renderer name:
text.user.renderers.configurable.no.renderers=No renderers
button.copy=Copy