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);