CancellablePromise<T> (@NotNull Executor backgroundThreadExecutor) { schedule(myOriginalComputation); Submission<T> submission = new Submission<>(this, backgroundThreadExecutor, myProgressIndicator); if (myCoalesceEquality == null) { submission.transferToBgThread(); } else { submission.submitOrScheduleCoalesced(myCoalesceEquality); } return submission; }