avoid additional commit during completion if it wasn't invoked inside injection (IDEA-CR-28641)

This commit is contained in:
peter
2018-01-19 23:46:45 +01:00
parent ed8c5c5b22
commit 6eb6d16999
@@ -572,12 +572,12 @@ public class CodeCompletionHandlerBase {
if (editor.getCaretModel().supportsMultipleCarets()) {
Ref<WatchingInsertionContext> 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 {