| File: DocumentationComments\PEDocumentationCommentUtils.cs | Web Access |
| Project: src\roslyn\src\Compilers\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.csproj (Microsoft.CodeAnalysis.CSharp) |
// 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. #nullable disable using System; using System.Globalization; using System.Threading; using Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE; using Microsoft.CodeAnalysis.CSharp.Symbols; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.CSharp.DocumentationComments { internal static class PEDocumentationCommentUtils { internal static string GetDocumentationComment( Symbol symbol, PEModuleSymbol containingPEModule, CultureInfo preferredCulture, CancellationToken cancellationToken, ref Tuple<CultureInfo, string> lazyDocComment) { // Have we cached anything? if (lazyDocComment == null) { Interlocked.CompareExchange( ref lazyDocComment, Tuple.Create( preferredCulture, containingPEModule.DocumentationProvider.GetDocumentationForSymbol( symbol.GetDocumentationCommentId(), preferredCulture, cancellationToken)), null); } // Does the cached version match the culture we asked for? if (object.Equals(lazyDocComment.Item1, preferredCulture)) { return lazyDocComment.Item2; } // We've already cached a different culture - create a fresh version. return containingPEModule.DocumentationProvider.GetDocumentationForSymbol( symbol.GetDocumentationCommentId(), preferredCulture, cancellationToken); } } }