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
This commit is contained in:
peter
2017-04-26 12:54:02 +02:00
parent d52e0292f8
commit 596b1c8fc4
2 changed files with 24 additions and 25 deletions
@@ -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) {
@@ -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<Module> 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();
}
});
}
}
}