in enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/BanTransitiveDependencies.java [83:139]
private static boolean searchTree(
DependencyNode node,
int level,
ArtifactMatcher excludes,
Set<Dependency> directDependencies,
StringBuilder message) {
List<DependencyNode> children = node.getChildren();
/*
* if the node is deeper than direct dependency and is empty, it is transitive.
*/
boolean hasTransitiveDependencies = level > 1;
boolean excluded = false;
/*
* holds recursive message from children, will be appended to current message if this node has any transitive
* descendants if message is null, don't generate recursive message.
*/
StringBuilder messageFromChildren = message == null ? null : new StringBuilder();
if (excludes.match(ArtifactUtils.toArtifact(node))) {
// is excluded, we don't care about descendants
excluded = true;
hasTransitiveDependencies = false;
} else if (directDependencies.contains(node.getDependency())) {
hasTransitiveDependencies = false;
} else {
for (DependencyNode childNode : children) {
/*
* if any of the children has transitive d. so does the parent
*/
hasTransitiveDependencies = hasTransitiveDependencies
|| searchTree(childNode, level + 1, excludes, directDependencies, messageFromChildren);
}
}
if ((excluded || hasTransitiveDependencies) && message != null) // then generate message
{
message.append(StringUtils.repeat(" ", level)).append(node.getArtifact());
if (excluded) {
message.append(" [excluded]").append(System.lineSeparator());
}
if (hasTransitiveDependencies) {
if (level > 0) {
message.append(" has transitive dependencies:");
}
message.append(System.lineSeparator()).append(messageFromChildren);
}
}
return hasTransitiveDependencies;
}