Merge branch '6.1.x'
This commit is contained in:
@@ -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++;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user