in src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java [181:217]
public Iterator<Resource> listChildren(
@SuppressWarnings("rawtypes") final ResolveContext ctx, final Resource parent) {
Map<String, Resource> result = new LinkedHashMap<>();
final ResourceProvider<?> parentProvider = ctx.getParentResourceProvider();
if (parentProvider != null) {
for (Iterator<Resource> iter = parentProvider.listChildren(ctx.getParentResolveContext(), parent);
iter != null && iter.hasNext(); ) {
Resource resource = iter.next();
result.put(resource.getPath(), resource);
}
}
Set<String> paths = tree.get().get(parent.getPath());
if (paths != null) {
for (String path : paths.toArray(new String[0])) {
Map.Entry<ServletResourceProvider, ServiceReference<?>> provider =
providers.get().get(path);
if (provider != null) {
Resource resource = provider.getKey().getResource(ctx, path, null, parent);
if (resource != null) {
Resource wrapped = result.put(path, resource);
if (resource instanceof ServletResource) {
((ServletResource) resource).setWrappedResource(wrapped);
}
}
} else {
result.computeIfAbsent(
path,
key -> new SyntheticResource(
ctx.getResourceResolver(), key, ResourceProvider.RESOURCE_TYPE_SYNTHETIC));
}
}
}
return result.values().iterator();
}