void (@NotNull MergeRequestProducer request) { setTitle(request.getName()); initViewer(); ModalityState modality = ModalityState.stateForComponent(myPanel); BackgroundTaskUtil.executeOnPooledThread(this, () -> { try { MergeRequest mergeRequest = request.process(myContext, ProgressManager.getInstance().getProgressIndicator()); ApplicationManager.getApplication().invokeLater( () -> { if (myDisposed) return; myRequest = mergeRequest; onAssigned(myRequest, true); swapViewer(createViewerFor(mergeRequest)); installCallbackListener(myRequest); }, modality); } catch (Throwable e) { LOG.warn(e); ApplicationManager.getApplication().invokeLater( () -> { if (myDisposed) return; swapViewer(new MessageMergeViewer(myContext, DiffBundle.message("label.cant.show.merge.with.description", e.getMessage()))); }, modality); } }); }