TransitiveDependencyCondition internally calls contains() recursively on the collection of all objects to be tested. If this collection is a large list and there are enough recursive calls to getDirectDependencyTargetsOutsideOfAnalyzedClasses() this results in a heavy performance impact. On a reasonable large project a single test using that condition may take minutes to complete.
Here is a 30 seconds FlameGraph taken while an transitive check was running for > 2 minutes:
Based on the samples, the CPU hangs in this filter lamdba for > 86% of the time:
TransitiveDependencyCondition
internally callscontains()
recursively on the collection of all objects to be tested. If this collection is a large list and there are enough recursive calls togetDirectDependencyTargetsOutsideOfAnalyzedClasses()
this results in a heavy performance impact. On a reasonable large project a single test using that condition may take minutes to complete.Here is a 30 seconds FlameGraph taken while an transitive check was running for > 2 minutes:
Based on the samples, the CPU hangs in this filter lamdba for > 86% of the time:
So, converting the given list to a Set with much better
contains()
performance fixes this issue.