Merge branch '6.1.x'

This commit is contained in:
Sébastien Deleuze
2024-03-03 22:26:37 +01:00
6 changed files with 86 additions and 20 deletions

View File

@@ -324,18 +324,20 @@ public class InvocableHandlerMethod extends HandlerMethod {
switch (parameter.getKind()) {
case INSTANCE -> argMap.put(parameter, target);
case VALUE, EXTENSION_RECEIVER -> {
if (!parameter.isOptional() || args[index] != null) {
Object arg = args[index];
if (!(parameter.isOptional() && arg == null)) {
if (parameter.getType().getClassifier() instanceof KClass<?> kClass) {
Class<?> javaClass = JvmClassMappingKt.getJavaClass(kClass);
if (KotlinDetector.isInlineClass(javaClass)) {
argMap.put(parameter, KClasses.getPrimaryConstructor(kClass).call(args[index]));
if (KotlinDetector.isInlineClass(javaClass)
&& !(parameter.getType().isMarkedNullable() && arg == null)) {
argMap.put(parameter, KClasses.getPrimaryConstructor(kClass).call(arg));
}
else {
argMap.put(parameter, args[index]);
argMap.put(parameter, arg);
}
}
else {
argMap.put(parameter, args[index]);
argMap.put(parameter, arg);
}
}
index++;

View File

@@ -19,7 +19,6 @@ package org.springframework.web.reactive.result
import io.mockk.every
import io.mockk.mockk
import kotlinx.coroutines.delay
import org.assertj.core.api.Assertions
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.springframework.core.MethodParameter
@@ -178,11 +177,19 @@ class InvocableHandlerMethodKotlinTests {
@Test
fun nullReturnValue() {
val method = NullResultController::nullable.javaMethod!!
val method = NullResultController::nullableReturnValue.javaMethod!!
val result = invoke(NullResultController(), method)
assertHandlerResultValue(result, null)
}
@Test
fun nullParameter() {
this.resolvers.add(stubResolver(null, String::class.java))
val method = NullResultController::nullableParameter.javaMethod!!
val result = invoke(NullResultController(), method, null)
assertHandlerResultValue(result, null)
}
@Test
fun valueClass() {
this.resolvers.add(stubResolver(1L, Long::class.java))
@@ -192,7 +199,7 @@ class InvocableHandlerMethodKotlinTests {
}
@Test
fun valueClassDefaultValue() {
fun valueClassWithDefaultValue() {
this.resolvers.add(stubResolver(null, Double::class.java))
val method = ValueClassController::valueClassWithDefault.javaMethod!!
val result = invoke(ValueClassController(), method)
@@ -207,6 +214,14 @@ class InvocableHandlerMethodKotlinTests {
assertExceptionThrown(result, IllegalArgumentException::class)
}
@Test
fun valueClassWithNullable() {
this.resolvers.add(stubResolver(null, LongValueClass::class.java))
val method = ValueClassController::valueClassWithNullable.javaMethod!!
val result = invoke(ValueClassController(), method, null)
assertHandlerResultValue(result, "null")
}
@Test
fun propertyAccessor() {
this.resolvers.add(stubResolver(null, String::class.java))
@@ -321,9 +336,13 @@ class InvocableHandlerMethodKotlinTests {
fun unit() {
}
fun nullable(): String? {
fun nullableReturnValue(): String? {
return null
}
fun nullableParameter(value: String?): String? {
return value
}
}
class ValueClassController {
@@ -337,6 +356,9 @@ class InvocableHandlerMethodKotlinTests {
fun valueClassWithInit(valueClass: ValueClassWithInit) =
valueClass
fun valueClassWithNullable(limit: LongValueClass?) =
"${limit?.value}"
}
class PropertyAccessorController {