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
@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
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);
}
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;
*/
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