Support Kotlin synthetic classes in MethodParameter and SpEL

Closes gh-23812
This commit is contained in:
Sébastien Deleuze
2019-11-13 14:22:11 +01:00
parent f2b3953d76
commit 7646895fd4
3 changed files with 49 additions and 7 deletions

View File

@@ -908,9 +908,14 @@ public class MethodParameter {
* functions via Kotlin reflection.
*/
static private Type getGenericReturnType(Method method) {
KFunction<?> function = ReflectJvmMapping.getKotlinFunction(method);
if (function != null && function.isSuspend()) {
return ReflectJvmMapping.getJavaType(function.getReturnType());
try {
KFunction<?> function = ReflectJvmMapping.getKotlinFunction(method);
if (function != null && function.isSuspend()) {
return ReflectJvmMapping.getJavaType(function.getReturnType());
}
}
catch (UnsupportedOperationException ex) {
// probably a synthetic class - let's use java reflection instead
}
return method.getGenericReturnType();
}
@@ -920,10 +925,15 @@ public class MethodParameter {
* functions via Kotlin reflection.
*/
static private Class<?> getReturnType(Method method) {
KFunction<?> function = ReflectJvmMapping.getKotlinFunction(method);
if (function != null && function.isSuspend()) {
Type paramType = ReflectJvmMapping.getJavaType(function.getReturnType());
return ResolvableType.forType(paramType).resolve(method.getReturnType());
try {
KFunction<?> function = ReflectJvmMapping.getKotlinFunction(method);
if (function != null && function.isSuspend()) {
Type paramType = ReflectJvmMapping.getJavaType(function.getReturnType());
return ResolvableType.forType(paramType).resolve(method.getReturnType());
}
}
catch (UnsupportedOperationException ex) {
// probably a synthetic class - let's use java reflection instead
}
return method.getReturnType();
}