From c28425f017515271a8764ce49f07ca449ea5a104 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 22 Mar 2017 18:41:35 +0100 Subject: [PATCH] no dialogs under write action in python AddFunctionQuickFix (EA-99361 - assert: NoSwingUnderWriteAction.a) --- .../quickfix/AddFunctionQuickFix.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/python/src/com/jetbrains/python/inspections/quickfix/AddFunctionQuickFix.java b/python/src/com/jetbrains/python/inspections/quickfix/AddFunctionQuickFix.java index 60b4890e4f30..d89ce73d165e 100644 --- a/python/src/com/jetbrains/python/inspections/quickfix/AddFunctionQuickFix.java +++ b/python/src/com/jetbrains/python/inspections/quickfix/AddFunctionQuickFix.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.template.TemplateBuilder; import com.intellij.codeInsight.template.TemplateBuilderFactory; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileEditorManager; @@ -72,6 +73,11 @@ public class AddFunctionQuickFix implements LocalQuickFix { return "Create function in module"; } + @Override + public boolean startInWriteAction() { + return false; + } + public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { try { final PsiElement problemElement = descriptor.getPsiElement(); @@ -116,11 +122,14 @@ public class AddFunctionQuickFix implements LocalQuickFix { } } // else: no arglist, use empty args - PyFunction function = builder.buildFunction(project, LanguageLevel.forElement(file)); - // add to the bottom - function = (PyFunction) file.add(function); - showTemplateBuilder(function, file); + WriteAction.run(() -> { + PyFunction function = builder.buildFunction(project, LanguageLevel.forElement(file)); + + // add to the bottom + function = (PyFunction) file.add(function); + showTemplateBuilder(function, file); + }); } catch (IncorrectOperationException ignored) { // we failed. tell about this