diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index cd63cf1e2494..c58da25e296d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -572,12 +572,12 @@ public class CodeCompletionHandlerBase { if (editor.getCaretModel().supportsMultipleCarets()) { Ref lastContext = Ref.create(); Editor hostEditor = InjectedLanguageUtil.getTopLevelEditor(editor); + boolean wasInjected = hostEditor != editor; OffsetsInFile topLevelOffsets = indicator.getHostOffsets(); hostEditor.getCaretModel().runForEachCaret(new CaretAction() { @Override public void perform(Caret caret) { - PsiDocumentManager.getInstance(indicator.getProject()).commitDocument(hostEditor.getDocument()); - OffsetsInFile targetOffsets = topLevelOffsets.toInjectedIfAny(caret.getOffset()); + OffsetsInFile targetOffsets = findInjectedOffsetsIfAny(caret); PsiFile targetFile = targetOffsets.getFile(); Editor targetEditor = InjectedLanguageUtil.getInjectedEditorForInjectedFile(hostEditor, targetFile); int targetCaretOffset = targetEditor.getCaretModel().getOffset(); @@ -591,6 +591,13 @@ public class CodeCompletionHandlerBase { targetOffsets.getOffsets()); lastContext.set(currentContext); } + + private OffsetsInFile findInjectedOffsetsIfAny(Caret caret) { + if (!wasInjected) return topLevelOffsets; + + PsiDocumentManager.getInstance(indicator.getProject()).commitDocument(hostEditor.getDocument()); + return topLevelOffsets.toInjectedIfAny(caret.getOffset()); + } }); context = lastContext.get(); } else {