Browse Source

Invoke KCallablesJvm.setAccessible only when required

Closes-32536
pull/32864/head
Sébastien Deleuze 2 years ago
parent
commit
048e4f0aa2
  1. 8
      spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java
  2. 8
      spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java
  3. 8
      spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java

8
spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java

@ -130,9 +130,11 @@ public abstract class CoroutinesUtils { @@ -130,9 +130,11 @@ public abstract class CoroutinesUtils {
KType type = parameter.getType();
if (!(type.isMarkedNullable() && arg == null) && type.getClassifier() instanceof KClass<?> kClass
&& KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
KFunction<?> valueClassConstructor = KClasses.getPrimaryConstructor(kClass);
KCallablesJvm.setAccessible(valueClassConstructor, true);
arg = valueClassConstructor.call(arg);
KFunction<?> constructor = KClasses.getPrimaryConstructor(kClass);
if (!KCallablesJvm.isAccessible(constructor)) {
KCallablesJvm.setAccessible(constructor, true);
}
arg = constructor.call(arg);
}
argMap.put(parameter, arg);
}

8
spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java

@ -319,9 +319,11 @@ public class InvocableHandlerMethod extends HandlerMethod { @@ -319,9 +319,11 @@ public class InvocableHandlerMethod extends HandlerMethod {
KType type = parameter.getType();
if (!(type.isMarkedNullable() && arg == null) && type.getClassifier() instanceof KClass<?> kClass
&& KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
KFunction<?> valueClassConstructor = KClasses.getPrimaryConstructor(kClass);
KCallablesJvm.setAccessible(valueClassConstructor, true);
arg = valueClassConstructor.call(arg);
KFunction<?> constructor = KClasses.getPrimaryConstructor(kClass);
if (!KCallablesJvm.isAccessible(constructor)) {
KCallablesJvm.setAccessible(constructor, true);
}
arg = constructor.call(arg);
}
argMap.put(parameter, arg);
}

8
spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java

@ -330,9 +330,11 @@ public class InvocableHandlerMethod extends HandlerMethod { @@ -330,9 +330,11 @@ public class InvocableHandlerMethod extends HandlerMethod {
KType type = parameter.getType();
if (!(type.isMarkedNullable() && arg == null) && type.getClassifier() instanceof KClass<?> kClass
&& KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
KFunction<?> valueClassConstructor = KClasses.getPrimaryConstructor(kClass);
KCallablesJvm.setAccessible(valueClassConstructor, true);
arg = valueClassConstructor.call(arg);
KFunction<?> constructor = KClasses.getPrimaryConstructor(kClass);
if (!KCallablesJvm.isAccessible(constructor)) {
KCallablesJvm.setAccessible(constructor, true);
}
arg = constructor.call(arg);
}
argMap.put(parameter, arg);
}

Loading…
Cancel
Save