private List<KspPartObject> FindRemovedAndDependentParts (KspCraftObject craft, RegexFilter filter) { ui.DisplayUserMessage ($"Entering craft '{craft.Name}'..."); var partLookup = new PartLookup (craft); var removedParts = partLookup.LookupParts (filter).ToList (); ui.DisplayUserMessage ($"Found {removedParts.Count} parts to be removed"); var dependentParts = new HashSet<KspPartObject> (); Parallel.ForEach (removedParts, removedPart => { foreach (var part in partLookup.LookupHardDependencies (removedPart).Except (removedParts)) { lock (dependentParts) { dependentParts.Add (part); } } }); ui.DisplayUserMessage ($"Found {dependentParts.Count} dependent parts"); return removedParts.Concat (dependentParts).ToList (); }
public void CanLookupHardDependenciesOnAGivenPart () { // given var craft = createTestCraft (); var parts = craft.Children<KspPartObject> ().ToArray (); var dependency = parts [2]; var expectedDependencies = new[] { parts [1], // parent is [2] parts [5], // sym to [1] // parts [8] links do not not matter for hard-dependency check }; var target = new PartLookup (craft); // when var actualDependencies = target.LookupHardDependencies (dependency); // then Assert.That (actualDependencies, Is.EqualTo (expectedDependencies)); }