private void CloneDependentsInternal(Reference tail, DependencyMap dependents, DependencyMap precedents, IDictionary seenNodes) { // Have we seen this reference already? if (seenNodes.Contains(tail)) { // Yes so just return return; } // Mark it as seen seenNodes.Add(tail, null); var list = (IList)_map[tail]; if (list == null) { // No dependents so just return return; } foreach (Reference dependant in list) { dependents.AddDependency(tail, dependant); precedents.AddDependency(dependant, tail); CloneDependentsInternal(dependant, dependents, precedents, seenNodes); } }