/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/VisualStudio/Core/Def/DocumentationComments/VisualStudioDocumentationProvider.cs
68 строк
2 KB
Cyrus Najmabadi
Make sealed
26 мар 2025, 22:21
26 мар 2025, 22:21
d99b771
Код
Авторство
О чём код?
// 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; using Microsoft.VisualStudio.Shell.Interop; namespace Microsoft.VisualStudio.LanguageServices.Implementation.DocumentationComments; internal sealed class VisualStudioDocumentationProvider : DocumentationProvider { private readonly string _filePath; private readonly IVsXMLMemberIndexService _memberIndexService; private readonly Lazy<IVsXMLMemberIndex> _lazyMemberIndex; public VisualStudioDocumentationProvider(string filePath, IVsXMLMemberIndexService memberIndexService) { Contract.ThrowIfNull(memberIndexService); Contract.ThrowIfNull(filePath); _filePath = filePath; _memberIndexService = memberIndexService; _lazyMemberIndex = new Lazy<IVsXMLMemberIndex>(CreateXmlMemberIndex, isThreadSafe: true); } protected override string GetDocumentationForSymbol(string documentationMemberID, CultureInfo preferredCulture, CancellationToken token = default) { var memberIndex = _lazyMemberIndex.Value; if (memberIndex == null) { return ""; } if (ErrorHandler.Failed(memberIndex.ParseMemberSignature(documentationMemberID, out var methodID))) { return ""; } if (ErrorHandler.Failed(memberIndex.GetMemberXML(methodID, out var xml))) { return ""; } return xml; } private IVsXMLMemberIndex CreateXmlMemberIndex() { // This may fail if there is no XML file available for this assembly. We'll just leave // memberIndex null in this case. _memberIndexService.CreateXMLMemberIndex(_filePath, out var memberIndex); return memberIndex; } public override bool Equals(object obj) => obj is VisualStudioDocumentationProvider other && string.Equals(_filePath, other._filePath, StringComparison.OrdinalIgnoreCase); public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(_filePath); }