private void analyze()

in maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/transformer/ConflictMarker.java [81:135]


    private void analyze(
            DependencyNode node, Map<DependencyNode, Object> nodes, Map<Object, ConflictGroup> groups, int[] counter) {
        if (nodes.put(node, Boolean.TRUE) != null) {
            return;
        }

        Set<Object> keys = getKeys(node);
        if (!keys.isEmpty()) {
            ConflictGroup group = null;
            boolean fixMappings = false;

            for (Object key : keys) {
                ConflictGroup g = groups.get(key);

                if (group != g) {
                    if (group == null) {
                        Set<Object> newKeys = merge(g.keys, keys);
                        if (newKeys == g.keys) {
                            group = g;
                            break;
                        } else {
                            group = new ConflictGroup(newKeys, counter[0]++);
                            fixMappings = true;
                        }
                    } else if (g == null) {
                        fixMappings = true;
                    } else {
                        Set<Object> newKeys = merge(g.keys, group.keys);
                        if (newKeys == g.keys) {
                            group = g;
                            fixMappings = false;
                            break;
                        } else if (newKeys != group.keys) {
                            group = new ConflictGroup(newKeys, counter[0]++);
                            fixMappings = true;
                        }
                    }
                }
            }

            if (group == null) {
                group = new ConflictGroup(keys, counter[0]++);
                fixMappings = true;
            }
            if (fixMappings) {
                for (Object key : group.keys) {
                    groups.put(key, group);
                }
            }
        }

        for (DependencyNode child : node.getChildren()) {
            analyze(child, nodes, groups, counter);
        }
    }