Do not optimize imports in dumb mode (it can happen via ReformatCodeAction)

This commit is contained in:
Yaroslav Lepenkin
2016-11-23 21:08:58 +03:00
parent 1ceadf0123
commit c8ef7bed42
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.lang.ImportOptimizer;
import com.intellij.lang.LanguageImportStatements;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.EmptyRunnable;
import com.intellij.psi.PsiDirectory;
@@ -34,7 +35,8 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.FutureTask;
import static com.intellij.codeInsight.actions.OptimizeImportsProcessor.NotificationInfo.*;
import static com.intellij.codeInsight.actions.OptimizeImportsProcessor.NotificationInfo.NOTHING_CHANGED_NOTIFICATION;
import static com.intellij.codeInsight.actions.OptimizeImportsProcessor.NotificationInfo.SOMETHING_CHANGED_WITHOUT_MESSAGE_NOTIFICATION;
public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor {
private static final String PROGRESS_TEXT = CodeInsightBundle.message("progress.text.optimizing.imports");
@@ -76,6 +78,10 @@ public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor {
@Override
@NotNull
protected FutureTask<Boolean> prepareTask(@NotNull PsiFile file, boolean processChangedTextOnly) {
if (DumbService.isDumb(file.getProject())) {
return new FutureTask<>(EmptyRunnable.INSTANCE, true);
}
final Set<ImportOptimizer> optimizers = LanguageImportStatements.INSTANCE.forFile(file);
final List<Runnable> runnables = new ArrayList<>();
List<PsiFile> files = file.getViewProvider().getAllFiles();
@@ -87,7 +93,7 @@ public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor {
}
}
Runnable runnable = !runnables.isEmpty() ? (Runnable)() -> {
Runnable runnable = !runnables.isEmpty() ? () -> {
CodeStyleManagerImpl.setSequentialProcessingAllowed(false);
try {
for (Runnable runnable1 : runnables) {
@@ -100,6 +106,7 @@ public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor {
CodeStyleManagerImpl.setSequentialProcessingAllowed(true);
}
} : EmptyRunnable.getInstance();
return new FutureTask<>(runnable, true);
}