private void OnItemsLoaded(IEnumerable <ITypeDefinitionTreeViewItem> items, TreeViewItemsBag itemsBag) { foreach (ITypeDefinitionTreeViewItem treeViewItem in items) { ITypeDefinition typeDefinition = treeViewItem.TypeDefinition; if (HasMatchingType(typeDefinition)) { itemsBag.AddNewEntry(treeViewItem); } } }
private void LoadInheritedTypes() { Task.Factory.StartNew(() => { var searchAssemblies = new Dictionary <IAssemblyDefinitionTreeViewItem, List <string> >(); int typesCount = 0; foreach (IAssemblyDefinitionTreeViewItem assemblyDefinitionTreeViewItem in this.treeViewItems.OfType <IAssemblyDefinitionTreeViewItem>()) { IModuleDefinition moduleDefinition = assemblyDefinitionTreeViewItem.AssemblyDefinition.MainModule; if (moduleDefinition.AssemblyReferences.Any(a => a.FullName == selectedTypeDefinition.Module.Assembly.FullName) || moduleDefinition.FilePath == selectedTypeDefinition.Module.FilePath) { foreach (ITypeDefinition typeDefinition in moduleDefinition.Types) { if (HasMatchingType(typeDefinition)) { typesCount++; if (searchAssemblies.ContainsKey(assemblyDefinitionTreeViewItem)) { searchAssemblies[assemblyDefinitionTreeViewItem].Add(typeDefinition.Namespace); } else { searchAssemblies.Add(assemblyDefinitionTreeViewItem, new List <string> { typeDefinition.Namespace }); } } } } } var treeViewItemsBag = new TreeViewItemsBag(OnItemsLoaded, typesCount); if (typesCount == 0) { treeViewItemsBag.Completed(); } foreach (KeyValuePair <IAssemblyDefinitionTreeViewItem, List <string> > item in searchAssemblies) { IList <string> namespaces = item.Value; item.Key.Expand(t => OnItemsLoaded(namespaces, t, treeViewItemsBag)); } }); progressWindow = new ProgressWindow(); progressWindow.ShowDialog(); }
private void OnItemsLoaded(IList <string> namespaces, IEnumerable <ITreeViewItem> items, TreeViewItemsBag itemsBag) { foreach (ITreeViewItem treeViewItem in items) { if (treeViewItem.TreeNodeType == TreeNodeType.AssemblyModuleDefinition) { treeViewItem.Expand(r => OnItemsLoaded(namespaces, r, itemsBag)); } else if (treeViewItem.TreeNodeType == TreeNodeType.AssemblyNamespace && namespaces.Any(n => n.Equals(((INamespaceTreeViewItem)treeViewItem).Namespace, StringComparison.OrdinalIgnoreCase))) { treeViewItem.Expand(r => OnItemsLoaded(r.OfType <ITypeDefinitionTreeViewItem>(), itemsBag)); } } }