Skip to content

Commit 9c6adcb

Browse files
To6ihankem
authored andcommitted
Improve performance for transitive dependency checks
`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. Converting the given list to a Set with much better `contains()` performance fixes this issue. on-behalf-of: @e-solutions-GmbH <info@esolutions.de> Signed-off-by: To6i <To6i@users.noreply.github.com>
1 parent 54fae8d commit 9c6adcb

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

archunit/src/main/java/com/tngtech/archunit/lang/conditions/TransitiveDependencyCondition.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Set;
2222

2323
import com.google.common.collect.ImmutableList;
24+
import com.google.common.collect.ImmutableSet;
2425
import com.tngtech.archunit.PublicAPI;
2526
import com.tngtech.archunit.base.DescribedPredicate;
2627
import com.tngtech.archunit.core.domain.JavaClass;
@@ -41,7 +42,7 @@ public final class TransitiveDependencyCondition extends ArchCondition<JavaClass
4142

4243
private final DescribedPredicate<? super JavaClass> conditionPredicate;
4344
private final TransitiveDependencyPath transitiveDependencyPath = new TransitiveDependencyPath();
44-
private Collection<JavaClass> allClasses;
45+
private Set<JavaClass> allClasses;
4546

4647
public TransitiveDependencyCondition(DescribedPredicate<? super JavaClass> conditionPredicate) {
4748
super("transitively depend on classes that " + conditionPredicate.getDescription());
@@ -51,7 +52,7 @@ public TransitiveDependencyCondition(DescribedPredicate<? super JavaClass> condi
5152

5253
@Override
5354
public void init(Collection<JavaClass> allObjectsToTest) {
54-
this.allClasses = allObjectsToTest;
55+
this.allClasses = ImmutableSet.copyOf(allObjectsToTest);
5556
}
5657

5758
@Override

0 commit comments

Comments
 (0)