From 37f4b655cd40ae9494898212ad39b40da21f879b Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 26 Jan 2010 21:39:12 +0300 Subject: [PATCH] reload scopes if they were changed (IDEA-24326 ); merge events on apply --- .../analysis/BaseAnalysisActionDialog.java | 2 ++ .../find/findUsages/AbstractFindUsagesDialog.java | 2 ++ .../src/com/intellij/find/impl/FindDialog.java | 2 ++ .../ide/util/scopeChooser/ScopeChooserCombo.java | 35 +++++++++++++++++++++- .../scopeChooser/ScopeChooserConfigurable.java | 10 ++++--- .../actions/BackwardDependenciesAction.java | 8 ++++- .../plugins/xpathView/eval/EvalFormPanel.java | 2 ++ .../xpathView/search/FindByExpressionDialog.java | 13 ++++---- .../plugins/xpathView/search/FindFormPanel.java | 10 +++++-- .../plugins/xpathView/search/ScopePanel.java | 8 ++++- .../intellij/plugins/xpathView/ui/InputForm.java | 4 ++- .../plugins/xpathView/ui/InputFormPanel.java | 2 ++ 12 files changed, 81 insertions(+), 17 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisActionDialog.java b/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisActionDialog.java index 65b525d392..4efae3ccd1 100644 --- a/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisActionDialog.java +++ b/platform/lang-impl/src/com/intellij/analysis/BaseAnalysisActionDialog.java @@ -25,6 +25,7 @@ import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.ChangeList; @@ -81,6 +82,7 @@ public class BaseAnalysisActionDialog extends DialogWrapper { @NotNull AnalysisUIOptions analysisUIOptions, @Nullable PsiElement context) { super(true); + Disposer.register(myDisposable, myScopeCombo); myAnalysisOptions = analysisUIOptions; myContext = context; if (!analysisUIOptions.ANALYZE_TEST_SOURCES) { diff --git a/platform/lang-impl/src/com/intellij/find/findUsages/AbstractFindUsagesDialog.java b/platform/lang-impl/src/com/intellij/find/findUsages/AbstractFindUsagesDialog.java index 35e3e84622..3c241d0457 100644 --- a/platform/lang-impl/src/com/intellij/find/findUsages/AbstractFindUsagesDialog.java +++ b/platform/lang-impl/src/com/intellij/find/findUsages/AbstractFindUsagesDialog.java @@ -20,6 +20,7 @@ import com.intellij.find.FindSettings; import com.intellij.ide.util.scopeChooser.ScopeChooserCombo; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.ui.IdeBorderFactory; @@ -269,6 +270,7 @@ public abstract class AbstractFindUsagesDialog extends DialogWrapper { optionsPanel.add(label, BorderLayout.WEST); String scope = myFindUsagesOptions.searchScope.getDisplayName(); myScopeCombo = new ScopeChooserCombo(myProject, mySearchInLibrariesAvailable, true, scope); + Disposer.register(myDisposable, myScopeCombo); optionsPanel.add(myScopeCombo, BorderLayout.CENTER); label.setLabelFor(myScopeCombo.getComboBox()); return optionsPanel; diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindDialog.java b/platform/lang-impl/src/com/intellij/find/impl/FindDialog.java index eceab2a6c8..650f949d0e 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindDialog.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindDialog.java @@ -38,6 +38,7 @@ import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.*; import com.intellij.openapi.ui.popup.JBPopup; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; @@ -730,6 +731,7 @@ final class FindDialog extends DialogWrapper { gbConstraints.gridx++; gbConstraints.gridwidth = GridBagConstraints.REMAINDER; myScopeCombo = new ScopeChooserCombo(myProject, true, true, FindSettings.getInstance().getDefaultScopeName()); + Disposer.register(myDisposable, myScopeCombo); scopePanel.add(myScopeCombo, gbConstraints); diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java index 948d20f7e6..409816a012 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserCombo.java @@ -18,6 +18,7 @@ package com.intellij.ide.util.scopeChooser; import com.intellij.ide.DataManager; import com.intellij.ide.IdeBundle; import com.intellij.ide.favoritesTreeView.FavoritesManager; +import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.editor.Editor; @@ -28,6 +29,7 @@ import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.changes.ChangeListManager; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.packageDependencies.DependencyValidationManager; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -36,6 +38,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.scope.packageSet.NamedScope; +import com.intellij.psi.search.scope.packageSet.NamedScopeManager; import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.ui.ComboboxWithBrowseButton; @@ -56,11 +59,14 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -public class ScopeChooserCombo extends ComboboxWithBrowseButton { +public class ScopeChooserCombo extends ComboboxWithBrowseButton implements Disposable { private Project myProject; private boolean mySuggestSearchInLibs; private boolean myPrevSearchFiles; + private NamedScopesHolder.ScopeListener myScopeListener; + private NamedScopeManager myNamedScopeManager; + private DependencyValidationManager myValidationManager; public ScopeChooserCombo() { } @@ -78,6 +84,19 @@ public class ScopeChooserCombo extends ComboboxWithBrowseButton { myPrevSearchFiles = prevSearchWholeFiles; final JComboBox combo = getComboBox(); myProject = project; + myScopeListener = new NamedScopesHolder.ScopeListener() { + public void scopesChanged() { + final SearchScope selectedScope = getSelectedScope(); + rebuildModel(); + if (selectedScope != null) { + selectScope(selectedScope.getDisplayName()); + } + } + }; + myNamedScopeManager = NamedScopeManager.getInstance(project); + myNamedScopeManager.addScopeListener(myScopeListener); + myValidationManager = DependencyValidationManager.getInstance(project); + myValidationManager.addScopeListener(myScopeListener); addActionListener(createScopeChooserListener()); combo.setRenderer(new DefaultListCellRenderer() { @@ -95,6 +114,20 @@ public class ScopeChooserCombo extends ComboboxWithBrowseButton { selectScope(preselect); } + @Override + public void dispose() { + super.dispose(); + if (myValidationManager != null) { + myValidationManager.removeScopeListener(myScopeListener); + myValidationManager = null; + } + if (myNamedScopeManager != null) { + myNamedScopeManager.removeScopeListener(myScopeListener); + myNamedScopeManager = null; + } + myScopeListener = null; + } + private void selectScope(String preselect) { if (preselect != null) { final JComboBox combo = getComboBox(); diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java index a18e670070..f513cadfb6 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeChooserConfigurable.java @@ -175,19 +175,21 @@ public class ScopeChooserConfigurable extends MasterDetailsComponent implements } private void processScopes() { - myLocalScopesManager.removeAllSets(); - mySharedScopesManager.removeAllSets(); + final List localScopes = new ArrayList(); + final List sharedScopes = new ArrayList(); for (int i = 0; i < myRoot.getChildCount(); i++) { final MyNode node = (MyNode)myRoot.getChildAt(i); final ScopeConfigurable scopeConfigurable = (ScopeConfigurable)node.getConfigurable(); final NamedScope namedScope = scopeConfigurable.getScope(); if (scopeConfigurable.getHolder() == myLocalScopesManager) { - myLocalScopesManager.addScope(namedScope); + localScopes.add(namedScope); } else { - mySharedScopesManager.addScope(namedScope); + sharedScopes.add(namedScope); } } + myLocalScopesManager.setScopes(localScopes.toArray(new NamedScope[localScopes.size()])); + mySharedScopesManager.setScopes(sharedScopes.toArray(new NamedScope[sharedScopes.size()])); } private void reloadTree() { diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/actions/BackwardDependenciesAction.java b/platform/lang-impl/src/com/intellij/packageDependencies/actions/BackwardDependenciesAction.java index 3369a9fa61..116e81690c 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/actions/BackwardDependenciesAction.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/actions/BackwardDependenciesAction.java @@ -22,6 +22,7 @@ import com.intellij.analysis.BaseAnalysisAction; import com.intellij.analysis.BaseAnalysisActionDialog; import com.intellij.ide.util.scopeChooser.ScopeChooserCombo; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import com.intellij.psi.search.SearchScope; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,12 +45,17 @@ public class BackwardDependenciesAction extends BaseAnalysisAction { scope.setSearchInLibraries(true); //find library usages in project final SearchScope selectedScope = myPanel.myCombo.getSelectedScope(); new BackwardDependenciesHandler(project, scope, selectedScope != null ? new AnalysisScope(selectedScope, project) : new AnalysisScope(project)).analyze(); - myPanel = null; + dispose(); } @Override protected void canceled() { super.canceled(); + dispose(); + } + + private void dispose() { + Disposer.dispose(myPanel.myCombo); myPanel = null; } diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/eval/EvalFormPanel.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/eval/EvalFormPanel.java index 272362c6e4..c7bfcbe445 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/eval/EvalFormPanel.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/eval/EvalFormPanel.java @@ -60,4 +60,6 @@ public class EvalFormPanel extends JPanel implements InputForm { public JCheckBox getUsageViewCheckbox() { return myUsageViewCheckbox; } + + public void dispose() {} } diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindByExpressionDialog.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindByExpressionDialog.java index 48ad5a2345..09359431e8 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindByExpressionDialog.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindByExpressionDialog.java @@ -15,16 +15,16 @@ */ package org.intellij.plugins.xpathView.search; -import org.intellij.plugins.xpathView.Config; -import org.intellij.plugins.xpathView.HistoryElement; -import org.intellij.plugins.xpathView.ui.InputExpressionDialog; -import org.intellij.plugins.xpathView.ui.Mode; - import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; +import com.intellij.openapi.wm.ToolWindowManager; +import org.intellij.plugins.xpathView.Config; +import org.intellij.plugins.xpathView.HistoryElement; +import org.intellij.plugins.xpathView.ui.InputExpressionDialog; +import org.intellij.plugins.xpathView.ui.Mode; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -53,6 +53,7 @@ public class FindByExpressionDialog extends InputExpressionDialog myForm.getMatchEachNode().setSelected(mySettings.MATCH_RECURSIVELY); myForm.getMatchRootNode().setSelected(!mySettings.MATCH_RECURSIVELY); + Disposer.register(myDisposable, myForm); super.init(); } diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindFormPanel.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindFormPanel.java index 224ba65896..a9f617557f 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindFormPanel.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/FindFormPanel.java @@ -15,11 +15,11 @@ */ package org.intellij.plugins.xpathView.search; -import org.intellij.plugins.xpathView.ui.InputForm; -import org.intellij.plugins.xpathView.ui.InputFormPanel; - import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; +import org.intellij.plugins.xpathView.ui.InputForm; +import org.intellij.plugins.xpathView.ui.InputFormPanel; import javax.swing.*; @@ -85,4 +85,8 @@ public class FindFormPanel extends JPanel implements InputForm { public JPanel getOptionsPanel() { return myOptionsPanel; } + + public void dispose() { + Disposer.dispose(myScopePanel); + } } diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/ScopePanel.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/ScopePanel.java index 3b33c87a3d..fa4e06f915 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/ScopePanel.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/ScopePanel.java @@ -16,12 +16,14 @@ package org.intellij.plugins.xpathView.search; import com.intellij.ide.util.scopeChooser.ScopeChooserCombo; +import com.intellij.openapi.Disposable; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.ui.TextFieldWithBrowseButton; +import com.intellij.openapi.util.Disposer; import com.intellij.ui.ComboboxWithBrowseButton; import com.intellij.ui.DocumentAdapter; import org.jetbrains.annotations.NotNull; @@ -35,7 +37,7 @@ import java.awt.event.ItemListener; import java.util.Arrays; import java.util.Vector; -public class ScopePanel extends JPanel { +public class ScopePanel extends JPanel implements Disposable{ @SuppressWarnings({ "FieldCanBeLocal", "UnusedDeclaration" }) private JPanel myRoot; @@ -174,4 +176,8 @@ public class ScopePanel extends JPanel { getModuleName(), ((ScopeChooserCombo)myCustomScopeSelection).getSelectedScopeName()); } + + public void dispose() { + Disposer.dispose(myCustomScopeSelection); + } } diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputForm.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputForm.java index 25201957f6..7f81fe0a43 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputForm.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputForm.java @@ -15,9 +15,11 @@ */ package org.intellij.plugins.xpathView.ui; +import com.intellij.openapi.Disposable; + import javax.swing.*; -public interface InputForm { +public interface InputForm extends Disposable { JComponent getComponent(); JLabel getIcon(); diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputFormPanel.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputFormPanel.java index c4d8f3a2ec..74d69147ff 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputFormPanel.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/InputFormPanel.java @@ -47,4 +47,6 @@ public class InputFormPanel extends JPanel implements InputForm { public JPanel getEditorPanel() { return myEditorPanel; } + + public void dispose() {} } -- 2.11.4.GIT