diff --git a/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java b/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java index fa84da293db0..3b69ff38e472 100644 --- a/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java +++ b/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java @@ -33,7 +33,6 @@ import kotlin.reflect.full.KClassifiers; import kotlin.reflect.full.KTypes; import kotlin.reflect.jvm.KCallablesJvm; -import kotlin.reflect.jvm.KTypesJvm; import kotlin.reflect.jvm.ReflectJvmMapping; import kotlinx.coroutines.BuildersKt; import kotlinx.coroutines.CoroutineStart; @@ -109,7 +108,7 @@ public static Publisher invokeSuspendingFunction(Method method, Object target * @throws IllegalArgumentException if {@code method} is not a suspending function * @since 6.0 */ - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DataFlowIssue"}) public static Publisher invokeSuspendingFunction(CoroutineContext context, Method method, Object target, Object... args) { Assert.isTrue(KotlinDetector.isSuspendingFunction(method), "'method' must be a suspending function"); @@ -128,7 +127,7 @@ public static Publisher invokeSuspendingFunction(CoroutineContext context, Me if (!(parameter.isOptional() && arg == null)) { KType type = parameter.getType(); if (!(type.isMarkedNullable() && arg == null)) { - KClass kClass = KTypesJvm.getJvmErasure(type); + KClass kClass = (KClass) type.getClassifier(); if (KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) { arg = KClasses.getPrimaryConstructor(kClass).call(arg); } @@ -148,10 +147,10 @@ public static Publisher invokeSuspendingFunction(CoroutineContext context, Me if (KTypes.isSubtypeOf(returnType, flowType)) { return mono.flatMapMany(CoroutinesUtils::asFlux); } - else if (KTypes.isSubtypeOf(returnType, monoType)) { - return mono.flatMap(o -> ((Mono)o)); - } - else if (KTypes.isSubtypeOf(returnType, publisherType)) { + if (KTypes.isSubtypeOf(returnType, publisherType)) { + if (KTypes.isSubtypeOf(returnType, monoType)) { + return mono.flatMap(o -> ((Mono)o)); + } return mono.flatMapMany(o -> ((Publisher)o)); } return mono; diff --git a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java index 918ce2226d7c..8bd593934ad6 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java @@ -29,7 +29,6 @@ import kotlin.reflect.KType; import kotlin.reflect.full.KClasses; import kotlin.reflect.jvm.KCallablesJvm; -import kotlin.reflect.jvm.KTypesJvm; import kotlin.reflect.jvm.ReflectJvmMapping; import org.springframework.context.MessageSource; @@ -299,7 +298,7 @@ protected Object invokeSuspendingFunction(Method method, Object target, Object[] private static class KotlinDelegate { @Nullable - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DataFlowIssue"}) public static Object invokeFunction(Method method, Object target, Object[] args) throws InvocationTargetException, IllegalAccessException { KFunction function = ReflectJvmMapping.getKotlinFunction(method); // For property accessors @@ -319,7 +318,7 @@ public static Object invokeFunction(Method method, Object target, Object[] args) if (!(parameter.isOptional() && arg == null)) { KType type = parameter.getType(); if (!(type.isMarkedNullable() && arg == null)) { - KClass kClass = KTypesJvm.getJvmErasure(type); + KClass kClass = (KClass) type.getClassifier(); if (KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) { arg = KClasses.getPrimaryConstructor(kClass).call(arg); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java index de362ea27a91..890d2979cb87 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java @@ -34,7 +34,6 @@ import kotlin.reflect.KType; import kotlin.reflect.full.KClasses; import kotlin.reflect.jvm.KCallablesJvm; -import kotlin.reflect.jvm.KTypesJvm; import kotlin.reflect.jvm.ReflectJvmMapping; import reactor.core.publisher.Mono; @@ -298,7 +297,7 @@ private static class KotlinDelegate { private static final String COROUTINE_CONTEXT_ATTRIBUTE = "org.springframework.web.server.CoWebFilter.context"; @Nullable - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DataFlowIssue"}) public static Object invokeFunction(Method method, Object target, Object[] args, boolean isSuspendingFunction, ServerWebExchange exchange) throws InvocationTargetException, IllegalAccessException { @@ -330,7 +329,7 @@ public static Object invokeFunction(Method method, Object target, Object[] args, if (!(parameter.isOptional() && arg == null)) { KType type = parameter.getType(); if (!(type.isMarkedNullable() && arg == null)) { - KClass kClass = KTypesJvm.getJvmErasure(type); + KClass kClass = (KClass) type.getClassifier(); if (KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) { arg = KClasses.getPrimaryConstructor(kClass).call(arg); }