in src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java [407:439]
public void fill(final RuntimeDTO dto) {
final List<ResourceProviderDTO> dtos = new ArrayList<>();
final List<ResourceProviderFailureDTO> failures = new ArrayList<>();
synchronized ( this.handlers ) {
for(final List<ResourceProviderHandler> handlers : this.handlers.values()) {
boolean isFirst = true;
for(final ResourceProviderHandler h : handlers) {
final ResourceProviderDTO d;
if ( isFirst ) {
d = new ResourceProviderDTO();
dtos.add(d);
isFirst = false;
} else {
d = new ResourceProviderFailureDTO();
((ResourceProviderFailureDTO)d).reason = FailureReason.shadowed;
failures.add((ResourceProviderFailureDTO)d);
}
fill(d, h);
}
}
}
synchronized ( this.invalidProviders ) {
for(final Map.Entry<ResourceProviderInfo, FailureReason> entry : this.invalidProviders.entrySet()) {
final ResourceProviderFailureDTO d = new ResourceProviderFailureDTO();
fill(d, entry.getKey());
d.reason = entry.getValue();
failures.add(d);
}
}
dto.providers = dtos.toArray(new ResourceProviderDTO[dtos.size()]);
dto.failedProviders = failures.toArray(new ResourceProviderFailureDTO[failures.size()]);
}