Polish "Support @Name with JavaBean-based configuration properties"

See gh-39452
This commit is contained in:
Andy Wilkinson
2024-07-22 15:40:14 +01:00
parent a305e2d1bd
commit 23b344691d
11 changed files with 181 additions and 71 deletions

View File

@@ -85,7 +85,7 @@ class PropertyDescriptorResolver {
private PropertyDescriptor extracted(TypeElement declaringElement, TypeElementMembers members,
VariableElement parameter) {
String name = getParameterName(parameter);
String name = getPropertyName(parameter);
TypeMirror type = parameter.asType();
ExecutableElement getter = members.getPublicGetter(name, type);
ExecutableElement setter = members.getPublicSetter(name, type);
@@ -98,12 +98,16 @@ class PropertyDescriptorResolver {
field);
}
private String getParameterName(VariableElement parameter) {
private String getPropertyName(VariableElement parameter) {
return getPropertyName(parameter, parameter.getSimpleName().toString());
}
private String getPropertyName(VariableElement parameter, String fallback) {
AnnotationMirror nameAnnotation = this.environment.getNameAnnotation(parameter);
if (nameAnnotation != null) {
return this.environment.getAnnotationElementStringValue(nameAnnotation, "value");
}
return parameter.getSimpleName().toString();
return fallback;
}
private Stream<PropertyDescriptor> resolveJavaBeanProperties(TypeElement declaringElement,
@@ -114,16 +118,16 @@ class PropertyDescriptorResolver {
VariableElement field = members.getFields().get(name);
ExecutableElement getter = findMatchingGetter(members, getters, field);
TypeMirror propertyType = getter.getReturnType();
register(candidates, new JavaBeanPropertyDescriptor(name, propertyType, declaringElement, getter,
members.getPublicSetter(name, propertyType), field, factoryMethod));
register(candidates, new JavaBeanPropertyDescriptor(getPropertyName(field, name), propertyType,
declaringElement, getter, members.getPublicSetter(name, propertyType), field, factoryMethod));
});
// Then check for Lombok ones
members.getFields().forEach((name, field) -> {
TypeMirror propertyType = field.asType();
ExecutableElement getter = members.getPublicGetter(name, propertyType);
ExecutableElement setter = members.getPublicSetter(name, propertyType);
register(candidates, new LombokPropertyDescriptor(name, propertyType, declaringElement, getter, setter,
field, factoryMethod));
register(candidates, new LombokPropertyDescriptor(getPropertyName(field, name), propertyType,
declaringElement, getter, setter, field, factoryMethod));
});
return candidates.values().stream();
}