static void Insert <T> (int index, IList <T> allItems, List <T> sortedItems, bool[] inserted, bool[] triedToInsert, ConfigurationSelector solutionConfiguration) where T : SolutionItem { if (triedToInsert[index]) { throw new CyclicDependencyException(); } triedToInsert[index] = true; SolutionItem insertItem = allItems[index]; foreach (SolutionItem reference in insertItem.GetReferencedItems(solutionConfiguration)) { for (int j = 0; j < allItems.Count; ++j) { SolutionItem checkItem = allItems[j]; if (reference == checkItem) { if (!inserted[j]) { Insert(j, allItems, sortedItems, inserted, triedToInsert, solutionConfiguration); } break; } } } sortedItems.Add((T)insertItem); inserted[index] = true; }
static void CollectBuildableDependencies(HashSet <SolutionItem> collected, SolutionItem item, ConfigurationSelector configuration, SolutionConfiguration conf) { foreach (var it in item.GetReferencedItems(configuration)) { if (collected.Contains(it) || !conf.BuildEnabledForItem(it)) { continue; } collected.Add(it); CollectBuildableDependencies(collected, it, configuration, conf); } }
void GetBuildableReferencedItems(Set <SolutionItem> visited, List <SolutionItem> referenced, SolutionItem item, ConfigurationSelector configuration) { if (!visited.Add(item)) { return; } referenced.Add(item); foreach (SolutionItem ritem in item.GetReferencedItems(configuration)) { GetBuildableReferencedItems(visited, referenced, ritem, configuration); } }
void GetAllBuildableReferences(List <SolutionItem> list, SolutionItem item, ConfigurationSelector configuration, bool includeExternalReferences) { if (list.Contains(item)) { return; } list.Add(item); if (includeExternalReferences) { foreach (SolutionItem it in item.GetReferencedItems(configuration)) { GetAllBuildableReferences(list, it, configuration, includeExternalReferences); } } }
void GetBuildableReferencedItems(List <SolutionItem> referenced, SolutionItem item, ConfigurationSelector configuration) { if (referenced.Contains(item)) { return; } if (item.NeedsBuilding(configuration)) { referenced.Add(item); } foreach (SolutionItem ritem in item.GetReferencedItems(configuration)) { GetBuildableReferencedItems(referenced, ritem, configuration); } }
void GetAllBuildableReferences(List <SolutionItem> list, SolutionItem item, ConfigurationSelector configuration, SolutionConfiguration conf, bool includeExternalReferences, bool isDirectReference) { if (list.Contains(item) || !conf.BuildEnabledForItem(item)) { return; } // Skip unsupported projects which are not directly referenced by other (supported) projects if (!isDirectReference && item.IsUnsupportedProject) { return; } list.Add(item); if (includeExternalReferences) { foreach (var it in item.GetReferencedItems(configuration)) { GetAllBuildableReferences(list, it, configuration, conf, includeExternalReferences, true); } } }