Use smart element pointer instead of weak reference to fix the IDEA-160333 Override...
authorAlexey Kudravtsev <cdr@intellij.com>
Mon, 29 Aug 2016 12:19:05 +0000 (15:19 +0300)
committerAlexey Kudravtsev <cdr@intellij.com>
Mon, 29 Aug 2016 12:32:12 +0000 (15:32 +0300)
platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java

index 560879fd906740e2ca10b2feefe08f2870375f16..499c38cbdd377eb24e3c55ff6ba162e3f30850e9 100644 (file)
@@ -24,17 +24,18 @@ import com.intellij.openapi.project.IndexNotReadyException;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.TextRange;
 import com.intellij.psi.PsiElement;
+import com.intellij.psi.SmartPointerManager;
+import com.intellij.psi.SmartPsiElementPointer;
 import com.intellij.util.Function;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.awt.*;
-import java.lang.ref.WeakReference;
 
 public class LineMarkerInfo<T extends PsiElement> {
   protected final Icon myIcon;
-  private final WeakReference<T> elementRef;
+  private final SmartPsiElementPointer<T> elementRef;
   public final int startOffset;
   public final int endOffset;
   public Color separatorColor;
@@ -50,7 +51,7 @@ public class LineMarkerInfo<T extends PsiElement> {
   /**
    * Creates a line marker info for the element.
    * @param element         the element for which the line marker is created.
-   * @param startOffset     the offset (relative to beginning of file) with which the marker is associated
+   * @param range     the range (relative to beginning of file) with which the marker is associated
    * @param icon            the icon to show in the gutter for the line marker
    * @param updatePass      the ID of the daemon pass during which the marker should be recalculated
    * @param tooltipProvider the callback to calculate the tooltip for the gutter icon
@@ -66,7 +67,7 @@ public class LineMarkerInfo<T extends PsiElement> {
     myIcon = icon;
     myTooltipProvider = tooltipProvider;
     myIconAlignment = alignment;
-    elementRef = new WeakReference<>(element);
+    elementRef = SmartPointerManager.getInstance(element.getProject()).createSmartPsiElementPointer(element);
     myNavigationHandler = navHandler;
     startOffset = range.getStartOffset();
     endOffset = range.getEndOffset();
@@ -113,7 +114,7 @@ public class LineMarkerInfo<T extends PsiElement> {
 
   @Nullable
   public T getElement() {
-    return elementRef.get();
+    return elementRef.getElement();
   }
 
   void setNavigateAction(@NotNull  AnAction navigateAction) {
@@ -191,6 +192,6 @@ public class LineMarkerInfo<T extends PsiElement> {
 
   @Override
   public String toString() {
-    return "("+startOffset+","+endOffset+") -> "+elementRef.get();
+    return "("+startOffset+","+endOffset+") -> "+elementRef;
   }
 }