Unwrap Kotlin inline value classes return values

The result returned by Kotlin reflective invocation of a function
returning an inline value class is wrapped, which makes sense
from Kotlin POV but from a JVM perspective the associated value
and type should be unwrapped to be consistent with what
would happen with a reflective invocation done by Java.

This commit unwraps such result.

Closes gh-33026
This commit is contained in:
Sébastien Deleuze
2024-07-10 18:31:35 +02:00
parent 82c5aa4a48
commit 7617a01f60
6 changed files with 67 additions and 3 deletions

View File

@@ -104,6 +104,12 @@ class InvocableHandlerMethodKotlinTests {
Assertions.assertThat(value).isEqualTo(1L)
}
@Test
fun valueClassReturnValue() {
val value = getInvocable(ValueClassHandler::valueClassReturnValue.javaMethod!!).invokeForRequest(request, null)
Assertions.assertThat(value).isEqualTo("foo")
}
@Test
fun valueClassDefaultValue() {
composite.addResolver(StubArgumentResolver(Double::class.java))
@@ -200,6 +206,9 @@ class InvocableHandlerMethodKotlinTests {
private class ValueClassHandler {
fun valueClassReturnValue() =
StringValueClass("foo")
fun longValueClass(limit: LongValueClass) =
limit.value
@@ -246,6 +255,9 @@ class InvocableHandlerMethodKotlinTests {
data class Animal(override val name: String) : Named
@JvmInline
value class StringValueClass(val value: String)
@JvmInline
value class LongValueClass(val value: Long)