File: FindSymbols\FindReferences\FindReferencesDocumentState.cs
Web Access
Project: src\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces)
// 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.Collections.Generic;
using Microsoft.CodeAnalysis.LanguageService;
using Microsoft.CodeAnalysis.Shared.Extensions;
 
namespace Microsoft.CodeAnalysis.FindSymbols;
 
/// <summary>
/// Ephemeral information that find-references needs for a particular document when searching for a <em>specific</em>
/// symbol.  Importantly, it contains the global aliases to that symbol within the current project.
/// </summary>
internal sealed class FindReferencesDocumentState(
    FindReferenceCache cache,
    HashSet<string>? globalAliases)
{
    private static readonly HashSet<string> s_empty = [];
 
    public readonly FindReferenceCache Cache = cache;
    public readonly HashSet<string> GlobalAliases = globalAliases ?? s_empty;
 
    public Document Document => this.Cache.Document;
    public SyntaxNode Root => this.Cache.Root;
    public SemanticModel SemanticModel => this.Cache.SemanticModel;
    public SyntaxTree SyntaxTree => this.SemanticModel.SyntaxTree;
 
    public Solution Solution => this.Document.Project.Solution;
 
    // These are expensive enough (in the GetRequiredLanguageService call) that we cache this up front in stead of
    // computing on demand.
 
    public ISyntaxFactsService SyntaxFacts { get; } = cache.Document.GetRequiredLanguageService<ISyntaxFactsService>();
    public ISemanticFactsService SemanticFacts { get; } = cache.Document.GetRequiredLanguageService<ISemanticFactsService>();
}