| File: Microsoft.NetCore.Analyzers\Runtime\BasicSpecifyCultureForToLowerAndToUpper.Fixer.vb | Web Access |
| Project: src\sdk\src\Microsoft.CodeAnalysis.NetAnalyzers\src\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers\Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers.vbproj (Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers) |
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. Imports System.Composition Imports System.Threading Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.CodeFixes Imports Microsoft.CodeAnalysis.Editing Imports Microsoft.CodeAnalysis.Formatting Imports Microsoft.CodeAnalysis.VisualBasic Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports Microsoft.NetCore.Analyzers.Runtime Namespace Microsoft.NetCore.VisualBasic.Analyzers.Runtime <ExportCodeFixProvider(LanguageNames.VisualBasic), [Shared]> Public Class BasicSpecifyCultureForToLowerAndToUpperFixer Inherits SpecifyCultureForToLowerAndToUpperFixerBase Protected Overrides Function ShouldFix(node As SyntaxNode) As Boolean Return node.IsKind(SyntaxKind.IdentifierName) AndAlso Nullable.Equals(node.Parent?.IsKind(SyntaxKind.SimpleMemberAccessExpression), True) End Function Protected Overrides Function GetNodeToSpecifyCurrentCultureOn(node As SyntaxNode, model As SemanticModel, cancellationToken As CancellationToken) As SyntaxNode If Not ShouldFix(node) Then Return Nothing End If Dim memberAccess = DirectCast(node.Parent, MemberAccessExpressionSyntax) If memberAccess.Parent Is Nothing OrElse Not memberAccess.Parent.IsKind(SyntaxKind.InvocationExpression) Then Return memberAccess End If Dim invocation = DirectCast(memberAccess.Parent, InvocationExpressionSyntax) If invocation.ArgumentList Is Nothing Then Return invocation End If Dim methodSymbol = TryCast(model.GetSymbolInfo(node, cancellationToken).Symbol, IMethodSymbol) Return If(methodSymbol IsNot Nothing AndAlso methodSymbol.Parameters.Length = 0, invocation, Nothing) End Function Protected Overrides Function SpecifyCurrentCulture(currentNode As SyntaxNode, currentCultureArgument As SyntaxNode, generator As SyntaxGenerator) As SyntaxNode Dim argument = currentCultureArgument.WithAdditionalAnnotations(Formatter.Annotation) Dim invocation = TryCast(currentNode, InvocationExpressionSyntax) If invocation IsNot Nothing AndAlso invocation.ArgumentList IsNot Nothing Then Return invocation.AddArgumentListArguments(DirectCast(argument, ArgumentSyntax)).WithAdditionalAnnotations(Formatter.Annotation) End If Dim target = If(invocation IsNot Nothing, invocation.Expression, currentNode) Return generator.InvocationExpression(target.WithoutTrailingTrivia(), argument).WithAdditionalAnnotations(Formatter.Annotation) End Function Protected Overrides Function GetMemberAccessToMakeInvariant(node As SyntaxNode) As SyntaxNode Return If(ShouldFix(node), node.Parent, Nothing) End Function Protected Overrides Function UseInvariantVersion(currentMemberAccess As SyntaxNode, generator As SyntaxGenerator) As SyntaxNode Dim memberAccess = DirectCast(currentMemberAccess, MemberAccessExpressionSyntax) Dim replacementMethodName = GetReplacementMethodName(memberAccess.Name.Identifier.Text) Return memberAccess.WithName(DirectCast(generator.IdentifierName(replacementMethodName), SimpleNameSyntax)).WithAdditionalAnnotations(Formatter.Annotation) End Function End Class End Namespace