magic constant: don't cancel batch inspections progress when write action starts

impatient reader will cancel existing progress whatever it is and in case of batch inspections this may cancel the whole progress
This commit is contained in:
Anna.Kozlova
2018-10-04 16:37:47 +02:00
parent 6c461490bc
commit 958ae451d9
@@ -7,6 +7,9 @@ import com.intellij.codeInsight.ExternalAnnotationsManager;
import com.intellij.codeInsight.daemon.GroupNames;
import com.intellij.codeInspection.*;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.util.ProgressIndicatorBase;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkModificator;
@@ -14,6 +17,7 @@ import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.roots.JdkUtils;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
@@ -765,7 +769,18 @@ public class MagicConstantInspection extends AbstractBaseJavaLocalInspectionTool
SliceRootNode rootNode = new SliceRootNode(manager.getProject(), new DuplicateMap(), LanguageSlicing.getProvider(argument).createRootUsage(argument, params));
Collection<? extends AbstractTreeNode> children = rootNode.getChildren().iterator().next().getChildren();
ProgressIndicator indicator = new ProgressIndicatorBase();
indicator.start();
Ref<Collection<? extends AbstractTreeNode>> nodesRef = Ref.create();
try {
ProgressManager.getInstance().executeProcessUnderProgress(() -> nodesRef.set(rootNode.getChildren().iterator().next().getChildren()), indicator);
}
finally {
indicator.stop();
}
Collection<? extends AbstractTreeNode> children = nodesRef.get();
for (AbstractTreeNode child : children) {
SliceUsage usage = (SliceUsage)child.getValue();
PsiElement element = usage != null ? usage.getElement() : null;