public static async Task <IVsHierarchy> ToVsHierarchyAsync(this EnvDTE.Project project) { await NuGetUIThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); IVsHierarchy hierarchy; // Get the vs solution var solution = await ServiceLocator.GetInstanceAsync <IVsSolution>(); int hr = solution.GetProjectOfUniqueName(project.GetUniqueName(), out hierarchy); if (hr != VSConstants.S_OK) { Marshal.ThrowExceptionForHR(hr); } return(hierarchy); }
public static async Task CollapseAllNodesAsync(IDictionary <string, ISet <VsHierarchyItem> > ignoreNodes) { Common.Verify.ArgumentIsNotNull(ignoreNodes, nameof(ignoreNodes)); await NuGetUIThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var dte = await ServiceLocator.GetInstanceAsync <EnvDTE.DTE>(); var projects = dte.Solution.Projects; foreach (var project in projects.Cast <EnvDTE.Project>()) { ISet <VsHierarchyItem> expandedNodes; if (ignoreNodes.TryGetValue(project.GetUniqueName(), out expandedNodes) && expandedNodes != null) { await CollapseProjectHierarchyItemsAsync(project, expandedNodes); } } }
public static async TaskExpandedNodes GetAllExpandedNodesAsync() { // this operation needs to execute on UI thread await NuGetUIThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var dte = await ServiceLocator.GetInstanceAsync <EnvDTE.DTE>(); var projects = dte.Solution.Projects; var results = new Dictionary <string, ISet <VsHierarchyItem> >(StringComparer.OrdinalIgnoreCase); foreach (var project in projects.Cast <EnvDTE.Project>()) { var expandedNodes = await GetExpandedProjectHierarchyItemsAsync(project); Debug.Assert(!results.ContainsKey(project.GetUniqueName())); results[project.GetUniqueName()] = new HashSet <VsHierarchyItem>(expandedNodes); } return(results); }