示例#1
0
        /// <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));
        }
示例#2
0
    private static async Task <TextFilterFactory> CreateTextFilterFactoryAsync()
    {
        IPatternMatcherFactory patternMatcherFactory;


        patternMatcherFactory = await VS.GetMefServiceAsync <IPatternMatcherFactory>();

        return((pattern, isRegularExpression) => isRegularExpression
            ? new RegexTextFilter(pattern)
            : new PatternTextFilter(pattern, patternMatcherFactory));
    }
示例#3
0
        /// <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));
        }