@CalledInAwt
  public void updateRequest(
      final boolean force, boolean useCache, @Nullable final ScrollToPolicy scrollToChangePolicy) {
    ApplicationManager.getApplication().assertIsDispatchThread();
    if (isDisposed()) return;

    final T requestProvider = getCurrentRequestProvider();
    if (requestProvider == null) {
      applyRequest(NoDiffRequest.INSTANCE, force, scrollToChangePolicy);
      return;
    }

    DiffRequest cachedRequest = useCache ? loadRequestFast(requestProvider) : null;
    if (cachedRequest != null) {
      applyRequest(cachedRequest, force, scrollToChangePolicy);
      return;
    }

    myQueue.executeAndTryWait(
        indicator -> {
          final DiffRequest request = doLoadRequest(requestProvider, indicator);
          return () -> {
            myRequestCache.put(requestProvider, request);
            applyRequest(request, force, scrollToChangePolicy);
          };
        },
        () -> {
          applyRequest(
              new LoadingDiffRequest(getRequestName(requestProvider)), force, scrollToChangePolicy);
        },
        ProgressWindow.DEFAULT_PROGRESS_DIALOG_POSTPONE_TIME_MILLIS);
  }
 @Override
 @CalledInAwt
 protected void onDispose() {
   super.onDispose();
   myQueue.abort();
   myRequestCache.clear();
 }