private int topsortConflictIds()

in maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/transformer/ConflictIdSorter.java [127:171]


    private int topsortConflictIds(Collection<ConflictId> conflictIds, DependencyGraphTransformationContext context) {
        List<Object> sorted = new ArrayList<>(conflictIds.size());

        RootQueue roots = new RootQueue(conflictIds.size() / 2);
        for (ConflictId id : conflictIds) {
            if (id.inDegree <= 0) {
                roots.add(id);
            }
        }

        processRoots(sorted, roots);

        boolean cycle = sorted.size() < conflictIds.size();

        while (sorted.size() < conflictIds.size()) {
            // cycle -> deal gracefully with nodes still having positive in-degree

            ConflictId nearest = null;
            for (ConflictId id : conflictIds) {
                if (id.inDegree <= 0) {
                    continue;
                }
                if (nearest == null
                        || id.minDepth < nearest.minDepth
                        || (id.minDepth == nearest.minDepth && id.inDegree < nearest.inDegree)) {
                    nearest = id;
                }
            }

            nearest.inDegree = 0;
            roots.add(nearest);

            processRoots(sorted, roots);
        }

        Collection<Collection<Object>> cycles = Collections.emptySet();
        if (cycle) {
            cycles = findCycles(conflictIds);
        }

        context.put(TransformationContextKeys.SORTED_CONFLICT_IDS, sorted);
        context.put(TransformationContextKeys.CYCLIC_CONFLICT_IDS, cycles);

        return cycles.size();
    }