private Set reduce()

in src/main/java/org/apache/sling/servlets/resolver/internal/bundle/BundledScriptTracker.java [689:727]


    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;
    }