public boolean compact()

in src/main/java/org/apache/sling/installer/core/impl/EntityResourceList.java [460:491]


    public boolean compact() {
        synchronized ( lock ) {
            Collections.sort(this.resources);
            boolean startNewCycle = false;
            final List<TaskResource> toDelete = new ArrayList<>();
            boolean first = true;
            for(final TaskResource r : resources) {
                if ( r.getState() == ResourceState.UNINSTALLED || (!first && r.getState() == ResourceState.UNINSTALL) ) {
                    toDelete.add(r);
                }
                first = false;
            }

            if (!toDelete.isEmpty()) {
                // Avoid resources.remove(r) as the resource might have
                // changed since it was added, which causes it to compare()
                // differently and trip the TreeSet.remove() search.
                final Set<RegisteredResourceImpl> copy = new HashSet<>(resources);
                for(final RegisteredResource r : toDelete) {
                    copy.remove(r);
                    this.cleanup(r);
                    LOGGER.debug("Removing uninstalled from list: {}", r);
                }
                resources.clear();
                resources.addAll(copy);
                if ( !this.isEmpty() ) {
                    startNewCycle = true;
                }
            }
            return startNewCycle;
        }
    }