completion copy: don't set original file when it's already set (e.g. after reuse (EA-209911)

GitOrigin-RevId: 2e54eb22e556538120adfad992fb899014bfe51b
This commit is contained in:
Peter Gromov
2019-12-20 12:08:35 +00:00
committed by intellij-monorepo-bot
parent 0777432ed2
commit 14b1ef024f
@@ -24,6 +24,7 @@ import com.intellij.psi.impl.PsiFileEx;
import com.intellij.psi.impl.source.PsiFileImpl;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.reference.SoftReference;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@@ -140,7 +141,7 @@ public class CompletionInitializationUtil {
if (originalFile != injected &&
injected instanceof PsiFileImpl &&
InjectedLanguageManager.getInstance(originalFile.getProject()).isInjectedFragment(originalFile)) {
((PsiFileImpl)injected).setOriginalFile(originalFile);
setOriginalFile((PsiFileImpl)injected, originalFile);
}
VirtualFile virtualFile = injected.getVirtualFile();
DocumentWindow documentWindow = null;
@@ -157,6 +158,16 @@ public class CompletionInitializationUtil {
return hostCopyOffsets;
}
private static void setOriginalFile(PsiFileImpl copy, PsiFile origin) {
PsiFile currentOrigin = copy.getOriginalFile();
if (currentOrigin == copy) {
copy.setOriginalFile(origin);
} else {
PsiUtilCore.ensureValid(currentOrigin);
LOG.assertTrue(currentOrigin == origin);
}
}
@NotNull
private static PsiElement findCompletionPositionLeaf(OffsetsInFile offsets, int offset, PsiFile originalFile) {
PsiElement insertedElement = offsets.getFile().findElementAt(offset);