From 71bbadcb288f9da992e392ab9345e331df09c19a Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 14 Sep 2015 12:32:06 +0200 Subject: [PATCH] stub-based smart pointers: when switching to tree and finding anchor, required element type will change (e.g. PsiClass->PsiIdentifier) --- .../psi/impl/smartPointers/AnchorElementInfo.java | 8 +++++--- .../intellij/psi/impl/smartPointers/SelfElementInfo.java | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) 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 1c44930b1057..eb1eeb48bbc7 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 @@ -78,7 +78,7 @@ class AnchorElementInfo extends SelfElementInfo { PsiFile file = restoreFile(); if (file == null) return null; - PsiElement anchor = file.findElementAt(psiRange.getStartOffset()); + PsiElement anchor = findElementInside(file, psiRange.getStartOffset(), psiRange.getEndOffset(), myType, myLanguage); if (anchor == null) return null; TextRange range = anchor.getTextRange(); @@ -126,9 +126,11 @@ class AnchorElementInfo extends SelfElementInfo { Document document = getDocumentToSynchronize(); if (element != null && document != null) { // switch to tree - myStubElementTypeAndId = pack(-1, null); PsiElement anchor = AnchorElementInfoFactory.getAnchor(element); - setRange((anchor == null ? element : anchor).getTextRange()); + if (anchor == null) anchor = element; + myType = anchor.getClass(); + setRange(anchor.getTextRange()); + myStubElementTypeAndId = pack(-1, null); } } 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 c1d58d624956..ae006572c383 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 @@ -37,9 +37,9 @@ import java.util.List; */ public class SelfElementInfo extends SmartPointerElementInfo { private static final FileDocumentManager ourFileDocManager = FileDocumentManager.getInstance(); - private final Class myType; + protected volatile Class myType; private final SmartPointerManagerImpl myManager; - private final Language myLanguage; + protected final Language myLanguage; private final MarkerCache myMarkerCache; private final boolean myForInjected; private boolean myHasRange;