in src/main/java/org/apache/sling/servlets/resolver/internal/bundle/BundledScriptTracker.java [787:830]
private Set<BundledRenderUnitCapability> reduce(Set<BundledRenderUnitCapability> capabilities) {
Set<BundledRenderUnitCapability> extenders = capabilities.stream()
.filter(cap -> cap.getExtendedResourceType() != null
&& !cap.getResourceTypes().isEmpty()
&& cap.getSelectors().isEmpty()
&& cap.getMethod() == null
&& cap.getExtension() == null
&& cap.getScriptEngineName() == null)
.collect(Collectors.toSet());
if (extenders.isEmpty()) {
return capabilities;
}
Set<BundledRenderUnitCapability> originalCapabilities = new HashSet<>(capabilities);
Set<BundledRenderUnitCapability> newSet = new HashSet<>();
originalCapabilities.removeAll(extenders);
if (originalCapabilities.isEmpty()) {
return extenders;
}
Iterator<BundledRenderUnitCapability> extendersIterator = extenders.iterator();
while (extendersIterator.hasNext()) {
BundledRenderUnitCapability extender = extendersIterator.next();
Iterator<BundledRenderUnitCapability> mergeCandidates = originalCapabilities.iterator();
boolean processedExtender = false;
while (mergeCandidates.hasNext()) {
BundledRenderUnitCapability mergeCandidate = mergeCandidates.next();
if (extender.getResourceTypes().equals(mergeCandidate.getResourceTypes())) {
BundledRenderUnitCapability mergedCapability = BundledRenderUnitCapabilityImpl.builder()
.fromCapability(mergeCandidate)
.withExtendedResourceType(extender.getExtendedResourceType())
.build();
newSet.add(mergedCapability);
mergeCandidates.remove();
processedExtender = true;
}
}
if (processedExtender) {
extendersIterator.remove();
}
}
// add extenders for which we couldn't merge their properties
newSet.addAll(extenders);
newSet.addAll(originalCapabilities);
return newSet;
}