From 4bced4682a4c5151e9f74dd232d7f25d1cb3bcc7 Mon Sep 17 00:00:00 2001 From: slawluc Date: Mon, 24 Jun 2019 14:31:43 +0100 Subject: [PATCH] Make RSocketRequester extensions reified Extension functions need to use reified types to create ParameterizedTypeReference. Closes gh-23185 --- .../rsocket/RSocketRequesterExtensions.kt | 10 +++++----- .../rsocket/RSocketRequesterExtensionsTests.kt | 14 ++++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt b/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt index 8f60efa9a44..60a10fe8004 100644 --- a/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt +++ b/spring-messaging/src/main/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensions.kt @@ -64,7 +64,7 @@ suspend fun RSocketRequester.Builder.connectWebSocketAndAwait(uri: URI): RSocket */ @Suppress("EXTENSION_SHADOWED_BY_MEMBER") @FlowPreview -fun RSocketRequester.RequestSpec.data(producer: Any): RSocketRequester.ResponseSpec = +inline fun RSocketRequester.RequestSpec.data(producer: Any): RSocketRequester.ResponseSpec = data(producer, object : ParameterizedTypeReference() {}) /** @@ -83,7 +83,7 @@ suspend fun RSocketRequester.ResponseSpec.sendAndAwait() { * @author Sebastien Deleuze * @since 5.2 */ -suspend fun RSocketRequester.ResponseSpec.retrieveAndAwait(): T = +suspend inline fun RSocketRequester.ResponseSpec.retrieveAndAwait(): T = retrieveMono(object : ParameterizedTypeReference() {}).awaitSingle() /** @@ -93,7 +93,7 @@ suspend fun RSocketRequester.ResponseSpec.retrieveAndAwait(): T = * @since 5.2 */ @FlowPreview -fun RSocketRequester.ResponseSpec.retrieveFlow(batchSize: Int = 1): Flow = +inline fun RSocketRequester.ResponseSpec.retrieveFlow(batchSize: Int = 1): Flow = retrieveFlux(object : ParameterizedTypeReference() {}).asFlow(batchSize) /** @@ -104,7 +104,7 @@ fun RSocketRequester.ResponseSpec.retrieveFlow(batchSize: Int = 1): Fl * @author Sebastien Deleuze * @since 5.2 */ -fun RSocketRequester.ResponseSpec.retrieveMono(): Mono = +inline fun RSocketRequester.ResponseSpec.retrieveMono(): Mono = retrieveMono(object : ParameterizedTypeReference() {}) @@ -116,5 +116,5 @@ fun RSocketRequester.ResponseSpec.retrieveMono(): Mono = * @author Sebastien Deleuze * @since 5.2 */ -fun RSocketRequester.ResponseSpec.retrieveFlux(): Flux = +inline fun RSocketRequester.ResponseSpec.retrieveFlux(): Flux = retrieveFlux(object : ParameterizedTypeReference() {}) diff --git a/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt b/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt index 9750734a8bd..9c4297b4b5e 100644 --- a/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt +++ b/spring-messaging/src/test/kotlin/org/springframework/messaging/rsocket/RSocketRequesterExtensionsTests.kt @@ -21,6 +21,8 @@ import reactor.core.publisher.Mono @FlowPreview class RSocketRequesterExtensionsTests { + private val stringTypeRefMatcher: (ParameterizedTypeReference<*>) -> Boolean = { it.type == String::class.java } + @Test fun connectAndAwait() { val requester = mockk() @@ -56,7 +58,7 @@ class RSocketRequesterExtensionsTests { fun dataFlowWithType() { val requestSpec = mockk() val responseSpec = mockk() - every { requestSpec.data(any>(), any>()) } returns responseSpec + every { requestSpec.data(any>(), match>(stringTypeRefMatcher)) } returns responseSpec assertEquals(responseSpec, requestSpec.data(mockk())) } @@ -81,16 +83,16 @@ class RSocketRequesterExtensionsTests { fun retrieveAndAwait() { val response = "foo" val responseSpec = mockk() - every { responseSpec.retrieveMono(any>()) } returns Mono.just("foo") + every { responseSpec.retrieveMono(match>(stringTypeRefMatcher)) } returns Mono.just("foo") runBlocking { - assertEquals(response, responseSpec.retrieveAndAwait()) + assertEquals(response, responseSpec.retrieveAndAwait()) } } @Test fun retrieveFlow() { val responseSpec = mockk() - every { responseSpec.retrieveFlux(any>()) } returns Flux.just("foo", "bar") + every { responseSpec.retrieveFlux(match>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar") runBlocking { assertEquals(listOf("foo", "bar"), responseSpec.retrieveFlow().toList()) } @@ -99,7 +101,7 @@ class RSocketRequesterExtensionsTests { @Test fun retrieveMono() { val responseSpec = mockk() - every { responseSpec.retrieveMono(any>()) } returns Mono.just("foo") + every { responseSpec.retrieveMono(match>(stringTypeRefMatcher)) } returns Mono.just("foo") runBlocking { assertEquals("foo", responseSpec.retrieveMono().block()) } @@ -108,7 +110,7 @@ class RSocketRequesterExtensionsTests { @Test fun retrieveFlux() { val responseSpec = mockk() - every { responseSpec.retrieveFlux(any>()) } returns Flux.just("foo", "bar") + every { responseSpec.retrieveFlux(match>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar") runBlocking { assertEquals(listOf("foo", "bar"), responseSpec.retrieveFlux().collectList().block()) }