remove SmartPsiElementPointerImpl.myElementClass
authorpeter <peter@jetbrains.com>
Tue, 15 Nov 2016 15:59:44 +0000 (16:59 +0100)
committerpeter <peter@jetbrains.com>
Tue, 15 Nov 2016 16:00:08 +0000 (17:00 +0100)
platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java
platform/core-impl/src/com/intellij/psi/impl/smartPointers/Identikit.java
platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java
platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiFileRangePointerImpl.java

index 8b1142c6d8f3e0f479a110ad834b5738f8742025..804a803f5be7177c91273af573ad0b13504d30c5 100644 (file)
@@ -38,16 +38,19 @@ class FileElementInfo extends SmartPointerElementInfo {
   private final VirtualFile myVirtualFile;
   private final Project myProject;
   private final Language myLanguage;
+  private final Class<? extends PsiFile> myFileClass;
 
   public FileElementInfo(@NotNull final PsiFile file) {
     myVirtualFile = file.getVirtualFile();
     myProject = file.getProject();
     myLanguage = LanguageUtil.getRootLanguage(file);
+    myFileClass = file.getClass();
   }
 
   @Override
   public PsiElement restoreElement() {
-    return SelfElementInfo.restoreFileFromVirtual(myVirtualFile, myProject, myLanguage);
+    PsiFile file = SelfElementInfo.restoreFileFromVirtual(myVirtualFile, myProject, myLanguage);
+    return myFileClass.isInstance(file) ? file : null;
   }
 
   @Override
index 5b7c186566b77f00c4ac76e2ea8c34704438186c..17d934a81cdd515a4605d83e0917cf7eb21b7d1f 100644 (file)
@@ -195,7 +195,8 @@ public abstract class Identikit {
     @Override
     public PsiElement findPsiElement(@NotNull PsiFile file, int startOffset, int endOffset) {
       PsiElement anchor = myAnchorInfo.findPsiElement(file, startOffset, endOffset);
-      return anchor == null ? null : myAnchorProvider.restoreElement(anchor);
+      PsiElement element = anchor == null ? null : myAnchorProvider.restoreElement(anchor);
+      return element != null && myElementInfo.isAcceptable(element) ? element : null;
     }
 
     @NotNull
index 91bad35328c5eb34619fa686ac84f911e419e15b..c88c6962cdefa069748c2d1f47be3d7c7e6d9084 100644 (file)
@@ -46,18 +46,15 @@ class SmartPsiElementPointerImpl<E extends PsiElement> implements SmartPointerEx
 
   private Reference<E> myElement;
   private final SmartPointerElementInfo myElementInfo;
-  private final Class<? extends PsiElement> myElementClass;
   private byte myReferenceCount = 1;
   @Nullable SmartPointerTracker.PointerReference pointerReference;
 
   SmartPsiElementPointerImpl(@NotNull Project project, @NotNull E element, @Nullable PsiFile containingFile, boolean forInjected) {
-    this(element, createElementInfo(project, element, containingFile, forInjected), element.getClass());
+    this(element, createElementInfo(project, element, containingFile, forInjected));
   }
   SmartPsiElementPointerImpl(@NotNull E element,
-                             @NotNull SmartPointerElementInfo elementInfo,
-                             @NotNull Class<? extends PsiElement> elementClass) {
+                             @NotNull SmartPointerElementInfo elementInfo) {
     ApplicationManager.getApplication().assertReadAccessAllowed();
-    myElementClass = elementClass;
     myElementInfo = elementInfo;
     cacheElement(element);
   }
@@ -93,7 +90,7 @@ class SmartPsiElementPointerImpl<E extends PsiElement> implements SmartPointerEx
   E doRestoreElement() {
     //noinspection unchecked
     E element = (E)myElementInfo.restoreElement();
-    if (element != null && (!element.getClass().equals(myElementClass) || !element.isValid())) {
+    if (element != null && !element.isValid()) {
       return null;
     }
     return element;
index 4f08cc1f34df80360389206e8fb6b439187d3c65..1c24a2069aa25cc6c6748b33abd0052475c14ff8 100644 (file)
@@ -28,7 +28,7 @@ import org.jetbrains.annotations.NotNull;
  */
 class SmartPsiFileRangePointerImpl extends SmartPsiElementPointerImpl<PsiFile> implements SmartPsiFileRange {
   SmartPsiFileRangePointerImpl(@NotNull PsiFile containingFile, @NotNull ProperTextRange range, boolean forInjected) {
-    super(containingFile, createElementInfo(containingFile, range, forInjected), PsiFile.class);
+    super(containingFile, createElementInfo(containingFile, range, forInjected));
   }
 
   @NotNull