From 5ed95eeff40a431259f99452e2c2c004133b585b Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 13 Mar 2017 14:38:11 +0100 Subject: [PATCH] show introduce (functional) parameter dialog in a transaction (EA-98867 - assert: RefactoringDialog.show) --- .../IntroduceParameterHandler.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java index 9cbb79d2cf0d..070cbc98a541 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java @@ -32,6 +32,8 @@ import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.ide.util.PsiClassListCellRenderer; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ModalityState; +import com.intellij.openapi.application.TransactionGuard; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; @@ -477,9 +479,23 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase { Util.analyzeExpression(myExpr, new ArrayList<>(), classMemberRefs, new ArrayList<>()); } + showDialog(method, methodToSearchFor, occurences, replaceAllOccurrences, delegate, initializerType, mustBeFinal, + classMemberRefs, createNameSuggestionGenerator(myExpr, propName, myProject, enteredName)); + } + } + + private void showDialog(PsiMethod method, + PsiMethod methodToSearchFor, + PsiExpression[] occurences, + boolean replaceAllOccurrences, + boolean delegate, + PsiType initializerType, + boolean mustBeFinal, + List classMemberRefs, NameSuggestionsGenerator nameSuggestionGenerator) { + TransactionGuard.getInstance().submitTransactionAndWait(() -> { final IntroduceParameterDialog dialog = new IntroduceParameterDialog(myProject, classMemberRefs, occurences, myLocalVar, myExpr, - createNameSuggestionGenerator(myExpr, propName, myProject, enteredName), + nameSuggestionGenerator, createTypeSelectorManager(occurences, initializerType), methodToSearchFor, method, getParamsToRemove(method, occurences), mustBeFinal); dialog.setReplaceAllOccurrences(replaceAllOccurrences); dialog.setGenerateDelegate(delegate); @@ -489,9 +505,9 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase { myEditor.getSelectionModel().removeSelection(); } }; - SwingUtilities.invokeLater(cleanSelectionRunnable); + ApplicationManager.getApplication().invokeLater(cleanSelectionRunnable, ModalityState.any()); } - } + }); } private TypeSelectorManagerImpl createTypeSelectorManager(PsiExpression[] occurences, PsiType initializerType) {