diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java index afc67e44b495..5766203dea0e 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java @@ -16,6 +16,8 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.lang.LanguageUtil; +import com.intellij.openapi.application.ReadAction; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.ProperTextRange; import com.intellij.openapi.util.Segment; import com.intellij.openapi.util.TextRange; @@ -88,7 +90,7 @@ class AnchorElementInfo extends SelfElementInfo { return packed1 == packed2; } if (packed1 != -1 || packed2 != -1) { - return areRestoredElementsEqual(other); + return ReadAction.compute(() -> Comparing.equal(restoreElement(), other.restoreElement())); } } return super.pointsToTheSameElementAs(other); diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/DirElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/DirElementInfo.java index 393523c753d9..5dc75b10cb3d 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/DirElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/DirElementInfo.java @@ -55,10 +55,7 @@ class DirElementInfo extends SmartPointerElementInfo { @Override public boolean pointsToTheSameElementAs(@NotNull SmartPointerElementInfo other) { - if (other instanceof DirElementInfo) { - return Comparing.equal(myVirtualFile, ((DirElementInfo)other).myVirtualFile); - } - return Comparing.equal(restoreElement(), other.restoreElement()); + return other instanceof DirElementInfo && Comparing.equal(myVirtualFile, ((DirElementInfo)other).myVirtualFile); } @Override diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java index 804a803f5be7..baa4a7ed2971 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java @@ -66,14 +66,7 @@ class FileElementInfo extends SmartPointerElementInfo { @Override public boolean pointsToTheSameElementAs(@NotNull SmartPointerElementInfo other) { - if (other instanceof FileElementInfo) { - return Comparing.equal(myVirtualFile, ((FileElementInfo)other).myVirtualFile); - } - if (other instanceof SelfElementInfo || other instanceof ClsElementInfo) { - // optimisation: SelfElementInfo need psi (parsing) for element restoration and apriori could not reference psi file - return false; - } - return Comparing.equal(restoreElement(), other.restoreElement()); + return other instanceof FileElementInfo && Comparing.equal(myVirtualFile, ((FileElementInfo)other).myVirtualFile); } @Override diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java index 6fe4bbd8fe95..b8a8e04a990c 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java @@ -15,10 +15,7 @@ */ package com.intellij.psi.impl.smartPointers; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Segment; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; @@ -57,12 +54,7 @@ class HardElementInfo extends SmartPointerElementInfo { @Override public boolean pointsToTheSameElementAs(@NotNull final SmartPointerElementInfo other) { - return Comparing.equal(myElement, ApplicationManager.getApplication().runReadAction(new Computable() { - @Override - public PsiElement compute() { - return other.restoreElement(); - } - })); + return other instanceof HardElementInfo && myElement.equals(((HardElementInfo)other).myElement); } @Override diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java index 509fefb3da60..b441ade85b43 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java @@ -192,13 +192,7 @@ public class SelfElementInfo extends SmartPointerElementInfo { && range1.getEndOffset() == range2.getEndOffset(); }); } - return areRestoredElementsEqual(other); - } - - boolean areRestoredElementsEqual(@NotNull final SmartPointerElementInfo other) { - return ApplicationManager.getApplication().runReadAction( - (Computable)() -> Comparing.equal(getVirtualFile(), other.getVirtualFile()) - && Comparing.equal(restoreElement(), other.restoreElement())); + return false; } @Override