From 14b1ef024ff9e178c2c1e662f5ad40e78eba6254 Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Fri, 20 Dec 2019 12:51:01 +0100 Subject: [PATCH] completion copy: don't set original file when it's already set (e.g. after reuse (EA-209911) GitOrigin-RevId: 2e54eb22e556538120adfad992fb899014bfe51b --- .../completion/CompletionInitializationUtil.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java b/platform/analysis-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java index 85f2404b0d83..f8904a2f9558 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/completion/CompletionInitializationUtil.java @@ -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);