From 596b1c8fc4293cfbd026c1d4b9c6f6a0ca837c11 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 26 Apr 2017 12:52:53 +0200 Subject: [PATCH] add dependency quick fix: no dialogs under write action (EA-100553 - assert: NoSwingUnderWriteAction.lambda$watchForEvents$) plus try to auto-import even during the inevitable indexing --- .../daemon/impl/actions/AddImportAction.java | 20 ++++++------- .../impl/quickfix/AddModuleDependencyFix.java | 29 +++++++++---------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/AddImportAction.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/AddImportAction.java index 16a3de346fe0..021feb75eaca 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/AddImportAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/AddImportAction.java @@ -20,14 +20,13 @@ import com.intellij.application.options.editor.AutoImportOptionsConfigurable; import com.intellij.application.options.editor.JavaAutoImportOptions; import com.intellij.codeInsight.CodeInsightUtil; import com.intellij.codeInsight.CodeInsightWorkspaceSettings; -import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.actions.OptimizeImportsProcessor; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.hint.QuestionAction; import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.ide.util.DefaultPsiElementCellRenderer; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.command.CommandProcessor; +import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.*; import com.intellij.openapi.options.ShowSettingsUtil; @@ -211,15 +210,16 @@ public class AddImportAction implements QuestionAction { } private void addImport(final PsiReference ref, final PsiClass targetClass) { - if (!ref.getElement().isValid() || !targetClass.isValid() || ref.resolve() == targetClass) { - return; - } - if (!FileModificationService.getInstance().preparePsiElementForWrite(ref.getElement())){ - return; - } + DumbService.getInstance(myProject).withAlternativeResolveEnabled(() -> { + if (!ref.getElement().isValid() || !targetClass.isValid() || ref.resolve() == targetClass) { + return; + } - StatisticsManager.getInstance().incUseCount(JavaStatisticsManager.createInfo(null, targetClass)); - CommandProcessor.getInstance().executeCommand(myProject, () -> ApplicationManager.getApplication().runWriteAction(() -> DumbService.getInstance(myProject).withAlternativeResolveEnabled(() -> _addImport(ref, targetClass))), QuickFixBundle.message("add.import"), null); + StatisticsManager.getInstance().incUseCount(JavaStatisticsManager.createInfo(null, targetClass)); + WriteCommandAction.runWriteCommandAction(myProject, QuickFixBundle.message("add.import"), null, + () -> _addImport(ref, targetClass), + ref.getElement().getContainingFile()); + }); } private void _addImport(PsiReference ref, PsiClass targetClass) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddModuleDependencyFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddModuleDependencyFix.java index 96242bddde09..0fa60b5a26bf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddModuleDependencyFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddModuleDependencyFix.java @@ -19,12 +19,10 @@ import com.intellij.application.options.ModuleListCellRenderer; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.daemon.impl.actions.AddImportAction; import com.intellij.compiler.ModuleCompilerUtil; -import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; -import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; import com.intellij.openapi.ui.Messages; @@ -38,7 +36,10 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; /** * @author anna @@ -137,20 +138,18 @@ class AddModuleDependencyFix extends AddOrderEntryFix { if (module == null) return; Couple circularModules = ModuleCompilerUtil.addingDependencyFormsCircularity(myCurrentModule, module); if (circularModules == null || showCircularWarning(project, circularModules, module)) { - WriteAction.run(() -> { - boolean test = ModuleRootManager.getInstance(myCurrentModule).getFileIndex().isInTestSourceContent(myRefVFile); - DependencyScope scope = test ? DependencyScope.TEST : DependencyScope.COMPILE; - JavaProjectModelModificationService.getInstance(project).addDependency(myCurrentModule, module, scope); + boolean test = ModuleRootManager.getInstance(myCurrentModule).getFileIndex().isInTestSourceContent(myRefVFile); + DependencyScope scope = test ? DependencyScope.TEST : DependencyScope.COMPILE; + JavaProjectModelModificationService.getInstance(project).addDependency(myCurrentModule, module, scope); - if (editor != null && !myClasses.isEmpty()) { - PsiClass[] targetClasses = myClasses.stream() - .filter(c -> ModuleUtilCore.findModuleForPsiElement(c) == module) - .toArray(PsiClass[]::new); - if (targetClasses.length > 0 && !DumbService.isDumb(project)) { - new AddImportAction(project, myReference, editor, targetClasses).execute(); - } + if (editor != null && !myClasses.isEmpty()) { + PsiClass[] targetClasses = myClasses.stream() + .filter(c -> ModuleUtilCore.findModuleForPsiElement(c) == module) + .toArray(PsiClass[]::new); + if (targetClasses.length > 0) { + new AddImportAction(project, myReference, editor, targetClasses).execute(); } - }); + } } }