Skip to content

Commit

Permalink
fixup! add support to traverse JavaType signature
Browse files Browse the repository at this point in the history
Review: Add test for stopping traversal in the middle of DFS.
Signed-off-by: Peter Gafert <[email protected]>
  • Loading branch information
codecholeric committed Apr 7, 2024
1 parent 40e9365 commit 75a50b5
Showing 1 changed file with 34 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.tngtech.archunit.core.domain;

import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -350,6 +351,39 @@ <T extends List<?>> void method(Set<? extends T> param) {
assertThat(traversedTypes).containsExactlyElementsOf(types);
}

@Test
public void stops_depth_first_traversal_once_STOP_is_received() {
@SuppressWarnings("unused")
class SomeClass {
<T extends Map<String, File> & Serializable> void method(T param) {
}
}

JavaType type = new ClassFileImporter().importClass(SomeClass.class)
.getMethod("method", Map.class).getParameterTypes().get(0);

ExpectedTypes types = new ExpectedTypes();
JavaTypeVariable<?> typeVariableT = types.expect(type);
types.expect(typeVariableT.getUpperBounds().get(0));

List<JavaType> traversedTypes = new ArrayList<>();
type.traverseSignature(new AllRejectingSignatureVisitor() {
@Override
public Result visitTypeVariable(JavaTypeVariable<?> type) {
traversedTypes.add(type);
return Result.CONTINUE;
}

@Override
public Result visitParameterizedType(JavaParameterizedType type) {
traversedTypes.add(type);
return Result.STOP;
}
});

assertThat(traversedTypes).containsExactlyElementsOf(types);
}

private static JavaType.SignatureVisitor newTrackingVisitor(List<JavaType> traversedTypes) {
return new JavaType.SignatureVisitor() {
@Override
Expand Down

0 comments on commit 75a50b5

Please sign in to comment.