Skip to content

Commit 14816a6

Browse files
committed
Support @name meta-annotations with Kotlin binding
Update `ValueObjectBinder` Kotlin support to meta-annotations of `@Named`. See gh-24379
1 parent 32e1289 commit 14816a6

File tree

1 file changed

+5
-3
lines changed
  • spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind

1 file changed

+5
-3
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/ValueObjectBinder.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ static <T> ValueObject<T> get(Bindable<T> bindable, BindConstructorProvider cons
190190
*/
191191
private static final class KotlinValueObject<T> extends ValueObject<T> {
192192

193+
private static final Annotation[] ANNOTATION_ARRAY = new Annotation[0];
194+
193195
private final List<ConstructorParameter> constructorParameters;
194196

195197
private KotlinValueObject(Constructor<T> primaryConstructor, KFunction<T> kotlinConstructor,
@@ -206,15 +208,15 @@ private List<ConstructorParameter> parseConstructorParameters(KFunction<T> kotli
206208
String name = getParameterName(parameter);
207209
ResolvableType parameterType = ResolvableType
208210
.forType(ReflectJvmMapping.getJavaType(parameter.getType()), type);
209-
Annotation[] annotations = parameter.getAnnotations().toArray(new Annotation[0]);
211+
Annotation[] annotations = parameter.getAnnotations().toArray(ANNOTATION_ARRAY);
210212
result.add(new ConstructorParameter(name, parameterType, annotations));
211213
}
212214
return Collections.unmodifiableList(result);
213215
}
214216

215217
private String getParameterName(KParameter parameter) {
216-
return parameter.getAnnotations().stream().filter(Name.class::isInstance).findFirst().map(Name.class::cast)
217-
.map(Name::value).orElse(parameter.getName());
218+
return MergedAnnotations.from(parameter, parameter.getAnnotations().toArray(ANNOTATION_ARRAY))
219+
.get(Name.class).getValue(MergedAnnotation.VALUE, String.class).orElseGet(parameter::getName);
218220
}
219221

220222
@Override

0 commit comments

Comments
 (0)