From a0c93d20d7f7b4a3175dcb9b2e06db901a4710a7 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Fri, 13 May 2016 12:45:12 +0300 Subject: [PATCH] [follow-up] reset FocusWatcher.myTopComponent to null Turn FocusWatcher.myTopComponent into weak ref. --- .../src/com/intellij/openapi/wm/FocusWatcher.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/platform/util/src/com/intellij/openapi/wm/FocusWatcher.java b/platform/util/src/com/intellij/openapi/wm/FocusWatcher.java index f921da45aa11..1712bcde83a3 100644 --- a/platform/util/src/com/intellij/openapi/wm/FocusWatcher.java +++ b/platform/util/src/com/intellij/openapi/wm/FocusWatcher.java @@ -34,7 +34,7 @@ import java.lang.ref.WeakReference; * @author Vladimir Kondratyev */ public class FocusWatcher implements ContainerListener,FocusListener{ - private Component myTopComponent; + private WeakReference myTopComponent; /** * Last component that had focus. */ @@ -52,7 +52,7 @@ public class FocusWatcher implements ContainerListener,FocusListener{ * on some component hierarchy. */ public Component getTopComponent() { - return myTopComponent; + return SoftReference.dereference(myTopComponent); } @Override @@ -77,6 +77,8 @@ public class FocusWatcher implements ContainerListener,FocusListener{ } public final void deinstall(final Component component, @Nullable AWTEvent cause){ + if (component == null) return; + if(component instanceof Container){ Container container=(Container)component; int componentCount=container.getComponentCount(); @@ -89,7 +91,6 @@ public class FocusWatcher implements ContainerListener,FocusListener{ if(getFocusedComponent() ==component){ setFocusedComponentImpl(null, cause); } - myTopComponent = null; } @Override @@ -108,7 +109,7 @@ public class FocusWatcher implements ContainerListener,FocusListener{ @Override public final void focusLost(final FocusEvent e){ Component component = e.getOppositeComponent(); - if(component != null && !SwingUtilities.isDescendingFrom(component, myTopComponent)){ + if(component != null && !SwingUtilities.isDescendingFrom(component, SoftReference.dereference(myTopComponent))){ focusLostImpl(e); } } @@ -125,7 +126,7 @@ public class FocusWatcher implements ContainerListener,FocusListener{ } public final void install(@NotNull Component component){ - myTopComponent = component; + myTopComponent = new WeakReference(component); installImpl(component); }