| File: InlineHints\VisualBasicInlineParameterNameHintsService.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 System.Composition Imports System.Threading Imports Microsoft.CodeAnalysis.Host.Mef Imports Microsoft.CodeAnalysis.InlineHints Imports Microsoft.CodeAnalysis.LanguageService Imports Microsoft.CodeAnalysis.PooledObjects Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.InlineHints <ExportLanguageService(GetType(IInlineParameterNameHintsService), LanguageNames.VisualBasic), [Shared]> Friend Class VisualBasicInlineParameterNameHintsService Inherits AbstractInlineParameterNameHintsService <ImportingConstructor> <Obsolete(MefConstruction.ImportingConstructorMessage, True)> Public Sub New() End Sub Protected Overrides Sub AddAllParameterNameHintLocations( semanticModel As SemanticModel, syntaxFacts As ISyntaxFactsService, node As SyntaxNode, buffer As ArrayBuilder(Of (position As Integer, argument As SyntaxNode, parameter As IParameterSymbol, kind As HintKind)), cancellationToken As CancellationToken) Dim argumentList = TryCast(node, ArgumentListSyntax) If argumentList Is Nothing Then Return End If For Each arg In argumentList.Arguments Dim argument = TryCast(arg, SimpleArgumentSyntax) If argument Is Nothing Then Continue For End If If argument?.Expression Is Nothing Then Continue For End If If argument.IsNamed OrElse argument.NameColonEquals IsNot Nothing Then Continue For End If Dim parameter = argument.DetermineParameter(semanticModel, allowParamArray:=False, cancellationToken:=cancellationToken) If String.IsNullOrEmpty(parameter?.Name) Then Continue For End If Dim argumentIdentifier = GetIdentifierNameFromArgument(argument, syntaxFacts) buffer.Add((argument.Span.Start, argument, parameter, GetKind(argument.Expression))) Next End Sub Private Shared Function GetKind(arg As ExpressionSyntax) As HintKind If TypeOf arg Is LiteralExpressionSyntax OrElse TypeOf arg Is InterpolatedStringExpressionSyntax Then Return HintKind.Literal End If If TypeOf arg Is ObjectCreationExpressionSyntax Then Return HintKind.ObjectCreation End If Dim predefinedCast = TryCast(arg, PredefinedCastExpressionSyntax) If predefinedCast IsNot Nothing Then ' Recurse until we find a literal ' If so, then we should add the adornment Return GetKind(predefinedCast.Expression) End If Dim cast = TryCast(arg, CastExpressionSyntax) If cast IsNot Nothing Then ' Recurse until we find a literal ' If so, then we should add the adornment Return GetKind(cast.Expression) End If Dim unary = TryCast(arg, UnaryExpressionSyntax) If unary IsNot Nothing Then ' Recurse until we find a literal ' If so, then we should add the adornment Return GetKind(unary.Operand) End If Return HintKind.Other End Function Protected Overrides Function IsIndexer(node As SyntaxNode, parameter As IParameterSymbol) As Boolean Dim propertySymbol = TryCast(parameter.ContainingSymbol, IPropertySymbol) Return propertySymbol IsNot Nothing AndAlso propertySymbol.IsDefault End Function Protected Overrides Function GetReplacementText(parameterName As String) As String Return parameterName & ":=" End Function End Class End Namespace