From 2a759fa868fcf839a2a50c1f18199923034990bd Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 7 May 2020 11:22:00 +0200 Subject: [PATCH] Deprecate method to add PSI tree change listener without parent disposable, specify parent disposable whenever possible GitOrigin-RevId: f72ffbb4a0f71662aa1cca0f3c84b49b4df9cf2f --- platform/core-api/src/com/intellij/psi/PsiManager.java | 2 ++ .../com/intellij/psi/impl/PsiDocumentManagerBase.java | 2 +- .../com/intellij/ide/commander/AbstractListBuilder.java | 4 +++- .../src/com/intellij/ide/commander/CommanderPanel.java | 3 ++- .../com/intellij/ide/commander/ProjectListBuilder.java | 3 +-- .../com/intellij/ide/scopeView/ScopeTreeViewPanel.java | 6 +----- .../src/com/intellij/ide/todo/TodoTreeBuilder.java | 3 +-- .../intellij/lang/properties/ResourceBundleManager.java | 9 +++++++-- .../com/intellij/uiDesigner/designSurface/GuiEditor.java | 6 +++--- .../src/com/intellij/uiDesigner/editor/UIFormEditor.java | 3 ++- 10 files changed, 23 insertions(+), 18 deletions(-) diff --git a/platform/core-api/src/com/intellij/psi/PsiManager.java b/platform/core-api/src/com/intellij/psi/PsiManager.java index ae0e31861bc3..013aad486790 100644 --- a/platform/core-api/src/com/intellij/psi/PsiManager.java +++ b/platform/core-api/src/com/intellij/psi/PsiManager.java @@ -82,7 +82,9 @@ public abstract class PsiManager extends UserDataHolderBase { * Adds a listener for receiving notifications about all changes in the PSI tree of the project. * * @param listener the listener instance. + * @deprecated Please use the overload with specified parent disposable */ + @Deprecated public abstract void addPsiTreeChangeListener(@NotNull PsiTreeChangeListener listener); /** diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java index 956669d0b28e..958d851f38c7 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java @@ -73,7 +73,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen myPsiManager = PsiManager.getInstance(project); myDocumentCommitProcessor = ApplicationManager.getApplication().getService(DocumentCommitProcessor.class); mySynchronizer = new PsiToDocumentSynchronizer(this, project.getMessageBus()); - myPsiManager.addPsiTreeChangeListener(mySynchronizer); + myPsiManager.addPsiTreeChangeListener(mySynchronizer, this); } @Override diff --git a/platform/lang-impl/src/com/intellij/ide/commander/AbstractListBuilder.java b/platform/lang-impl/src/com/intellij/ide/commander/AbstractListBuilder.java index 6e1b50bd419d..2a412a365548 100644 --- a/platform/lang-impl/src/com/intellij/ide/commander/AbstractListBuilder.java +++ b/platform/lang-impl/src/com/intellij/ide/commander/AbstractListBuilder.java @@ -6,6 +6,7 @@ import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.ide.util.treeView.AbstractTreeStructure; import com.intellij.ide.util.treeView.IndexComparator; import com.intellij.ide.util.treeView.NodeDescriptor; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; @@ -24,7 +25,7 @@ import java.util.concurrent.TimeUnit; /** * @author Eugene Belyaev */ -public abstract class AbstractListBuilder { +public abstract class AbstractListBuilder implements Disposable { protected final Project myProject; protected final JList myList; protected final Model myModel; @@ -252,6 +253,7 @@ public abstract class AbstractListBuilder { protected abstract List> getAllAcceptableNodes(Object[] childElements, VirtualFile file); + @Override public void dispose() { myIsDisposed = true; } diff --git a/platform/lang-impl/src/com/intellij/ide/commander/CommanderPanel.java b/platform/lang-impl/src/com/intellij/ide/commander/CommanderPanel.java index 77783ec8ca95..19bd33255e12 100644 --- a/platform/lang-impl/src/com/intellij/ide/commander/CommanderPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/commander/CommanderPanel.java @@ -26,6 +26,7 @@ import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.ToolWindowManager; @@ -410,7 +411,7 @@ public class CommanderPanel extends JPanel { public final void dispose() { if (myBuilder != null) { - myBuilder.dispose(); + Disposer.dispose(myBuilder); myBuilder = null; } myProject = null; diff --git a/platform/lang-impl/src/com/intellij/ide/commander/ProjectListBuilder.java b/platform/lang-impl/src/com/intellij/ide/commander/ProjectListBuilder.java index fc89c50d4e24..01cc258d47ee 100644 --- a/platform/lang-impl/src/com/intellij/ide/commander/ProjectListBuilder.java +++ b/platform/lang-impl/src/com/intellij/ide/commander/ProjectListBuilder.java @@ -42,7 +42,7 @@ public class ProjectListBuilder extends AbstractListBuilder { myUpdateAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD, myProject); myPsiTreeChangeListener = new MyPsiTreeChangeListener(); - PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeListener); + PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeListener, this); myFileStatusListener = new MyFileStatusListener(); FileStatusManager.getInstance(myProject).addFileStatusListener(myFileStatusListener); myCopyPasteListener = new MyCopyPasteListener(); @@ -88,7 +88,6 @@ public class ProjectListBuilder extends AbstractListBuilder { @Override public void dispose() { super.dispose(); - PsiManager.getInstance(myProject).removePsiTreeChangeListener(myPsiTreeChangeListener); FileStatusManager.getInstance(myProject).removeFileStatusListener(myFileStatusListener); CopyPasteManager.getInstance().removeContentChangedListener(myCopyPasteListener); } diff --git a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java index ae80bd000b49..6dd09c733865 100644 --- a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeTreeViewPanel.java @@ -29,8 +29,6 @@ import com.intellij.openapi.editor.colors.CodeInsightColors; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.markup.EffectType; import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.openapi.extensions.ExtensionPointListener; -import com.intellij.openapi.extensions.PluginDescriptor; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.module.Module; @@ -66,7 +64,6 @@ import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.UiNotifyConnector; import com.intellij.util.ui.update.Update; import org.jetbrains.annotations.ApiStatus; -import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -173,7 +170,7 @@ public class ScopeTreeViewPanel extends JPanel implements Disposable { public void initListeners() { final MessageBusConnection connection = myProject.getMessageBus().connect(this); connection.subscribe(ProjectTopics.PROJECT_ROOTS, new MyModuleRootListener()); - PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeAdapter); + PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeAdapter, this); connection.subscribe(ProblemListener.TOPIC, new MyProblemListener()); FileStatusManager.getInstance(myProject).addFileStatusListener(myFileStatusListener, this); } @@ -181,7 +178,6 @@ public class ScopeTreeViewPanel extends JPanel implements Disposable { @Override public void dispose() { FileTreeModelBuilder.clearCaches(myProject); - PsiManager.getInstance(myProject).removePsiTreeChangeListener(myPsiTreeChangeAdapter); } public void selectNode(final PsiElement element, final PsiFileSystemItem file, final boolean requestFocus) { diff --git a/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java b/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java index 32e4d02d3b1e..37bd0569236c 100644 --- a/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java +++ b/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java @@ -15,7 +15,6 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.highlighter.EditorHighlighter; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; -import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; @@ -94,7 +93,7 @@ public abstract class TodoTreeBuilder implements Disposable { PsiManager psiManager = PsiManager.getInstance(myProject); mySearchHelper = PsiTodoSearchHelper.SERVICE.getInstance(myProject); - psiManager.addPsiTreeChangeListener(new MyPsiTreeChangeListener()); + psiManager.addPsiTreeChangeListener(new MyPsiTreeChangeListener(), this); myFileStatusListener = new MyFileStatusListener(); diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java index 13053b7872ce..b9a749915c51 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java @@ -3,6 +3,7 @@ package com.intellij.lang.properties; import com.intellij.lang.properties.editor.ResourceBundleAsVirtualFile; import com.intellij.lang.properties.psi.PropertiesFile; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ServiceManager; @@ -28,7 +29,7 @@ import java.util.Set; * @author Dmitry Batkovich */ @State(name = "ResourceBundleManager", storages = @Storage("resourceBundles.xml")) -public final class ResourceBundleManager implements PersistentStateComponent { +public final class ResourceBundleManager implements PersistentStateComponent, Disposable { private final static Logger LOG = Logger.getInstance(ResourceBundleManager.class); private ResourceBundleManagerState myState = new ResourceBundleManagerState(); @@ -157,7 +158,11 @@ public final class ResourceBundleManager implements PersistentStateComponent