| File: SignatureHelp\ObjectCreationExpressionSignatureHelpProvider_DelegateType.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 System.Collections.Immutable; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.LanguageService; using Microsoft.CodeAnalysis.SignatureHelp; namespace Microsoft.CodeAnalysis.CSharp.SignatureHelp; internal sealed partial class ObjectCreationExpressionSignatureHelpProvider { private static ImmutableArray<SignatureHelpItem> ConvertDelegateTypeConstructor( BaseObjectCreationExpressionSyntax objectCreationExpression, IMethodSymbol invokeMethod, SemanticModel semanticModel, IStructuralTypeDisplayService structuralTypeDisplayService, int position) { var item = CreateItem( invokeMethod, semanticModel, objectCreationExpression.SpanStart, structuralTypeDisplayService, isVariadic: false, documentationFactory: null, prefixParts: GetDelegateTypePreambleParts(invokeMethod, semanticModel, position), separatorParts: GetSeparatorParts(), suffixParts: GetDelegateTypePostambleParts(), parameters: GetDelegateTypeParameters(invokeMethod, semanticModel, position)); return [item]; } private static IList<SymbolDisplayPart> GetDelegateTypePreambleParts(IMethodSymbol invokeMethod, SemanticModel semanticModel, int position) { var result = new List<SymbolDisplayPart>(); result.AddRange(invokeMethod.ContainingType.ToMinimalDisplayParts(semanticModel, position)); result.Add(Punctuation(SyntaxKind.OpenParenToken)); return result; } private static IList<SignatureHelpSymbolParameter> GetDelegateTypeParameters(IMethodSymbol invokeMethod, SemanticModel semanticModel, int position) { const string TargetName = "target"; var parts = new List<SymbolDisplayPart>(); parts.AddRange(invokeMethod.ReturnType.ToMinimalDisplayParts(semanticModel, position)); parts.Add(Space()); parts.Add(Punctuation(SyntaxKind.OpenParenToken)); var first = true; foreach (var parameter in invokeMethod.Parameters) { if (!first) { parts.Add(Punctuation(SyntaxKind.CommaToken)); parts.Add(Space()); } first = false; parts.AddRange(parameter.Type.ToMinimalDisplayParts(semanticModel, position)); } parts.Add(Punctuation(SyntaxKind.CloseParenToken)); parts.Add(Space()); parts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.ParameterName, null, TargetName)); return [new SignatureHelpSymbolParameter( TargetName, isOptional: false, documentationFactory: null, displayParts: parts)]; } private static IList<SymbolDisplayPart> GetDelegateTypePostambleParts() => [Punctuation(SyntaxKind.CloseParenToken)]; }