private static boolean searchTree()

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