diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/ValueObjectBinder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/ValueObjectBinder.java index bbaa646941e..ab446865b8a 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/ValueObjectBinder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/ValueObjectBinder.java @@ -190,6 +190,8 @@ class ValueObjectBinder implements DataObjectBinder { */ private static final class KotlinValueObject extends ValueObject { + private static final Annotation[] ANNOTATION_ARRAY = new Annotation[0]; + private final List constructorParameters; private KotlinValueObject(Constructor primaryConstructor, KFunction kotlinConstructor, @@ -206,15 +208,15 @@ class ValueObjectBinder implements DataObjectBinder { String name = getParameterName(parameter); ResolvableType parameterType = ResolvableType .forType(ReflectJvmMapping.getJavaType(parameter.getType()), type); - Annotation[] annotations = parameter.getAnnotations().toArray(new Annotation[0]); + Annotation[] annotations = parameter.getAnnotations().toArray(ANNOTATION_ARRAY); result.add(new ConstructorParameter(name, parameterType, annotations)); } return Collections.unmodifiableList(result); } private String getParameterName(KParameter parameter) { - return parameter.getAnnotations().stream().filter(Name.class::isInstance).findFirst().map(Name.class::cast) - .map(Name::value).orElse(parameter.getName()); + return MergedAnnotations.from(parameter, parameter.getAnnotations().toArray(ANNOTATION_ARRAY)) + .get(Name.class).getValue(MergedAnnotation.VALUE, String.class).orElseGet(parameter::getName); } @Override