in src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java [202:242]
public Resource getResource(final ResolveContext<Void> ctx, final String path, final ResourceContext rCtx, final Resource parent) {
final String relativePath = getRelativePath(path);
if (relativePath != null) {
final ResourceHolder holder = new ResourceHolder(ResourceUtil.getName(path));
final ResourceResolver resolver = ctx.getResourceResolver();
final Iterator<Resource> resources = picker.pickResources(resolver, relativePath, parent).iterator();
if (!resources.hasNext()) {
return null;
}
boolean isUnderlying = true;
while (resources.hasNext()) {
final Resource resource = resources.next();
final boolean hidden;
if (isUnderlying) {
hidden = false;
isUnderlying = false;
} else {
// check parent for hiding
// SLING-3521 : if parent is not readable, nothing is hidden
final Resource resourceParent = resource.getParent();
hidden = resourceParent != null && new ResourceHidingHandler(resourceParent, this.traverseHierarchie).isHidden(holder.name, true);
// TODO Usually, the parent does not exist if the resource is a NonExistingResource. Ideally, this
// common case should be optimised
}
if (hidden) {
holder.resources.clear();
} else if (!ResourceUtil.isNonExistingResource(resource)) {
holder.resources.add(resource);
}
}
return createMergedResource(resolver, relativePath, holder);
}
return null;
}