in src/main/java/com/twitter/whiskey/futures/CompletableFuture.java [157:196]
public void addListener(final Listener<T> listener) {
boolean notify = false;
if (!done) {
synchronized (this) {
if (!done) {
listeners.add(listener);
} else {
notify = true;
}
}
} else {
notify = true;
}
if (notify) {
if (result != null) {
listener.getExecutor().execute(new Runnable() {
@Override
public void run() {
listener.onComplete(result);
}
});
} else if (error != null) {
listener.getExecutor().execute(new Runnable() {
@Override
public void run() {
listener.onError(error);
}
});
} else {
listener.getExecutor().execute(new Runnable() {
@Override
public void run() {
listener.onError(new CancellationException());
}
});
}
}
}