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