diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java index afb5fa9a8b89..5212d68291bd 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java @@ -33,6 +33,7 @@ import com.intellij.ide.TreeExpander; import com.intellij.ide.ui.search.SearchUtil; import com.intellij.ide.ui.search.SearchableOptionsRegistrar; import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.colors.TextAttributesKey; @@ -43,6 +44,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.profile.ApplicationProfileManager; @@ -130,6 +132,10 @@ public class SingleInspectionProfilePanel extends JPanel { private Splitter myMainSplitter; private String[] myInitialScopesOrder; + private Disposable myDisposable = new Disposable() { + @Override + public void dispose() {} + }; public SingleInspectionProfilePanel(@NotNull InspectionProjectProfileManager projectProfileManager, @NotNull String inspectionProfileName, @@ -501,7 +507,7 @@ public class SingleInspectionProfilePanel extends JPanel { public InspectionProfileImpl getInspectionProfile() { return mySelectedProfile; } - }); + }, myDisposable); myTreeTable.setTreeCellRenderer(renderer); myTreeTable.setRootVisible(false); UIUtil.setLineStyleAngled(myTreeTable.getTree()); @@ -1020,6 +1026,8 @@ public class SingleInspectionProfilePanel extends JPanel { } } mySelectedProfile = null; + Disposer.dispose(myDisposable); + myDisposable = null; } private JPanel createInspectionProfileSettingsPanel() { diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java index 0a1043c8340e..866541a530d2 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/inspectionsTree/InspectionsConfigTreeTable.java @@ -23,6 +23,7 @@ import com.intellij.codeInspection.ex.ToolsImpl; import com.intellij.ide.IdeTooltip; import com.intellij.ide.IdeTooltipManager; import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; @@ -34,9 +35,10 @@ import com.intellij.ui.DoubleClickListener; import com.intellij.ui.treeStructure.treetable.TreeTable; import com.intellij.ui.treeStructure.treetable.TreeTableModel; import com.intellij.ui.treeStructure.treetable.TreeTableTree; +import com.intellij.util.Alarm; +import com.intellij.util.SingleAlarm; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.TextTransferable; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -62,8 +64,8 @@ public class InspectionsConfigTreeTable extends TreeTable { private final static int SEVERITIES_COLUMN = 1; private final static int IS_ENABLED_COLUMN = 2; - public InspectionsConfigTreeTable(final InspectionsConfigTreeTableSettings settings) { - super(new InspectionsConfigTreeTableModel(settings)); + public InspectionsConfigTreeTable(final InspectionsConfigTreeTableSettings settings, Disposable parentDisposable) { + super(new InspectionsConfigTreeTableModel(settings, parentDisposable)); final TableColumn severitiesColumn = getColumnModel().getColumn(SEVERITIES_COLUMN); severitiesColumn.setMaxWidth(20); @@ -180,9 +182,16 @@ public class InspectionsConfigTreeTable extends TreeTable { private final InspectionsConfigTreeTableSettings mySettings; private TreeTable myTreeTable; - public InspectionsConfigTreeTableModel(final InspectionsConfigTreeTableSettings settings) { + private SingleAlarm myUpdateAlarm; + + public InspectionsConfigTreeTableModel(final InspectionsConfigTreeTableSettings settings, Disposable parentDisposable) { super(settings.getRoot()); mySettings = settings; + myUpdateAlarm = new SingleAlarm(new Runnable() { + public void run() { + ((AbstractTableModel)myTreeTable.getModel()).fireTableDataChanged(); + } + }, 10, Alarm.ThreadToUse.SWING_THREAD, parentDisposable); } @Override @@ -275,11 +284,7 @@ public class InspectionsConfigTreeTable extends TreeTable { mySettings.onChanged(aNode); } if (myTreeTable != null) { - UIUtil.invokeLaterIfNeeded(new Runnable() { - public void run() { - ((AbstractTableModel)myTreeTable.getModel()).fireTableDataChanged(); - } - }); + myUpdateAlarm.cancelAndRequest(); } }