in core/src/main/java/com/spotify/missinglink/ConflictChecker.java [119:149]
public List<Conflict> check(
Artifact projectArtifact, List<Artifact> artifactsToCheck, List<Artifact> allArtifacts) {
final CheckerStateBuilder stateBuilder = new CheckerStateBuilder();
createCanonicalClassMapping(stateBuilder, allArtifacts);
CheckerState state = stateBuilder.build();
// brute-force reachability analysis
Set<TypeDescriptor> reachableClasses =
reachableFrom(projectArtifact.classes().values(), state.knownClasses());
final List<Conflict> conflicts = new ArrayList<>();
// Then go through everything in the classpath to make sure all the method calls / field
// references
// are satisfied.
for (Artifact artifact : artifactsToCheck) {
for (DeclaredClass clazz : artifact.classes().values()) {
if (!reachableClasses.contains(clazz.className())) {
continue;
}
for (DeclaredMethod method : clazz.methods().values()) {
conflicts.addAll(checkForBrokenMethodCalls(state, artifact, clazz, method));
conflicts.addAll(checkForBrokenFieldAccess(state, artifact, clazz, method));
}
}
}
return conflicts;
}