diff --git a/spring-core/src/main/java/org/springframework/core/DefaultParameterNameDiscoverer.java b/spring-core/src/main/java/org/springframework/core/DefaultParameterNameDiscoverer.java index 757c4c2859b..2e965097a56 100644 --- a/spring-core/src/main/java/org/springframework/core/DefaultParameterNameDiscoverer.java +++ b/spring-core/src/main/java/org/springframework/core/DefaultParameterNameDiscoverer.java @@ -25,7 +25,8 @@ import org.springframework.util.ClassUtils; * debug information in the class file. * *
If Kotlin is present, {@link KotlinReflectionParameterNameDiscoverer} is added first - * in the list and used for Kotlin classes and interfaces. + * in the list and used for Kotlin classes and interfaces. When compiling or running as + * a Graal native image, no {@link ParameterNameDiscoverer} is used. * *
Further discoverers may be added through {@link #addDiscoverer(ParameterNameDiscoverer)}. * @@ -41,13 +42,18 @@ public class DefaultParameterNameDiscoverer extends PrioritizedParameterNameDisc private static final boolean kotlinPresent = ClassUtils.isPresent("kotlin.Unit", DefaultParameterNameDiscoverer.class.getClassLoader()); + // See https://github.com/oracle/graal/blob/master/sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/ImageInfo.java + private static final boolean inImageCode = (System.getProperty("org.graalvm.nativeimage.imagecode") != null); + public DefaultParameterNameDiscoverer() { - if (kotlinPresent) { - addDiscoverer(new KotlinReflectionParameterNameDiscoverer()); + if (!inImageCode) { + if (kotlinPresent) { + addDiscoverer(new KotlinReflectionParameterNameDiscoverer()); + } + addDiscoverer(new StandardReflectionParameterNameDiscoverer()); + addDiscoverer(new LocalVariableTableParameterNameDiscoverer()); } - addDiscoverer(new StandardReflectionParameterNameDiscoverer()); - addDiscoverer(new LocalVariableTableParameterNameDiscoverer()); } }