in src/main/java/org/jetbrains/plugins/spotbugs/core/FindBugsStarter.java [196:239]
private void asyncStartImpl(@NotNull final ProgressIndicator indicator, final boolean justCompiled) {
final FindBugsProjects projects = new FindBugsProjects(project);
boolean canceled = !ApplicationManager.getApplication().runReadAction(
(Computable<Boolean>) () -> configure(indicator, projects, justCompiled));
final FindBugsResult result = new FindBugsResult();
Throwable error = null;
if (!canceled) {
try {
int numClassesOffset = 0;
for (final Map.Entry<Module, FindBugsProject> entry : projects.getProjects().entrySet()) {
final FindBugsProject findBugsProject = entry.getValue();
final Module module = entry.getKey();
indicator.setText("Start SpotBugs analysis of " + findBugsProject.getProjectName());
final Pair<SortedBugCollection, Reporter> data = executeImpl(indicator, module, findBugsProject, numClassesOffset);
final int numClasses = data.getSecond().getProjectStats().getNumClasses();
numClassesOffset += numClasses;
result.put(findBugsProject, data.getFirst());
if (data.getSecond().isCanceled()) {
canceled = true;
break;
}
}
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
} catch (final ProcessCanceledException e) {
throw e;
} catch (final Throwable e) {
if (ApplicationManager.getApplication().isUnitTestMode()) {
throw new RuntimeException(e);
}
error = e;
}
}
if (canceled) {
MessageBusManager.publishAnalysisAbortedToEDT(project);
} else {
MessageBusManager.publishAnalysisFinishedToEDT(project, result, error);
}
}