diff --git a/platform/lang-api/src/com/intellij/codeInsight/actions/CodeInsightAction.java b/platform/lang-api/src/com/intellij/codeInsight/actions/CodeInsightAction.java index af1a4863fcb0..0f02aeaa91cd 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/actions/CodeInsightAction.java +++ b/platform/lang-api/src/com/intellij/codeInsight/actions/CodeInsightAction.java @@ -25,7 +25,6 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorModificationUtil; import com.intellij.openapi.editor.actionSystem.DocCommandGroupId; import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiUtilBase; @@ -84,10 +83,7 @@ public abstract class CodeInsightAction extends AnAction { @Override public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { - Project project = e.getProject(); - if (project != null) { - PsiDocumentManager.getInstance(project).commitAllDocuments(); - } + CodeInsightEditorAction.beforeActionPerformedUpdate(e); super.beforeActionPerformedUpdate(e); } diff --git a/platform/lang-api/src/com/intellij/codeInsight/actions/CodeInsightEditorAction.java b/platform/lang-api/src/com/intellij/codeInsight/actions/CodeInsightEditorAction.java new file mode 100644 index 000000000000..c5c8156e1010 --- /dev/null +++ b/platform/lang-api/src/com/intellij/codeInsight/actions/CodeInsightEditorAction.java @@ -0,0 +1,46 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.actions; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; + +/** + * @author peter + */ +public class CodeInsightEditorAction { + + /** + * Commit all PSI if there is editor and project in data context. Should be used in + * {@link com.intellij.openapi.actionSystem.AnAction#beforeActionPerformedUpdate(AnActionEvent)} implementations before calling super, + * if the action's {@code update} method should work with up-to-date PSI, and the action is invoked in editor. + */ + public static void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { + Project project = e.getProject(); + Editor hostEditor = e.getData(CommonDataKeys.HOST_EDITOR); + if (project != null && hostEditor != null) { + PsiFile file = PsiDocumentManager.getInstance(project).getCachedPsiFile(hostEditor.getDocument()); + if (file != null) { + PsiDocumentManager.getInstance(project).commitAllDocuments(); + } + } + } +} 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 07f24de96764..feb9f47e3175 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/actions/MultiCaretCodeInsightAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/MultiCaretCodeInsightAction.java @@ -76,10 +76,7 @@ public abstract class MultiCaretCodeInsightAction extends AnAction { @Override public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { - Project project = e.getProject(); - if (project != null) { - PsiDocumentManager.getInstance(project).commitAllDocuments(); - } + CodeInsightEditorAction.beforeActionPerformedUpdate(e); super.beforeActionPerformedUpdate(e); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementLeftAction.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementLeftAction.java index 5b28016b931c..e05ee6864641 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementLeftAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementLeftAction.java @@ -15,10 +15,9 @@ */ package com.intellij.codeInsight.editorActions.moveLeftRight; +import com.intellij.codeInsight.actions.CodeInsightEditorAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.editor.actionSystem.EditorAction; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; import org.jetbrains.annotations.NotNull; public class MoveElementLeftAction extends EditorAction { @@ -29,10 +28,7 @@ public class MoveElementLeftAction extends EditorAction { @Override public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { - Project project = e.getProject(); - if (project != null) { - PsiDocumentManager.getInstance(project).commitAllDocuments(); - } + CodeInsightEditorAction.beforeActionPerformedUpdate(e); super.beforeActionPerformedUpdate(e); } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementRightAction.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementRightAction.java index 1702cb1cabc4..c45a91ec8a48 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementRightAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/MoveElementRightAction.java @@ -15,10 +15,9 @@ */ package com.intellij.codeInsight.editorActions.moveLeftRight; +import com.intellij.codeInsight.actions.CodeInsightEditorAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.editor.actionSystem.EditorAction; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; import org.jetbrains.annotations.NotNull; public class MoveElementRightAction extends EditorAction { @@ -29,10 +28,7 @@ public class MoveElementRightAction extends EditorAction { @Override public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { - Project project = e.getProject(); - if (project != null) { - PsiDocumentManager.getInstance(project).commitAllDocuments(); - } + CodeInsightEditorAction.beforeActionPerformedUpdate(e); super.beforeActionPerformedUpdate(e); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/NextParameterAction.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/NextParameterAction.java index 8d57dffd6896..954b37e00d9f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/NextParameterAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/NextParameterAction.java @@ -16,11 +16,10 @@ package com.intellij.codeInsight.hint.actions; +import com.intellij.codeInsight.actions.CodeInsightEditorAction; import com.intellij.codeInsight.hint.PrevNextParameterHandler; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.editor.actionSystem.EditorAction; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; import org.jetbrains.annotations.NotNull; /** @@ -34,10 +33,7 @@ public class NextParameterAction extends EditorAction { @Override public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { - Project project = e.getProject(); - if (project != null) { - PsiDocumentManager.getInstance(project).commitAllDocuments(); - } + CodeInsightEditorAction.beforeActionPerformedUpdate(e); super.beforeActionPerformedUpdate(e); } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/PrevParameterAction.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/PrevParameterAction.java index 616f0cc05578..4252038e99bd 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/PrevParameterAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/PrevParameterAction.java @@ -16,11 +16,10 @@ package com.intellij.codeInsight.hint.actions; +import com.intellij.codeInsight.actions.CodeInsightEditorAction; import com.intellij.codeInsight.hint.PrevNextParameterHandler; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.editor.actionSystem.EditorAction; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDocumentManager; import org.jetbrains.annotations.NotNull; /** @@ -34,10 +33,7 @@ public class PrevParameterAction extends EditorAction { @Override public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { - Project project = e.getProject(); - if (project != null) { - PsiDocumentManager.getInstance(project).commitAllDocuments(); - } + CodeInsightEditorAction.beforeActionPerformedUpdate(e); super.beforeActionPerformedUpdate(e); } diff --git a/plugins/devkit/src/actions/GenerateComponentExternalizationAction.java b/plugins/devkit/src/actions/GenerateComponentExternalizationAction.java index 39867cc3647e..481a3559cc17 100644 --- a/plugins/devkit/src/actions/GenerateComponentExternalizationAction.java +++ b/plugins/devkit/src/actions/GenerateComponentExternalizationAction.java @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.devkit.actions; +import com.intellij.codeInsight.actions.CodeInsightEditorAction; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; @@ -45,10 +46,7 @@ public class GenerateComponentExternalizationAction extends AnAction { @Override public void beforeActionPerformedUpdate(@NotNull AnActionEvent e) { - Project project = e.getProject(); - if (project != null) { - PsiDocumentManager.getInstance(project).commitAllDocuments(); - } + CodeInsightEditorAction.beforeActionPerformedUpdate(e); super.beforeActionPerformedUpdate(e); }