diff --git a/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java b/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java index b4b654d423b5..6d924a380974 100644 --- a/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java +++ b/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java @@ -113,7 +113,7 @@ public class ClassFilterEditor extends JPanel implements ComponentWithEmptyText myTable.setTableHeader(null); myTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); myTable.setColumnSelectionAllowed(false); - myTable.setPreferredScrollableViewportSize(new Dimension(200, 100)); + myTable.setPreferredScrollableViewportSize(new Dimension(200, myTable.getRowHeight() * JBTable.PREFERRED_SCROLLABLE_VIEWPORT_HEIGHT_IN_ROWS)); TableColumnModel columnModel = myTable.getColumnModel(); TableColumn column = columnModel.getColumn(FilterTableModel.CHECK_MARK); diff --git a/platform/platform-api/src/com/intellij/ui/table/JBTable.java b/platform/platform-api/src/com/intellij/ui/table/JBTable.java index 796bf165fa02..e7ff935e57f9 100644 --- a/platform/platform-api/src/com/intellij/ui/table/JBTable.java +++ b/platform/platform-api/src/com/intellij/ui/table/JBTable.java @@ -38,6 +38,8 @@ import java.util.Comparator; import java.util.EventObject; public class JBTable extends JTable implements ComponentWithEmptyText, ComponentWithExpandableItems { + public static final int PREFERRED_SCROLLABLE_VIEWPORT_HEIGHT_IN_ROWS = 7; + private final StatusText myEmptyText; private final ExpandableItemsHandler myExpandableItemsHandler; diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ConfigurableBase.java b/platform/platform-impl/src/com/intellij/openapi/options/ConfigurableBase.java new file mode 100644 index 000000000000..104dc7b30ec7 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/options/ConfigurableBase.java @@ -0,0 +1,52 @@ +package com.intellij.openapi.options; + +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; + +public abstract class ConfigurableBase, S> implements SearchableConfigurable, Configurable.NoScroll { + private UI ui; + + @Nullable + @Override + public Runnable enableSearch(String option) { + return null; + } + + protected abstract S getSettings(); + + @Override + public void reset() { + if (ui != null) { + ui.reset(getSettings()); + } + } + + @Nullable + @Override + public final JComponent createComponent() { + if (ui == null) { + ui = createUi(); + } + return ui.getComponent(); + } + + protected abstract UI createUi(); + + @Override + public final boolean isModified() { + return ui != null && ui.isModified(getSettings()); + } + + @Override + public final void apply() { + if (ui != null) { + ui.apply(getSettings()); + } + } + + @Override + public void disposeUIResources() { + ui = null; + } +} \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ConfigurableUi.java b/platform/platform-impl/src/com/intellij/openapi/options/ConfigurableUi.java new file mode 100644 index 000000000000..e454099318ea --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/options/ConfigurableUi.java @@ -0,0 +1,16 @@ +package com.intellij.openapi.options; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; + +public interface ConfigurableUi { + void reset(@NotNull S settings); + + boolean isModified(@NotNull S settings); + + void apply(@NotNull S settings); + + @NotNull + JComponent getComponent(); +} \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java b/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java index dd41a33a9d15..8b148a3d791d 100644 --- a/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java +++ b/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java @@ -22,6 +22,7 @@ import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.*; +import com.intellij.ui.table.JBTable; import com.intellij.ui.table.TableView; import com.intellij.util.Function; import com.intellij.util.FunctionUtil; @@ -42,6 +43,7 @@ import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; +import java.awt.*; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Collections; @@ -71,6 +73,8 @@ public class TableModelEditor implements ElementProducer { table = new TableView(model); table.setDefaultEditor(Enum.class, ComboBoxTableCellEditor.INSTANCE); table.setStriped(true); + table.setEnableAntialiasing(true); + preferredScrollableViewportHeightInRows(JBTable.PREFERRED_SCROLLABLE_VIEWPORT_HEIGHT_IN_ROWS); new TableSpeedSearch(table); if (columns[0].getColumnClass() == Boolean.class && columns[0].getName().isEmpty()) { TableUtil.setupCheckboxColumn(table.getColumnModel().getColumn(0)); @@ -97,6 +101,11 @@ public class TableModelEditor implements ElementProducer { } } + public TableModelEditor preferredScrollableViewportHeightInRows(int rows) { + table.setPreferredScrollableViewportSize(new Dimension(200, table.getRowHeight() * rows)); + return this; + } + private void addDialogActions() { toolbarDecorator.setEditAction(new AnActionButtonRunnable() { @Override 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 9546278edf87..0bc11c9f9185 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/settings/XDebuggerSettings.java @@ -35,20 +35,11 @@ import org.jetbrains.annotations.Nullable; */ public abstract class XDebuggerSettings implements PersistentStateComponent { public enum Category { - DATA_VIEWS(true), STEPPING(true); - - private final boolean separatePage; - - Category(boolean separatePage) { - this.separatePage = separatePage; - } - - public boolean isSeparatePage() { - return separatePage; - } + ROOT, DATA_VIEWS, STEPPING; } public static final ExtensionPointName EXTENSION_POINT = ExtensionPointName.create("com.intellij.xdebugger.settings"); + private final String myId; protected XDebuggerSettings(final @NotNull @NonNls String id) { 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 new file mode 100644 index 000000000000..a4252968769c --- /dev/null +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java @@ -0,0 +1,88 @@ +package com.intellij.xdebugger.impl.settings; + +import com.intellij.openapi.options.Configurable; +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.options.SearchableConfigurable; +import com.intellij.openapi.ui.VerticalFlowLayout; +import com.intellij.ui.IdeBorderFactory; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; + +abstract class MergedCompositeConfigurable implements SearchableConfigurable { + protected final Configurable[] children; + protected JComponent rootComponent; + + protected MergedCompositeConfigurable(@NotNull Configurable[] children) { + this.children = children; + } + + @Nullable + @Override + public Runnable enableSearch(String option) { + return null; + } + + @Nullable + @Override + public String getHelpTopic() { + return children.length == 1 ? children[0].getHelpTopic() : null; + } + + @Nullable + @Override + public JComponent createComponent() { + if (rootComponent == null) { + if (children.length == 1) { + rootComponent = children[0].createComponent(); + } + else { + JPanel panel = new JPanel(new VerticalFlowLayout(0, 0)); + for (Configurable child : children) { + JComponent component = child.createComponent(); + assert component != null; + component.setBorder(IdeBorderFactory.createTitledBorder(child.getDisplayName(), false)); + panel.add(component); + } + rootComponent = panel; + } + } + return rootComponent; + } + + @Override + public boolean isModified() { + for (Configurable child : children) { + if (child.isModified()) { + return true; + } + } + return false; + } + + @Override + public void apply() throws ConfigurationException { + for (Configurable child : children) { + if (child.isModified()) { + child.apply(); + } + } + } + + @Override + public void reset() { + for (Configurable child : children) { + child.reset(); + } + } + + @Override + public void disposeUIResources() { + rootComponent = null; + + for (Configurable child : children) { + child.disposeUIResources(); + } + } +} \ No newline at end of file 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 index eca20339a2d8..5f16424c1790 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SteppingConfigurable.java @@ -17,16 +17,14 @@ package com.intellij.xdebugger.impl.settings; import com.intellij.openapi.options.Configurable; import com.intellij.xdebugger.XDebuggerBundle; -import com.intellij.xdebugger.settings.XDebuggerSettings; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import java.util.List; -class SteppingConfigurable extends SubCompositeConfigurable implements Configurable.NoScroll { +class SteppingConfigurable extends MergedCompositeConfigurable { public SteppingConfigurable(@NotNull List configurables) { - assert !configurables.isEmpty(); - children = configurables.toArray(new Configurable[configurables.size()]); + super(configurables.toArray(new Configurable[configurables.size()])); } @NotNull @@ -40,15 +38,4 @@ class SteppingConfigurable extends SubCompositeConfigurable implements Configura public String getDisplayName() { return XDebuggerBundle.message("debugger.stepping.display.name"); } - - @Override - protected DataViewsConfigurableUi createRootUi() { - return null; - } - - @NotNull - @Override - protected XDebuggerSettings.Category getCategory() { - return XDebuggerSettings.Category.STEPPING; - } } \ 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 a9c5ec6db4a6..1d4dc08326a5 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 @@ -35,7 +35,7 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent @Override public boolean hasOwnContent() { - return getCategory() != XDebuggerSettings.Category.STEPPING; + return true; } @Override @@ -80,7 +80,7 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent protected abstract XDebuggerSettings.Category getCategory(); private boolean isChildrenMerged() { - return children != null && (!getCategory().isSeparatePage() || children.length == 1); + return children != null && children.length == 1; } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsManager.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsManager.java index 8842639fce75..1d7c1dec08c3 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsManager.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsManager.java @@ -16,7 +16,6 @@ package com.intellij.xdebugger.impl.settings; import com.intellij.openapi.components.*; -import com.intellij.openapi.extensions.Extensions; import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters; import com.intellij.util.xmlb.XmlSerializer; import com.intellij.util.xmlb.annotations.AbstractCollection; @@ -102,9 +101,10 @@ public class XDebuggerSettingsManager extends com.intellij.xdebugger.settings.XD private void initSettings() { if (mySettingsById == null) { - mySettingsById = new HashMap>(); - mySettingsByClass = new HashMap, XDebuggerSettings>(); - for (XDebuggerSettings settings : Extensions.getExtensions(XDebuggerSettings.EXTENSION_POINT)) { + XDebuggerSettings[] extensions = XDebuggerSettings.EXTENSION_POINT.getExtensions(); + mySettingsById = new LinkedHashMap>(extensions.length); + mySettingsByClass = new LinkedHashMap, XDebuggerSettings>(extensions.length); + for (XDebuggerSettings settings : extensions) { mySettingsById.put(settings.getId(), settings); mySettingsByClass.put(settings.getClass(), settings); } diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index 2d656d93f8de..8e3d7103e250 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -445,13 +445,13 @@ - + - + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerClassFilterProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerClassFilterProvider.java similarity index 96% rename from plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerClassFilterProvider.java rename to plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerClassFilterProvider.java index 34830b9a8988..7b734a4654b5 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerClassFilterProvider.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerClassFilterProvider.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.plugins.groovy.debugger.filters; +package org.jetbrains.plugins.groovy.debugger; import com.intellij.ui.classFilter.ClassFilter; import com.intellij.ui.classFilter.DebuggerClassFilterProvider; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerSettings.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerSettings.java similarity index 86% rename from plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerSettings.java rename to plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerSettings.java index dbadd515c140..273fd4cb8531 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerSettings.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerSettings.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.plugins.groovy.debugger.filters; +package org.jetbrains.plugins.groovy.debugger; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; @@ -23,6 +23,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.util.xmlb.XmlSerializerUtil; import com.intellij.xdebugger.settings.XDebuggerSettings; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author ilyas @@ -35,7 +36,6 @@ import org.jetbrains.annotations.NotNull; )} ) public class GroovyDebuggerSettings extends XDebuggerSettings { - public Boolean DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS = true; public boolean ENABLE_GROOVY_HOTSWAP = Registry.is("enable.groovy.hotswap"); @@ -49,6 +49,15 @@ public class GroovyDebuggerSettings extends XDebuggerSettings -
- + + @@ -8,22 +8,14 @@ - - - - - - - - - + - + @@ -33,7 +25,7 @@ - + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerSettingsConfigurable.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerSettingsConfigurable.java similarity index 71% rename from plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerSettingsConfigurable.java rename to plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerSettingsConfigurable.java index 4638aca4bdc9..8f143d9a5fd1 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/filters/GroovyDebuggerSettingsConfigurable.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyDebuggerSettingsConfigurable.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.plugins.groovy.debugger.filters; +package org.jetbrains.plugins.groovy.debugger; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; @@ -29,7 +29,6 @@ import java.awt.event.ActionListener; * @author ilyas */ public class GroovyDebuggerSettingsConfigurable implements SearchableConfigurable { - private JCheckBox myIgnoreGroovyMethods; private JPanel myPanel; private JCheckBox myEnableHotSwap; private boolean isModified = false; @@ -37,19 +36,13 @@ public class GroovyDebuggerSettingsConfigurable implements SearchableConfigurabl public GroovyDebuggerSettingsConfigurable(final GroovyDebuggerSettings settings) { mySettings = settings; - final Boolean flag = settings.DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS; - myIgnoreGroovyMethods.setSelected(flag == null || flag.booleanValue()); - myIgnoreGroovyMethods.setSelected(mySettings.ENABLE_GROOVY_HOTSWAP); - ActionListener listener = new ActionListener() { + myEnableHotSwap.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - isModified = mySettings.DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS.booleanValue() != myIgnoreGroovyMethods.isSelected() || - mySettings.ENABLE_GROOVY_HOTSWAP != myEnableHotSwap.isSelected(); + isModified = mySettings.ENABLE_GROOVY_HOTSWAP != myEnableHotSwap.isSelected(); } - }; - myIgnoreGroovyMethods.addActionListener(listener); - myEnableHotSwap.addActionListener(listener); + }); } @Override @@ -59,6 +52,7 @@ public class GroovyDebuggerSettingsConfigurable implements SearchableConfigurabl } @Override + @NotNull public String getHelpTopic() { return "reference.idesettings.debugger.groovy"; } @@ -87,7 +81,6 @@ public class GroovyDebuggerSettingsConfigurable implements SearchableConfigurabl @Override public void apply() throws ConfigurationException { if (isModified) { - mySettings.DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS = myIgnoreGroovyMethods.isSelected(); mySettings.ENABLE_GROOVY_HOTSWAP = myEnableHotSwap.isSelected(); } isModified = false; @@ -95,8 +88,6 @@ public class GroovyDebuggerSettingsConfigurable implements SearchableConfigurabl @Override public void reset() { - final Boolean flag = mySettings.DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS; - myIgnoreGroovyMethods.setSelected(flag == null || flag.booleanValue()); myEnableHotSwap.setSelected(mySettings.ENABLE_GROOVY_HOTSWAP); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java index bd0398bf5dd1..95b93362c14d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyHotSwapper.java @@ -41,7 +41,6 @@ import com.intellij.psi.util.PsiModificationTracker; import com.intellij.util.PathUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.GroovyFileType; -import org.jetbrains.plugins.groovy.debugger.filters.GroovyDebuggerSettings; import java.io.File; import java.io.IOException; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurable.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurable.java new file mode 100644 index 000000000000..0e5d99552d47 --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurable.java @@ -0,0 +1,37 @@ +package org.jetbrains.plugins.groovy.debugger; + +import com.intellij.openapi.options.ConfigurableBase; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.GroovyBundle; + +class GroovySteppingConfigurable extends ConfigurableBase { + @Override + protected GroovyDebuggerSettings getSettings() { + return GroovyDebuggerSettings.getInstance(); + } + + @Override + protected GroovySteppingConfigurableUi createUi() { + return new GroovySteppingConfigurableUi(); + } + + @NotNull + @Override + public String getId() { + return "debugger.stepping.groovy"; + } + + @Nls + @Override + public String getDisplayName() { + return GroovyBundle.message("groovy.debug.caption"); + } + + @Nullable + @Override + public String getHelpTopic() { + return "reference.idesettings.debugger.groovy"; + } +} \ No newline at end of file diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurableUi.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurableUi.form new file mode 100644 index 000000000000..ac93a675fc77 --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurableUi.form @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurableUi.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurableUi.java new file mode 100644 index 000000000000..d0e9e9e766cb --- /dev/null +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovySteppingConfigurableUi.java @@ -0,0 +1,33 @@ +package org.jetbrains.plugins.groovy.debugger; + +import com.intellij.openapi.options.ConfigurableUi; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; + +class GroovySteppingConfigurableUi implements ConfigurableUi { + private JCheckBox ignoreGroovyMethods; + private JPanel rootPanel; + + @Override + public void reset(@NotNull GroovyDebuggerSettings settings) { + Boolean flag = settings.DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS; + ignoreGroovyMethods.setSelected(flag == null || flag.booleanValue()); + } + + @Override + public boolean isModified(@NotNull GroovyDebuggerSettings settings) { + return settings.DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS.booleanValue() != ignoreGroovyMethods.isSelected(); + } + + @Override + public void apply(@NotNull GroovyDebuggerSettings settings) { + settings.DEBUG_DISABLE_SPECIFIC_GROOVY_METHODS = ignoreGroovyMethods.isSelected(); + } + + @NotNull + @Override + public JComponent getComponent() { + return rootPanel; + } +} \ No newline at end of file