mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
+10
-10
@@ -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) {
|
||||
|
||||
+14
-15
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user