@NotNull
  private <T> Runnable doLoadChanges(@NotNull ThrowableComputable<? extends T, ? extends VcsException> loadChanges,
                                     @NotNull Consumer<@Nullable T> applyResult) {
    try {
      T changes = loadChanges.compute();
      return () -> {
        myLoadingPanel.stopLoading();
        applyResult.accept(changes);
      };
    }
    catch (ProcessCanceledException e) {
      return EmptyRunnable.INSTANCE;
    }
    catch (Exception e) {
      LOG.warn(e);
      return () -> {
        myLoadingPanel.stopLoading();
        String text = notNullize(e.getMessage(), VcsBundle.message("changes.cant.load.changes"));
        myErrorLabel.setText(StringUtil.replace(text.trim(), "\n", UIUtil.BR));
        myErrorPanel.setVisible(true);
        applyResult.accept(null);
      };
    }
  }
@NotNull
  private <T> Runnable doLoadChanges(@NotNull ThrowableComputable<? extends T, ? extends VcsException> loadChanges,
                                     @NotNull Consumer<@Nullable T> applyResult)