/// <summary> /// Converts a <see cref="IVsHierarchy"/> to a <see cref="IVsHierarchyItem"/>. /// </summary> public static async Task <IVsHierarchyItem> ToHierarchyItemAsync(this IVsHierarchy hierarchy, uint itemId) { if (hierarchy == null) { throw new ArgumentNullException(nameof(hierarchy)); } IVsHierarchyItemManager manager = await VS.GetMefServiceAsync <IVsHierarchyItemManager>(); return(manager.GetHierarchyItem(hierarchy, itemId)); }
private static async Task <TextFilterFactory> CreateTextFilterFactoryAsync() { IPatternMatcherFactory patternMatcherFactory; patternMatcherFactory = await VS.GetMefServiceAsync <IPatternMatcherFactory>(); return((pattern, isRegularExpression) => isRegularExpression ? new RegexTextFilter(pattern) : new PatternTextFilter(pattern, patternMatcherFactory)); }
/// <summary> /// Converts a <see cref="IVsHierarchy"/> to a <see cref="IVsHierarchyItem"/>. /// </summary> /// <returns>Returns <see langword="null"/> if unable to get the hierarchy item.</returns> public static async Task <IVsHierarchyItem?> ToHierarchyItemAsync(this IVsHierarchy hierarchy, uint itemId) { if (hierarchy == null) { return(null); } IVsHierarchyItemManager?manager = await VS.GetMefServiceAsync <IVsHierarchyItemManager>(); manager.TryGetHierarchyItem(hierarchy, itemId, out IVsHierarchyItem? item); return(item); }
private static async Task <List <(HierarchyNode Hierarchy, Guid Parent)> > GetNodesAsync() { IVsSolution solution; IVsImageService2 imageService; IVsHierarchyItemManager hierarchyItemManager; List <(HierarchyNode Hierarchy, Guid Parent)> output; await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); solution = await VS.Services.GetSolutionAsync(); imageService = (IVsImageService2)await VS.Services.GetImageServiceAsync(); hierarchyItemManager = await VS.GetMefServiceAsync <IVsHierarchyItemManager>(); output = new List <(HierarchyNode Hierarchy, Guid Parent)>(); foreach (var hierarchy in solution.GetAllProjectHierarchies(ProjectStateFilter.All)) { if (!TryGetIdentifier(solution, hierarchy, out Guid identifier)) { continue; } // Always ignore the "Miscellaneous Files" project // because the items in it are not part of the solution. if (identifier.Equals(VSConstants.CLSID.MiscellaneousFilesProject_guid)) { continue; } output.Add( ( CreateNode(hierarchy, identifier, imageService, hierarchyItemManager), GetParentIdentifier(solution, hierarchy) ) ); } return(output); }
/// <summary> /// Opens an undo context with the specified name. Remember to call <c>Complete()</c> and <c>Dispose()</c> to commit the transaction. /// </summary> public static async Task <ITextUndoTransaction> OpenUndoContextAsync(this ITextBuffer buffer, string name) { ITextUndoHistoryRegistry?registry = await VS.GetMefServiceAsync <ITextUndoHistoryRegistry>(); return(registry.GetHistory(buffer).CreateTransaction(name)); }