DATACMNS-1753 - Polishing.

Check for deferred types in ReactiveWrappers so that ReactiveWrapperConverters remains untouched as wrapper conversion from a reactive type into CompletableFuture is still possible from a ReactiveWrapperConverters perspective.

Original pull request: #450.
This commit is contained in:
Mark Paluch
2020-06-25 10:45:38 +02:00
parent 895311c208
commit 441609c4bf
4 changed files with 8 additions and 16 deletions

View File

@@ -130,8 +130,7 @@ public 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).getDescriptor().isDeferred();
&& RegistryHolder.REACTIVE_ADAPTER_REGISTRY.getAdapter(type) != null;
}
/**

View File

@@ -42,6 +42,7 @@ import org.springframework.util.ClassUtils;
* @author Mark Paluch
* @author Christoph Strobl
* @author Oliver Gierke
* @author Gerrit Meier
* @since 2.0
* @see org.reactivestreams.Publisher
* @see rx.Single
@@ -137,9 +138,7 @@ public class ReactiveWrappers {
return Arrays.stream(type.getMethods())//
.flatMap(ReflectionUtils::returnTypeAndParameters)//
.anyMatch(possibleReactiveSupportedType ->
ReactiveWrapperConverters.supports(possibleReactiveSupportedType)
&& findDescriptor(possibleReactiveSupportedType).isPresent());
.anyMatch(ReactiveWrappers::supports);
}
/**
@@ -250,7 +249,7 @@ public class ReactiveWrappers {
ReactiveAdapter adapter = adapterRegistry.getAdapter(type);
if (adapter != null && adapter.getDescriptor().isDeferred()) {
return Optional.ofNullable(adapter.getDescriptor());
return Optional.of(adapter.getDescriptor());
}
return Optional.empty();

View File

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

View File

@@ -33,10 +33,11 @@ import org.reactivestreams.Publisher;
* Unit tests for {@link ReactiveWrappers}.
*
* @author Mark Paluch
* @author Gerrit Meier
*/
class ReactiveWrappersUnitTests {
@Test // DATACMNS-836
@Test // DATACMNS-836, DATACMNS-1753
void isSingleLikeShouldReportCorrectNoTypes() {
assertThat(ReactiveWrappers.isNoValueType(Mono.class)).isFalse();
@@ -52,7 +53,7 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isNoValueType(io.reactivex.Observable.class)).isFalse();
}
@Test // DATACMNS-836
@Test // DATACMNS-836, DATACMNS-1753
void isSingleLikeShouldReportCorrectSingleTypes() {
assertThat(ReactiveWrappers.isSingleValueType(Mono.class)).isTrue();
@@ -69,7 +70,7 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.Observable.class)).isFalse();
}
@Test // DATACMNS-836
@Test // DATACMNS-836, DATACMNS-1753
void isCollectionLikeShouldReportCorrectCollectionTypes() {
assertThat(ReactiveWrappers.isMultiValueType(Mono.class)).isFalse();