From a4134d0e9751a7701a6bd7cc88aa9a09c46714bb Mon Sep 17 00:00:00 2001 From: Anton Lobov Date: Tue, 24 Apr 2018 15:40:45 +0200 Subject: [PATCH] drop cached editor from EditorBasedStatusBarPopup as discussed per IDEA-CR-31987 --- .../status/EditorBasedStatusBarPopup.java | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EditorBasedStatusBarPopup.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EditorBasedStatusBarPopup.java index 50663e75c6b6..3720dba3de5e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EditorBasedStatusBarPopup.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EditorBasedStatusBarPopup.java @@ -13,7 +13,9 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.event.DocumentListener; -import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileEditor.FileEditorManagerEvent; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.openapi.util.Disposer; @@ -32,15 +34,11 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; -import java.lang.ref.Reference; -import java.lang.ref.WeakReference; public abstract class EditorBasedStatusBarPopup extends EditorBasedWidget implements StatusBarWidget.Multiframe, CustomStatusBarWidget { private final TextPanel.WithIconAndArrows myComponent; private boolean actionEnabled; private final Alarm update; - // store editor here to avoid expensive and EDT-only getSelectedEditor() retrievals - private volatile Reference myEditor = new WeakReference<>(null); public EditorBasedStatusBarPopup(@NotNull Project project) { super(project); @@ -66,22 +64,16 @@ public abstract class EditorBasedStatusBarPopup extends EditorBasedWidget implem @Override public void selectionChanged(@NotNull FileEditorManagerEvent event) { if (ApplicationManager.getApplication().isUnitTestMode()) return; - VirtualFile newFile = event.getNewFile(); - fileChanged(newFile); + fileChanged(); } - private void fileChanged(VirtualFile newFile) { - Project project = getProject(); - assert project != null; - FileEditor fileEditor = newFile == null ? null : FileEditorManager.getInstance(project).getSelectedEditor(newFile); - Editor editor = fileEditor instanceof TextEditor ? ((TextEditor)fileEditor).getEditor() : null; - myEditor = new WeakReference<>(editor); + private void fileChanged() { update(); } @Override public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) { - fileChanged(file); + fileChanged(); } @Override @@ -109,7 +101,7 @@ public abstract class EditorBasedStatusBarPopup extends EditorBasedWidget implem } protected void updateForDocument(@Nullable("null means update anyway") Document document) { - Editor selectedEditor = myEditor.get(); + Editor selectedEditor = getEditor(); if (document != null && (selectedEditor == null || selectedEditor.getDocument() != document)) return; update(); }