Skip to content

Conversation

@Jimin15
Copy link

@Jimin15 Jimin15 commented Jan 25, 2026

Following this checklist to help us incorporate your
contribution quickly and easily:

  • Your pull request should address just one issue, without pulling in other changes.
  • Write a pull request description that is detailed enough to understand what the pull request does, how, and why.

Summary

This PR adds CycleAwareDependencyGraphDumper, a new dependency visitor that visualizes cycles in dependency graphs while preventing StackOverflow errors. This addresses issue #1561.

What

Added CycleAwareDependencyGraphDumper class that wraps DependencyGraphDumper and adds cycle detection capabilities- When a cycle is detected, it displays the cycle with ^N notation where N is the index of the node in the path that it cycles back to- The visitor stops traversing children of cycle nodes to prevent infinite recursion

Why

Currently, DependencyGraphDumper fails with StackOverflowError when visualizing dependency graphs in FULL verbosity mode that contain cycles. While TreeDependencyVisitor can prevent the error, it doesn't visualize cycles. This new visitor provides both cycle visualization and StackOverflow prevention.

How

The implementation uses a Deque to track the current path during traversal- Cycle detection is performed by comparing versionless artifact IDs using ArtifactIdUtils.equalsVersionlessId()- When a cycle is detected, custom indentation formatting is applied to match the tree structure- The visitor delegates to DependencyGraphDumper for normal nodes and handles cycle nodes separately

Testing

Added comprehensive unit tests in CycleAwareDependencyGraphDumperTest- Tests verify: cycle detection, visualization format, StackOverflow prevention, and compatibility with non-cycle graphs- All tests pass successfully

Related Issue

Resolves #1561

  • Each commit in the pull request should have a meaningful subject line and body.
    Note that commits might be squashed by a maintainer on merge.
  • Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied.
    This may not always be possible but is a best-practice.
  • Run mvn verify to make sure basic checks pass.
    A more thorough check will be performed on your pull request automatically.
  • You have run the integration tests successfully (mvn -Prun-its verify).

If your pull request is about ~20 lines of code you don't need to sign an
Individual Contributor License Agreement if you are unsure
please ask on the developers list.

To make clear that you license your contribution under
the Apache License Version 2.0, January 2004
you have to acknowledge this by using the following check-box.

@Jimin15 Jimin15 marked this pull request as draft January 25, 2026 10:32
@Jimin15 Jimin15 closed this Jan 25, 2026
@Jimin15 Jimin15 reopened this Jan 25, 2026
@Jimin15 Jimin15 marked this pull request as ready for review January 25, 2026 11:18
@cstamas cstamas added the enhancement New feature or request label Jan 27, 2026
@cstamas cstamas added this to the 2.0.15 milestone Jan 27, 2026
@cstamas
Copy link
Member

cstamas commented Jan 27, 2026

PR has formatting issues, did you build it locally?

@kwin
Copy link
Member

kwin commented Jan 27, 2026

Where is this supposed to be used?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create a dependency visitor that can visualize cycles

3 participants