tolerate INRE during code formatting (with php rearranger; EA-98847 - INRE: FileBasedIndexImpl.handleDumbMode

This commit is contained in:
peter
2017-03-13 15:24:47 +01:00
parent db48ea0156
commit b6568c9b91
@@ -278,7 +278,7 @@ public abstract class AbstractLayoutCodeProcessor {
return new FileTreeIterator(myProject);
}
return new FileTreeIterator(Collections.<PsiFile>emptyList());
return new FileTreeIterator(Collections.emptyList());
}
@NotNull
@@ -355,7 +355,7 @@ public abstract class AbstractLayoutCodeProcessor {
LOG.error(e);
}
};
runLayoutCodeProcess(readAction, writeAction, false );
runLayoutCodeProcess(readAction, writeAction);
}
private boolean checkFileWritable(final PsiFile file){
@@ -396,7 +396,7 @@ public abstract class AbstractLayoutCodeProcessor {
return !GeneratedSourcesFilter.isGeneratedSourceByAnyFilter(virtualFile, file.getProject());
}
private void runLayoutCodeProcess(final Runnable readAction, final Runnable writeAction, final boolean globalAction) {
private void runLayoutCodeProcess(final Runnable readAction, final Runnable writeAction) {
final ProgressWindow progressWindow = new ProgressWindow(true, myProject);
progressWindow.setTitle(myCommandName);
progressWindow.setText(myProgressText);
@@ -418,7 +418,6 @@ public abstract class AbstractLayoutCodeProcessor {
}
final Runnable writeRunnable = () -> CommandProcessor.getInstance().executeCommand(myProject, () -> {
if (globalAction) CommandProcessor.getInstance().markCurrentCommandAsGlobal(myProject);
try {
writeAction.run();
@@ -544,18 +543,15 @@ public abstract class AbstractLayoutCodeProcessor {
}
private void performFileProcessing(@NotNull PsiFile file) {
myProcessors.stream().forEach((processor) -> {
Ref<FutureTask<Boolean>> writeTaskRef = Ref.create();
ApplicationManager.getApplication().runReadAction(() -> writeTaskRef.set(processor.prepareTask(file, myProcessChangedTextOnly)));
for (AbstractLayoutCodeProcessor processor : myProcessors) {
FutureTask<Boolean> writeTask = ReadAction.compute(() -> processor.prepareTask(file, myProcessChangedTextOnly));
ProgressIndicatorProvider.checkCanceled();
FutureTask<Boolean> writeTask = writeTaskRef.get();
ApplicationManager.getApplication().invokeAndWait(() -> WriteCommandAction.runWriteCommandAction(myProject, myCommandName, null, writeTask));
checkStop(writeTask, file);
});
}
}
private void checkStop(FutureTask<Boolean> task, PsiFile file) {
@@ -565,6 +561,11 @@ public abstract class AbstractLayoutCodeProcessor {
}
}
catch (InterruptedException | ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof IndexNotReadyException) {
LOG.warn(cause);
return;
}
LOG.error("Got unexpected exception during formatting " + file, e);
}
}