From 15ac26e8d919d6645a0bc834517c22493fa889a5 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 7 Sep 2016 13:55:31 +0200 Subject: [PATCH] MultiCaretCodeInsightAction: commit the document only when the action is invoked (IDEA-160724) --- .../actions/MultiCaretCodeInsightAction.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/MultiCaretCodeInsightAction.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/MultiCaretCodeInsightAction.java index f5d794c5d081..855c79a1ffde 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/actions/MultiCaretCodeInsightAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/MultiCaretCodeInsightAction.java @@ -73,6 +73,15 @@ public abstract class MultiCaretCodeInsightAction extends AnAction { hostEditor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); } + @Override + public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { + Project project = e.getProject(); + if (project != null) { + PsiDocumentManager.getInstance(project).commitAllDocuments(); + } + super.beforeActionPerformedUpdate(e); + } + @Override public void update(@NotNull AnActionEvent e) { final Presentation presentation = e.getPresentation(); @@ -104,16 +113,14 @@ public abstract class MultiCaretCodeInsightAction extends AnAction { private static void iterateOverCarets(@NotNull final Project project, @NotNull final Editor hostEditor, @NotNull final MultiCaretCodeInsightActionHandler handler) { - PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); - final PsiFile psiFile = documentManager.getCachedPsiFile(hostEditor.getDocument()); - documentManager.commitAllDocuments(); + PsiFile hostFile = PsiDocumentManager.getInstance(project).getPsiFile(hostEditor.getDocument()); hostEditor.getCaretModel().runForEachCaret(new CaretAction() { @Override public void perform(Caret caret) { Editor editor = hostEditor; - if (psiFile != null) { - Caret injectedCaret = InjectedLanguageUtil.getCaretForInjectedLanguageNoCommit(caret, psiFile); + if (hostFile != null) { + Caret injectedCaret = InjectedLanguageUtil.getCaretForInjectedLanguageNoCommit(caret, hostFile); if (injectedCaret != null) { caret = injectedCaret; editor = caret.getEditor();