File: PickMembers\VisualStudioPickMembersService.cs
Web Access
Project: src\src\VisualStudio\Core\Def\Microsoft.VisualStudio.LanguageServices_pxr0p0dn_wpftmp.csproj (Microsoft.VisualStudio.LanguageServices)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using System.Collections.Immutable;
using System.Composition;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.PickMembers;
using Microsoft.VisualStudio.Language.Intellisense;
 
namespace Microsoft.VisualStudio.LanguageServices.Implementation.PickMembers;
 
[ExportWorkspaceService(typeof(IPickMembersService), ServiceLayer.Host), Shared]
internal class VisualStudioPickMembersService : IPickMembersService
{
    private readonly IGlyphService _glyphService;
 
    [ImportingConstructor]
    [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]
    public VisualStudioPickMembersService(IGlyphService glyphService)
        => _glyphService = glyphService;
 
    public PickMembersResult PickMembers(
        string title,
        ImmutableArray<ISymbol> members,
        ImmutableArray<PickMembersOption> options,
        bool selectAll)
    {
        options = options.NullToEmpty();
 
        var viewModel = new PickMembersDialogViewModel(_glyphService, members, options, selectAll);
        var dialog = new PickMembersDialog(viewModel, title);
        var result = dialog.ShowModal();
 
        if (result == true)
        {
            return new PickMembersResult(
                viewModel.MemberContainers.Where(c => c.IsChecked)
                                          .Select(c => c.Symbol)
                                          .ToImmutableArray(),
                options,
                viewModel.SelectedAll);
        }
        else
        {
            return PickMembersResult.Canceled;
        }
    }
}