void (@NotNull CommittedChangesProvider provider, @NotNull RepositoryLocation location, @Nullable String title, @Nullable Component parent) { ChangesBrowserSettingsEditor filterUI = provider.createFilterUI(true); CommittedChangesFilterDialog filterDialog = new CommittedChangesFilterDialog(myProject, filterUI, provider.createDefaultSettings()); if (filterDialog.showAndGet()) { ChangeBrowserSettings settings = filterDialog.getSettings(); if (myProject.isDefault() || (ProjectLevelVcsManager.getInstance(myProject).getAllActiveVcss().length == 0) || (!ModalityState.nonModal().equals(ModalityState.current()))) { final List<CommittedChangeList> versions = new ArrayList<>(); if (parent == null || !parent.isValid()) { parent = WindowManager.getInstance().suggestParentWindow(myProject); } final CommittedChangesTableModel model = new CommittedChangesTableModel(versions, true); final AsynchronousListsLoader[] task = new AsynchronousListsLoader[1]; final ChangesBrowserDialog dlg = createChangesBrowserDialog(model, title, parent, changesBrowserDialog -> { task[0] = new AsynchronousListsLoader(myProject, provider, location, settings, changesBrowserDialog); ProgressManager.getInstance().run(task[0]); }); dlg.startLoading(); dlg.show(); if (task[0] != null) { task[0].cancel(); final List<VcsException> exceptions = task[0].getExceptions(); if (!exceptions.isEmpty()) { Messages.showErrorDialog(myProject, VcsBundle.message("browse.changes.error.message", exceptions.get(0).getMessage()), VcsBundle.message("browse.changes.error.title")); return; } if (!task[0].isRevisionsReturned()) { Messages.showInfoMessage(myProject, VcsBundle.message("browse.changes.nothing.found"), VcsBundle.message("browse.changes.nothing.found.title")); } } } else { openCommittedChangesTab(provider, location, settings, 0, title); } } }