@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(); }