mirror of
https://github.com/spring-projects/spring-framework
synced 2026-06-08 17:33:33 +00:00
Fix ParameterizedTypeReference nullness
This commit ensures that `ParameterizedTypeReference<T>` can accept nullable types. This is especially useful for Kotlin extension functions and assertion contracts. Fixes gh-36477
This commit is contained in:
@@ -42,7 +42,7 @@ import org.springframework.util.Assert;
|
||||
* @param <T> the referenced type
|
||||
* @see <a href="https://gafter.blogspot.nl/2006/12/super-type-tokens.html">Neal Gafter on Super Type Tokens</a>
|
||||
*/
|
||||
public abstract class ParameterizedTypeReference<T> {
|
||||
public abstract class ParameterizedTypeReference<T extends @Nullable Object> {
|
||||
|
||||
private final Type type;
|
||||
|
||||
|
||||
+5
-5
@@ -107,35 +107,35 @@ class RSocketRequesterExtensionsTests {
|
||||
suspend fun retrieveAndAwait() {
|
||||
val response = "foo"
|
||||
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
|
||||
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
|
||||
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<String>>(stringTypeRefMatcher)) } returns Mono.just("foo")
|
||||
assertThat(retrieveSpec.retrieveAndAwait<String>()).isEqualTo(response)
|
||||
}
|
||||
|
||||
@Test
|
||||
suspend fun retrieveAndAwaitOrNull() {
|
||||
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
|
||||
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.empty()
|
||||
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<String>>(stringTypeRefMatcher)) } returns Mono.empty()
|
||||
assertThat(retrieveSpec.retrieveAndAwaitOrNull<String>()).isNull()
|
||||
}
|
||||
|
||||
@Test
|
||||
suspend fun retrieveFlow() {
|
||||
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
|
||||
every { retrieveSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
|
||||
every { retrieveSpec.retrieveFlux(match<ParameterizedTypeReference<String>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
|
||||
assertThat(retrieveSpec.retrieveFlow<String>().toList()).contains("foo", "bar")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun retrieveMono() {
|
||||
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
|
||||
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
|
||||
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<String>>(stringTypeRefMatcher)) } returns Mono.just("foo")
|
||||
assertThat(retrieveSpec.retrieveMono<String>().block()).isEqualTo("foo")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun retrieveFlux() {
|
||||
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
|
||||
every { retrieveSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
|
||||
every { retrieveSpec.retrieveFlux(match<ParameterizedTypeReference<String>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
|
||||
assertThat(retrieveSpec.retrieveFlux<String>().collectList().block()).contains("foo", "bar")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user