| File: SignatureHelp\ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb | Web Access |
| Project: src\roslyn\src\Features\VisualBasic\Portable\Microsoft.CodeAnalysis.VisualBasic.Features.vbproj (Microsoft.CodeAnalysis.VisualBasic.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. Imports Microsoft.CodeAnalysis.Collections Imports Microsoft.CodeAnalysis.DocumentationComments Imports Microsoft.CodeAnalysis.LanguageService Imports Microsoft.CodeAnalysis.SignatureHelp Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.SignatureHelp Partial Friend Class ObjectCreationExpressionSignatureHelpProvider Private Shared Function GetDelegateTypeConstructors(objectCreationExpression As ObjectCreationExpressionSyntax, semanticModel As SemanticModel, structuralTypeDisplayService As IStructuralTypeDisplayService, documentationCommentFormattingService As IDocumentationCommentFormattingService, delegateType As INamedTypeSymbol) As (items As IList(Of SignatureHelpItem), selectedItem As Integer?) Dim invokeMethod = delegateType.DelegateInvokeMethod If invokeMethod Is Nothing Then Return (Nothing, Nothing) End If Dim position = objectCreationExpression.SpanStart Dim item = CreateItem( invokeMethod, semanticModel, position, structuralTypeDisplayService, isVariadic:=False, documentationFactory:=invokeMethod.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), prefixParts:=GetDelegateTypePreambleParts(invokeMethod, semanticModel, position), separatorParts:=GetSeparatorParts(), suffixParts:=GetDelegateTypePostambleParts(), parameters:=GetDelegateTypeParameters(invokeMethod, semanticModel, position)) Return (SpecializedCollections.SingletonList(item), 0) End Function Private Shared Function GetDelegateTypePreambleParts(invokeMethod As IMethodSymbol, semanticModel As SemanticModel, position As Integer) As IList(Of SymbolDisplayPart) Dim result = New List(Of SymbolDisplayPart)() result.AddRange(invokeMethod.ContainingType.ToMinimalDisplayParts(semanticModel, position)) result.Add(Punctuation(SyntaxKind.OpenParenToken)) Return result End Function Private Shared Function GetDelegateTypeParameters(invokeMethod As IMethodSymbol, semanticModel As SemanticModel, position As Integer) As IList(Of SignatureHelpSymbolParameter) Const TargetName As String = "target" Dim parts = New List(Of SymbolDisplayPart)() If invokeMethod.ReturnsVoid Then parts.Add(Keyword(SyntaxKind.SubKeyword)) Else parts.Add(Keyword(SyntaxKind.FunctionKeyword)) End If parts.Add(Space()) parts.Add(Punctuation(SyntaxKind.OpenParenToken)) Dim first = True For Each parameter In invokeMethod.Parameters If Not first Then parts.Add(Punctuation(SyntaxKind.CommaToken)) parts.Add(Space()) End If first = False parts.AddRange(parameter.Type.ToMinimalDisplayParts(semanticModel, position)) Next parts.Add(Punctuation(SyntaxKind.CloseParenToken)) If Not invokeMethod.ReturnsVoid Then parts.Add(Space()) parts.Add(Keyword(SyntaxKind.AsKeyword)) parts.Add(Space()) parts.AddRange(invokeMethod.ReturnType.ToMinimalDisplayParts(semanticModel, position)) End If Return {New SignatureHelpSymbolParameter( TargetName, isOptional:=False, documentationFactory:=Nothing, displayParts:=parts)} End Function Private Shared Function GetDelegateTypePostambleParts() As IList(Of SymbolDisplayPart) Return {Punctuation(SyntaxKind.CloseParenToken)} End Function End Class End Namespace