void (@NotNull ProgressIndicator indicator) { State state = myState; List<Request> requests; if (!(requests = myTaskController.peekRequests()).isEmpty()) { try { state = computeState(state, requests); myTaskController.removeRequests(requests); } catch (ProcessCanceledException reThrown) { LOG.debug("Filtering cancelled"); // need to start new bg task if cancelled myTaskController.taskCompleted(null); throw reThrown; } catch (Throwable t) { LOG.error("Error while processing requests " + requests, t); myTaskController.removeRequests(requests); } } List<MoreCommitsRequest> requestsToRun = new ArrayList<>(); if (state.getVisiblePack() != myState.getVisiblePack() && state.isValid() && !(state.getVisiblePack() instanceof VisiblePack.ErrorVisiblePack)) { requestsToRun.addAll(state.getRequestsToRun()); state = state.withRequests(new ArrayList<>()); } myTaskController.taskCompleted(state); if (!requestsToRun.isEmpty()) { ApplicationManager.getApplication().invokeLater(() -> { for (MoreCommitsRequest request : requestsToRun) { request.onLoaded.run(); } }); } }