in src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassParser.java [173:204]
private static <T> PropertyMetadata<T> buildPropertyMetadata(Method propertyMethod, Class<T> type) {
String propertyName = getPropertyName(propertyMethod.getName());
PropertyMetadata<?> propertyMetadata;
if (type.isArray() && type.getComponentType().isAnnotation()) {
ConfigurationMetadata nestedConfigMetadata =
buildConfigurationMetadata_Nested(type.getComponentType(), propertyName, true);
propertyMetadata = new PropertyMetadata<>(propertyName, ConfigurationMetadata[].class)
.configurationMetadata(nestedConfigMetadata);
} else if (type.isAnnotation()) {
ConfigurationMetadata nestedConfigMetadata = buildConfigurationMetadata_Nested(type, propertyName, false);
propertyMetadata = new PropertyMetadata<>(propertyName, ConfigurationMetadata.class)
.configurationMetadata(nestedConfigMetadata);
} else {
propertyMetadata =
new PropertyMetadata<>(propertyName, type).defaultValue((T) propertyMethod.getDefaultValue());
}
Property propertyAnnotation = propertyMethod.getAnnotation(Property.class);
if (propertyAnnotation != null) {
propertyMetadata
.label(emptyToNull(propertyAnnotation.label()))
.description(emptyToNull(propertyAnnotation.description()))
.properties(propsArrayToMap(propertyAnnotation.property()))
.order(propertyAnnotation.order());
} else {
Map<String, String> emptyMap = Collections.emptyMap();
propertyMetadata.properties(emptyMap);
}
return (PropertyMetadata) propertyMetadata;
}