Remove succeeded/failed Promise creation - see #3139

This commit is contained in:
Julien Viet
2019-10-07 18:48:35 +02:00
parent e9d0de74e0
commit 62efc9835d
6 changed files with 2 additions and 207 deletions

View File

@@ -29,49 +29,6 @@ import static io.vertx.core.Future.factory;
@VertxGen
public interface Promise<T> extends Handler<AsyncResult<T>> {
/**
* Create a succeeded promise with a {@code null} result
*
* @param <T> the result type
* @return the promise
*/
static <T> Promise<T> succeededPromise() {
return factory.succeededPromise();
}
/**
* Created a succeeded promise with the specified {@code result}.
*
* @param result the result
* @param <T> the result type
* @return the promise
*/
static <T> Promise<T> succeededPromise(T result) {
return factory.succeededPromise(result);
}
/**
* Create a failed promise with the specified failure {@code cause}.
*
* @param cause the failure cause as a Throwable
* @param <T> the result type
* @return the promise
*/
static <T> Promise<T> failedPromise(Throwable cause) {
return factory.failedPromise(cause);
}
/**
* Create a failed promise with the specified {@code failureMessage}.
*
* @param failureMessage the failure message
* @param <T> the result type
* @return the promise
*/
static <T> Promise<T> failedPromise(String failureMessage) {
return factory.failurePromise(failureMessage);
}
/**
* Create a promise that hasn't completed yet
*

View File

@@ -14,12 +14,11 @@ package io.vertx.core.impl;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.Promise;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class FailedFuture<T> implements Future<T>, Promise<T> {
public class FailedFuture<T> implements Future<T> {
private final Throwable cause;
@@ -55,46 +54,6 @@ public class FailedFuture<T> implements Future<T>, Promise<T> {
return null;
}
@Override
public void complete(T result) {
throw new IllegalStateException("Result is already complete: failed");
}
@Override
public void complete() {
throw new IllegalStateException("Result is already complete: failed");
}
@Override
public void fail(Throwable cause) {
throw new IllegalStateException("Result is already complete: failed");
}
@Override
public void fail(String failureMessage) {
throw new IllegalStateException("Result is already complete: failed");
}
@Override
public boolean tryComplete(T result) {
return false;
}
@Override
public boolean tryComplete() {
return false;
}
@Override
public boolean tryFail(Throwable cause) {
return false;
}
@Override
public boolean tryFail(String failureMessage) {
return false;
}
@Override
public T result() {
return null;
@@ -115,16 +74,6 @@ public class FailedFuture<T> implements Future<T>, Promise<T> {
return true;
}
@Override
public void handle(AsyncResult<T> asyncResult) {
throw new IllegalStateException("Result is already complete: failed");
}
@Override
public Future<T> future() {
return this;
}
@Override
public String toString() {
return "Future{cause=" + cause.getMessage() + "}";

View File

@@ -27,28 +27,6 @@ public class FutureFactoryImpl implements FutureFactory {
return new FutureImpl<>();
}
@Override
public <T> Promise<T> succeededPromise() {
@SuppressWarnings("unchecked")
Promise<T> promise = EMPTY;
return promise;
}
@Override
public <T> Promise<T> succeededPromise(T result) {
return new SucceededFuture<>(result);
}
@Override
public <T> Promise<T> failedPromise(Throwable t) {
return new FailedFuture<>(t);
}
@Override
public <T> Promise<T> failurePromise(String failureMessage) {
return new FailedFuture<>(failureMessage);
}
@Override
public <T> Future<T> future() {
return new FutureImpl<>();

View File

@@ -19,7 +19,7 @@ import io.vertx.core.Promise;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
class SucceededFuture<T> implements Future<T>, Promise<T> {
class SucceededFuture<T> implements Future<T> {
private final T result;
@@ -47,46 +47,6 @@ class SucceededFuture<T> implements Future<T>, Promise<T> {
return null;
}
@Override
public void complete(T result) {
throw new IllegalStateException("Result is already complete: succeeded");
}
@Override
public void complete() {
throw new IllegalStateException("Result is already complete: succeeded");
}
@Override
public void fail(Throwable cause) {
throw new IllegalStateException("Result is already complete: succeeded");
}
@Override
public void fail(String failureMessage) {
throw new IllegalStateException("Result is already complete: succeeded");
}
@Override
public boolean tryComplete(T result) {
return false;
}
@Override
public boolean tryComplete() {
return false;
}
@Override
public boolean tryFail(Throwable cause) {
return false;
}
@Override
public boolean tryFail(String failureMessage) {
return false;
}
@Override
public T result() {
return result;
@@ -107,16 +67,6 @@ class SucceededFuture<T> implements Future<T>, Promise<T> {
return false;
}
@Override
public void handle(AsyncResult<T> asyncResult) {
throw new IllegalStateException("Result is already complete: succeeded");
}
@Override
public Future<T> future() {
return this;
}
@Override
public String toString() {
return "Future{result=" + result + "}";

View File

@@ -21,14 +21,6 @@ public interface FutureFactory {
<T> Promise<T> promise();
<T> Promise<T> succeededPromise();
<T> Promise<T> succeededPromise(T result);
<T> Promise<T> failedPromise(Throwable t);
<T> Promise<T> failurePromise(String failureMessage);
<T> Future<T> future();
<T> Future<T> succeededFuture();

View File

@@ -89,37 +89,6 @@ public class FutureTest extends VertxTestBase {
assertEquals(cause, future.cause());
}
@Test
public void testSetResultOnCompletedPromise() {
ArrayList<Promise<Object>> promises = new ArrayList<>();
promises.add(Promise.succeededPromise());
promises.add(Promise.succeededPromise());
promises.add(Promise.succeededPromise(new Object()));
promises.add(Promise.succeededPromise(new Object()));
promises.add(Promise.failedPromise(new Exception()));
promises.add(Promise.failedPromise(new Exception()));
for (Promise<Object> promise : promises) {
try {
promise.complete(new Object());
fail();
} catch (IllegalStateException ignore) {
}
assertFalse(promise.tryComplete(new Object()));
try {
promise.complete(null);
fail();
} catch (IllegalStateException ignore) {
}
assertFalse(promise.tryComplete(null));
try {
promise.fail(new Exception());
fail();
} catch (IllegalStateException ignore) {
}
assertFalse(promise.tryFail(new Exception()));
}
}
@Test
public void testCallSetHandlerBeforeCompletion() {
AtomicBoolean called = new AtomicBoolean();