in src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java [181:218]
public Iterator<Resource> listChildren(final @NotNull ResolveContext<Object> ctx, final @NotNull Resource parent) {
final ResourceResolver resolver = ctx.getResourceResolver();
final List<Iterator<? extends Resource>> allChildren = new ArrayList<>();
final boolean askParentResourceProvider = this.resolveChildren(resolver, parent, allChildren);
// get children from from shadowed provider
if (askParentResourceProvider) {
@SuppressWarnings("rawtypes")
final ResourceProvider parentResourceProvider = ctx.getParentResourceProvider();
@SuppressWarnings("rawtypes")
final ResolveContext resolveContext = ctx.getParentResolveContext();
if (parentResourceProvider != null && resolveContext != null) {
Iterator<Resource> children = parentResourceProvider.listChildren(resolveContext, parent);
if (children != null) {
this.addChildren(allChildren, children);
}
}
}
if (allChildren.isEmpty()) {
return null;
} else if (allChildren.size() == 1) {
return (Iterator<Resource>) allChildren.get(0);
} else {
// merge all children from the different iterators, but filter out potential duplicates with same resource
// name
return IteratorUtils.filteredIterator(
IteratorUtils.chainedIterator(allChildren), new Predicate<Resource>() {
private Set<String> names = new HashSet<>();
@Override
public boolean evaluate(final Resource resource) {
return names.add(resource.getName());
}
});
}
}