in src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/PropertyValidator.java [78:121]
public PropertyValidationResult validate(final Object value, final PropertyDescription desc, final Mode mode) {
final Context context = new Context();
context.description = desc;
context.validationMode = desc.getMode() != null ? desc.getMode() : (mode != null ? mode : Mode.STRICT);
if ( value == null ) {
if ( desc.isRequired() ) {
setResult(context, desc, "No value provided");
}
} else {
final List<Object> values;
if ( value.getClass().isArray() ) {
// array
values = new ArrayList<>();
for(int i=0;i<Array.getLength(value);i++) {
values.add(Array.get(value, i));
}
} else if ( value instanceof Collection ) {
// collection
values = new ArrayList<>();
final Collection<?> c = (Collection<?>)value;
for(final Object o : c) {
values.add(o);
}
} else {
// single value
values = null;
validateValue(context, desc, value);
}
if ( values != null ) {
// array or collection
for(final Object val : values) {
validateValue(context, desc, val);
}
validateList(context, desc, values);
}
if ( desc.getDeprecated() != null ) {
setResult(context.result, null, Mode.LENIENT, desc, desc.getDeprecated());
}
}
return context.result;
}