DATACMNS-1753 - Don't consider CompletableFuture as reactive type.

CompletableFuture use is permitted in imperative repositories so we should not use CompletableFuture as indicator to switch a repository implementation to a reactive one.

Original pull request: #450.
This commit is contained in:
Gerrit Meier
2020-06-24 15:51:02 +02:00
committed by Mark Paluch
parent 2c25a591fb
commit 558272e57b
4 changed files with 21 additions and 3 deletions

View File

@@ -140,7 +140,8 @@ public abstract class ReactiveWrapperConverters {
*/
public static boolean supports(Class<?> type) {
return RegistryHolder.REACTIVE_ADAPTER_REGISTRY != null
&& RegistryHolder.REACTIVE_ADAPTER_REGISTRY.getAdapter(type) != null;
&& RegistryHolder.REACTIVE_ADAPTER_REGISTRY.getAdapter(type) != null
&& RegistryHolder.REACTIVE_ADAPTER_REGISTRY.getAdapter(type).getDescriptor().isDeferred();
}
/**

View File

@@ -157,7 +157,9 @@ public abstract class ReactiveWrappers {
return Arrays.stream(type.getMethods())//
.flatMap(ReflectionUtils::returnTypeAndParameters)//
.anyMatch(ReactiveWrapperConverters::supports);
.anyMatch(possibleReactiveSupportedType ->
ReactiveWrapperConverters.supports(possibleReactiveSupportedType)
&& findDescriptor(possibleReactiveSupportedType).isPresent());
}
/**
@@ -267,7 +269,10 @@ public abstract class ReactiveWrappers {
}
ReactiveAdapter adapter = adapterRegistry.getAdapter(type);
if (adapter != null && adapter.getDescriptor().isDeferred()) {
return Optional.ofNullable(adapter.getDescriptor());
}
return Optional.ofNullable(adapter == null ? null : adapter.getDescriptor());
return Optional.empty();
}
}

View File

@@ -24,6 +24,8 @@ import rx.Completable;
import rx.Observable;
import rx.Single;
import java.util.concurrent.CompletableFuture;
import org.junit.jupiter.api.Test;
import org.reactivestreams.Publisher;
@@ -61,6 +63,11 @@ class ReactiveWrapperConvertersUnitTests {
assertThat(ReactiveWrapperConverters.supports(io.reactivex.Completable.class)).isTrue();
}
@Test // DATACMNS-1753
void shouldNotSupportCompletableFuture() {
assertThat(ReactiveWrapperConverters.supports(CompletableFuture.class)).isFalse();
}
@Test // DATACMNS-1653
void shouldSupportRxJava3Types() {

View File

@@ -24,6 +24,8 @@ import reactor.core.publisher.Mono;
import rx.Observable;
import rx.Single;
import java.util.concurrent.CompletableFuture;
import org.junit.jupiter.api.Test;
import org.reactivestreams.Publisher;
@@ -41,6 +43,7 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isNoValueType(Flux.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Single.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Completable.class)).isTrue();
assertThat(ReactiveWrappers.isNoValueType(CompletableFuture.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Observable.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Publisher.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(io.reactivex.Single.class)).isFalse();
@@ -60,6 +63,7 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isSingleValueType(Flux.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Single.class)).isTrue();
assertThat(ReactiveWrappers.isSingleValueType(Completable.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(CompletableFuture.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Observable.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Publisher.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.Single.class)).isTrue();
@@ -81,6 +85,7 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isMultiValueType(Flux.class)).isTrue();
assertThat(ReactiveWrappers.isMultiValueType(Single.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Completable.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(CompletableFuture.class)).isFalse();
assertThat(ReactiveWrappers.isMultiValueType(Observable.class)).isTrue();
assertThat(ReactiveWrappers.isMultiValueType(Publisher.class)).isTrue();
assertThat(ReactiveWrappers.isMultiValueType(io.reactivex.Single.class)).isFalse();