Skip to content

Commit 048e4f0

Browse files
committed
Invoke KCallablesJvm.setAccessible only when required
Closes-32536
1 parent b28153e commit 048e4f0

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

Diff for: spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,11 @@ public static Publisher<?> invokeSuspendingFunction(
130130
KType type = parameter.getType();
131131
if (!(type.isMarkedNullable() && arg == null) && type.getClassifier() instanceof KClass<?> kClass
132132
&& KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
133-
KFunction<?> valueClassConstructor = KClasses.getPrimaryConstructor(kClass);
134-
KCallablesJvm.setAccessible(valueClassConstructor, true);
135-
arg = valueClassConstructor.call(arg);
133+
KFunction<?> constructor = KClasses.getPrimaryConstructor(kClass);
134+
if (!KCallablesJvm.isAccessible(constructor)) {
135+
KCallablesJvm.setAccessible(constructor, true);
136+
}
137+
arg = constructor.call(arg);
136138
}
137139
argMap.put(parameter, arg);
138140
}

Diff for: spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,11 @@ public static Object invokeFunction(Method method, Object target, Object[] args)
319319
KType type = parameter.getType();
320320
if (!(type.isMarkedNullable() && arg == null) && type.getClassifier() instanceof KClass<?> kClass
321321
&& KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
322-
KFunction<?> valueClassConstructor = KClasses.getPrimaryConstructor(kClass);
323-
KCallablesJvm.setAccessible(valueClassConstructor, true);
324-
arg = valueClassConstructor.call(arg);
322+
KFunction<?> constructor = KClasses.getPrimaryConstructor(kClass);
323+
if (!KCallablesJvm.isAccessible(constructor)) {
324+
KCallablesJvm.setAccessible(constructor, true);
325+
}
326+
arg = constructor.call(arg);
325327
}
326328
argMap.put(parameter, arg);
327329
}

Diff for: spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,11 @@ public static Object invokeFunction(Method method, Object target, Object[] args,
330330
KType type = parameter.getType();
331331
if (!(type.isMarkedNullable() && arg == null) && type.getClassifier() instanceof KClass<?> kClass
332332
&& KotlinDetector.isInlineClass(JvmClassMappingKt.getJavaClass(kClass))) {
333-
KFunction<?> valueClassConstructor = KClasses.getPrimaryConstructor(kClass);
334-
KCallablesJvm.setAccessible(valueClassConstructor, true);
335-
arg = valueClassConstructor.call(arg);
333+
KFunction<?> constructor = KClasses.getPrimaryConstructor(kClass);
334+
if (!KCallablesJvm.isAccessible(constructor)) {
335+
KCallablesJvm.setAccessible(constructor, true);
336+
}
337+
arg = constructor.call(arg);
336338
}
337339
argMap.put(parameter, arg);
338340
}

0 commit comments

Comments
 (0)