in ComponentKit/Core/Scope/CKTreeVerificationHelpers.mm [37:69]
CKDuplicateComponentInfo CKFindDuplicateComponent(const RCLayout &layout)
{
std::queue<const RCLayout> queue;
NSMutableSet<id<NSObject>> *const previouslySeenComponent = [NSMutableSet new];
NSMapTable<id<CKMountable>, id<CKMountable>> *const componentsToParentComponents = [NSMapTable strongToStrongObjectsMapTable];
queue.push(layout);
while (!queue.empty()) {
const auto componentLayout = queue.front();
queue.pop();
auto const component = componentLayout.component;
if (component.class == CKEmptyComponent.class) {
continue;
}
if (component && [previouslySeenComponent containsObject:component]) {
return {
.component = component,
.backtraceDescription = RCComponentBacktraceDescription(generateComponentBacktrace(component, componentsToParentComponents)),
};
}
if (component) {
[previouslySeenComponent addObject:component];
}
if (componentLayout.children) {
for (const auto& childComponentLayout : *componentLayout.children) {
queue.push(childComponentLayout.layout);
[componentsToParentComponents setObject:componentLayout.component forKey:childComponentLayout.layout.component];
}
}
}
return {};
}