File: FindReferences\Entries\SimpleMessageEntry.cs
Web Access
Project: src\src\VisualStudio\Core\Def\Microsoft.VisualStudio.LanguageServices_4r0c5m1y_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.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Navigation;
using Microsoft.VisualStudio.Shell.TableManager;
using Roslyn.Utilities;
 
namespace Microsoft.VisualStudio.LanguageServices.FindUsages;
 
internal partial class StreamingFindUsagesPresenter
{
    private sealed class SimpleMessageEntry : Entry, ISupportsNavigation
    {
        private readonly RoslynDefinitionBucket? _navigationBucket;
        private readonly string _message;
 
        private SimpleMessageEntry(
            RoslynDefinitionBucket definitionBucket,
            RoslynDefinitionBucket? navigationBucket,
            string message)
            : base(definitionBucket)
        {
            _navigationBucket = navigationBucket;
            _message = message;
        }
 
        public static Task<Entry> CreateAsync(
            RoslynDefinitionBucket definitionBucket,
            RoslynDefinitionBucket? navigationBucket,
            string message)
        {
            var referenceEntry = new SimpleMessageEntry(definitionBucket, navigationBucket, message);
            return Task.FromResult<Entry>(referenceEntry);
        }
 
        protected override object? GetValueWorker(string keyName)
        {
            return keyName switch
            {
                StandardTableKeyNames.ProjectName => ServicesVSResources.Not_applicable,
                StandardTableKeyNames.Text => _message,
                _ => null,
            };
        }
 
        public bool CanNavigateTo()
            => _navigationBucket != null && _navigationBucket.CanNavigateTo();
 
        public Task NavigateToAsync(NavigationOptions options, CancellationToken cancellationToken)
        {
            Contract.ThrowIfFalse(CanNavigateTo());
            Contract.ThrowIfNull(_navigationBucket);
            return _navigationBucket.NavigateToAsync(options, cancellationToken);
        }
    }
}