| File: SignatureHelp\AbstractGenericNameSignatureHelpProvider_Method.cs | Web Access |
| Project: src\roslyn\src\Features\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.Features.csproj (Microsoft.CodeAnalysis.CSharp.Features) |
// 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.Shared.Extensions; namespace Microsoft.CodeAnalysis.CSharp.SignatureHelp; internal partial class AbstractGenericNameSignatureHelpProvider { private static IList<SymbolDisplayPart> GetPreambleParts( IMethodSymbol method, SemanticModel semanticModel, int position) { var result = new List<SymbolDisplayPart>(); var awaitable = method.GetOriginalUnreducedDefinition().IsAwaitableNonDynamic(semanticModel, position); var extension = method.GetOriginalUnreducedDefinition().IsExtensionMethod(); if (awaitable && extension) { result.Add(Punctuation(SyntaxKind.OpenParenToken)); result.Add(Text(CSharpFeaturesResources.awaitable)); result.Add(Punctuation(SyntaxKind.CommaToken)); result.Add(Text(CSharpFeaturesResources.extension)); result.Add(Punctuation(SyntaxKind.CloseParenToken)); result.Add(Space()); } else if (awaitable) { result.Add(Punctuation(SyntaxKind.OpenParenToken)); result.Add(Text(CSharpFeaturesResources.awaitable)); result.Add(Punctuation(SyntaxKind.CloseParenToken)); result.Add(Space()); } else if (extension) { result.Add(Punctuation(SyntaxKind.OpenParenToken)); result.Add(Text(CSharpFeaturesResources.extension)); result.Add(Punctuation(SyntaxKind.CloseParenToken)); result.Add(Space()); } result.AddRange(method.ReturnType.ToMinimalDisplayParts(semanticModel, position)); result.Add(Space()); var containingType = GetContainingType(method); if (containingType != null) { result.AddRange(containingType.ToMinimalDisplayParts(semanticModel, position)); result.Add(Punctuation(SyntaxKind.DotToken)); } result.Add(new SymbolDisplayPart(SymbolDisplayPartKind.MethodName, method, method.Name)); result.Add(Punctuation(SyntaxKind.LessThanToken)); return result; } private static ITypeSymbol? GetContainingType(IMethodSymbol method) { var result = method.ReceiverType; if (result is not INamedTypeSymbol namedTypeSymbol || !namedTypeSymbol.IsScriptClass) { return result; } else { return null; } } private static IList<SymbolDisplayPart> GetPostambleParts(IMethodSymbol method, SemanticModel semanticModel, int position) { var result = new List<SymbolDisplayPart> { Punctuation(SyntaxKind.GreaterThanToken), Punctuation(SyntaxKind.OpenParenToken) }; var first = true; foreach (var parameter in method.Parameters) { if (!first) { result.Add(Punctuation(SyntaxKind.CommaToken)); result.Add(Space()); } first = false; result.AddRange(parameter.ToMinimalDisplayParts(semanticModel, position)); } result.Add(Punctuation(SyntaxKind.CloseParenToken)); return result; } }