Apply nullable value class fix to InvocableHandlerMethod

See gh-36643
This commit is contained in:
Sébastien Deleuze
2026-04-10 16:24:36 +02:00
parent 57d4765131
commit b07bc2cb99
5 changed files with 20 additions and 5 deletions
@@ -321,7 +321,7 @@ public class InvocableHandlerMethod extends HandlerMethod {
Object arg = args[index];
if (!(parameter.isOptional() && arg == null)) {
KType type = parameter.getType();
if (!(type.isMarkedNullable() && arg == null) &&
if (!type.isMarkedNullable() &&
type.getClassifier() instanceof KClass<?> kClass &&
KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
arg = box(kClass, arg);
@@ -342,7 +342,7 @@ public class InvocableHandlerMethod extends HandlerMethod {
private static Object box(KClass<?> kClass, @Nullable Object arg) {
KFunction<?> constructor = Objects.requireNonNull(KClasses.getPrimaryConstructor(kClass));
KType type = constructor.getParameters().get(0).getType();
if (!(type.isMarkedNullable() && arg == null) &&
if (!type.isMarkedNullable() &&
type.getClassifier() instanceof KClass<?> parameterClass &&
KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(parameterClass))) {
arg = box(parameterClass, arg);
@@ -148,6 +148,13 @@ class InvocableHandlerMethodKotlinTests {
Assertions.assertThatIllegalArgumentException().isThrownBy { invocable.invokeForRequest(request, null) }
}
@Test
fun valueClassWithNullableAndNonNullParameter() {
composite.addResolver(StubArgumentResolver(LongValueClass::class.java, LongValueClass(1)))
val value = getInvocable(ValueClassHandler::valueClassWithNullable.javaMethod!!).invokeForRequest(request, null)
Assertions.assertThat(value).isEqualTo(1L)
}
@Test
fun valueClassWithNullable() {
composite.addResolver(StubArgumentResolver(LongValueClass::class.java, null))