private void asyncStartImpl()

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);
		}
	}