File: Microsoft.NetCore.Analyzers\Performance\BasicUseStringContainsCharOverloadWithSingleCharactersFixer.vb
Web Access
Project: ..\..\..\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 Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.CodeFixes
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Microsoft.NetCore.Analyzers.Performance
 
Namespace Microsoft.NetCore.VisualBasic.Analyzers.Performance
 
    <ExportCodeFixProvider(LanguageNames.VisualBasic), [Shared]>
    Public NotInheritable Class BasicUseStringContainsCharOverloadWithSingleCharactersFixer
        Inherits UseStringContainsCharOverloadWithSingleCharactersCodeFix
 
        Protected Overrides Function TryGetArgumentName(violatingNode As SyntaxNode, ByRef argumentName As String) As Boolean
            If TypeOf violatingNode IsNot SimpleArgumentSyntax Then
                Return False
            End If
 
            Dim argumentSyntax = CType(violatingNode, SimpleArgumentSyntax)
            If argumentSyntax.NameColonEquals Is Nothing Then
                Return False
            End If
 
            argumentName = argumentSyntax.NameColonEquals.Name.Identifier.ValueText
            Return True
        End Function
 
        Protected Overrides Function TryGetLiteralValueFromNode(violatingNode As SyntaxNode, ByRef charLiteral As Char) As Boolean
            If TypeOf violatingNode Is LiteralExpressionSyntax Then
                Return TryGetCharFromLiteralExpressionSyntax(CType(violatingNode, LiteralExpressionSyntax), charLiteral)
            ElseIf TypeOf violatingNode Is SimpleArgumentSyntax Then
                Dim argumentSyntaxNode = CType(violatingNode, SimpleArgumentSyntax)
                If TypeOf argumentSyntaxNode.Expression Is LiteralExpressionSyntax Then
                    Return TryGetCharFromLiteralExpressionSyntax(CType(argumentSyntaxNode.Expression, LiteralExpressionSyntax), charLiteral)
                End If
 
                Return False
            End If
 
            Return False
        End Function
 
        Private Shared Function TryGetCharFromLiteralExpressionSyntax(sourceLiteralExpressionSyntax As LiteralExpressionSyntax, ByRef parsedCharLiteral As Char) As Boolean
            If TypeOf sourceLiteralExpressionSyntax.Token.Value IsNot String Then
                Return False
            End If
 
            Dim sourceLiteralValue = CType(sourceLiteralExpressionSyntax.Token.Value, String)
            If Char.TryParse(sourceLiteralValue, parsedCharLiteral) Then
                Return True
            End If
 
            Return False
        End Function
 
    End Class
 
End Namespace