Treat kotlin.Unit as void in web controllers

This commit fixes a regression introduced by gh-21139
via the usage of Kotlin reflection to invoke HTTP
handler methods. It ensures that kotlin.Unit is treated
as void by returning null.

It also polishes CoroutinesUtils to have a consistent
handling compared to the regular case, and adds related
tests to prevent future regressions.

Closes gh-31648
This commit is contained in:
Sébastien Deleuze
2023-11-22 12:40:32 +01:00
parent c329ed83ef
commit 441e210533
6 changed files with 79 additions and 4 deletions

View File

@@ -22,6 +22,7 @@ import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import kotlin.Unit;
import kotlin.reflect.KFunction;
import kotlin.reflect.KParameter;
import kotlin.reflect.jvm.KCallablesJvm;
@@ -315,7 +316,8 @@ public class InvocableHandlerMethod extends HandlerMethod {
}
}
}
return function.callBy(argMap);
Object result = function.callBy(argMap);
return (result == Unit.INSTANCE ? null : result);
}
}