Problems problems,
CompositeValidator validators ) {
Object items = parent.get("items");
if (Null.matches(items)) return;
Path path = parentPath.with("items");
String requiredName = parentPath.getLast();
if (requiredName == null) return;
// Either a schema or an array of schemas ...
if (items instanceof Document) {
Document schema = (Document)items;
Validator validator = create(schema, path);
if (validator != null) {
validators.add(new AllItemsMatchValidator(requiredName, validator));
}
} else if (items instanceof List<?>) {
// This is called "tuple typing" in the spec, and can also have 'additionalItems' ...
List<?> array = (List<?>)items;
List<Validator> itemValidators = new ArrayList<Validator>(array.size());
for (Object item : array) {
if (item instanceof Document) {
Validator validator = create((Document)item, path);
if (validator != null) {
itemValidators.add(validator);
}
}
}
// Check the additional items ...
boolean additionalItemsAllowed = parent.getBoolean("additionalItems", true);
Validator additionalItemsValidator = null;
if (!additionalItemsAllowed) {
additionalItemsValidator = new NotValidValidator();
} else {
// additional items are allowed, but check whether there is a schema for the additional items ...
Document additionalItems = parent.getDocument("additionalItems");
if (additionalItems != null) {
Path additionalItemsPath = parentPath.with("additionalItems");
additionalItemsValidator = create(additionalItems, additionalItemsPath);
}
}
if (!itemValidators.isEmpty()) {