private Set reduce()

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