stub-based smart pointers: when switching to tree and finding anchor, required element type will change (e.g. PsiClass->PsiIdentifier)

This commit is contained in:
peter
2015-09-14 12:34:18 +02:00
parent 36336844ac
commit 71bbadcb28
2 changed files with 7 additions and 5 deletions
@@ -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);
}
}
@@ -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;