Invoke KCallablesJvm.setAccessible only when required

Closes-32536
This commit is contained in:
Sébastien Deleuze 2024-03-28 11:12:50 +01:00
parent b28153e1d7
commit 048e4f0aa2
3 changed files with 15 additions and 9 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}