Skip to content

Commit f70446a

Browse files
committed
remove "args == null" condition to handle nullable value class param correctly
Signed-off-by: T45K <tasktas9@gmail.com>
1 parent 0269eb8 commit f70446a

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public static Publisher<?> invokeSuspendingFunction(
134134
Object arg = args[index];
135135
if (!(parameter.isOptional() && arg == null)) {
136136
KType type = parameter.getType();
137-
if (!(type.isMarkedNullable() && arg == null) &&
137+
if (!type.isMarkedNullable() &&
138138
type.getClassifier() instanceof KClass<?> kClass &&
139139
KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
140140
arg = box(kClass, arg);
@@ -166,7 +166,7 @@ public static Publisher<?> invokeSuspendingFunction(
166166
private static Object box(KClass<?> kClass, @Nullable Object arg) {
167167
KFunction<?> constructor = Objects.requireNonNull(KClasses.getPrimaryConstructor(kClass));
168168
KType type = constructor.getParameters().get(0).getType();
169-
if (!(type.isMarkedNullable() && arg == null) &&
169+
if (!type.isMarkedNullable() &&
170170
type.getClassifier() instanceof KClass<?> parameterClass &&
171171
KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(parameterClass))) {
172172
arg = box(parameterClass, arg);

spring-core/src/test/kotlin/org/springframework/core/CoroutinesUtilsTests.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,13 @@ class CoroutinesUtilsTests {
229229
}
230230
}
231231

232+
@Test
233+
suspend fun invokeSuspendingFunctionWithNullableValueClassParameterWithNonnullObject() {
234+
val method = CoroutinesUtilsTests::class.java.declaredMethods.first { it.name.startsWith("suspendingFunctionWithNullableValueClass") }
235+
val mono = CoroutinesUtils.invokeSuspendingFunction(method, this, ValueClass("foo"), null) as Mono
236+
Assertions.assertThat(mono.awaitSingleOrNull()).isEqualTo("foo")
237+
}
238+
232239
@Test
233240
suspend fun invokeSuspendingFunctionWithNullableValueClassParameter() {
234241
val method = CoroutinesUtilsTests::class.java.declaredMethods.first { it.name.startsWith("suspendingFunctionWithNullableValueClass") }

0 commit comments

Comments
 (0)