File: Microsoft.NetCore.Analyzers\Usage\BasicDoNotCompareSpanToNull.Fixer.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 Analyzer.Utilities
Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.CodeActions
Imports Microsoft.CodeAnalysis.CodeFixes
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Microsoft.NetCore.Analyzers
Imports Microsoft.NetCore.Analyzers.Usage
 
Namespace Microsoft.NetCore.VisualBasic.Analyzers.Tasks
    <ExportCodeFixProvider(LanguageNames.VisualBasic), [Shared]>
    Public Class BasicDoNotCompareSpanToNullFixer
        Inherits DoNotCompareSpanToNullFixer
 
        Public Overrides Async Function RegisterCodeFixesAsync(context As CodeFixContext) As Task
            Dim root = Await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(False)
            Dim condition = root.FindNode(context.Span, getInnermostNodeForTie:=True)
            Dim binaryExpression = TryCast(condition, BinaryExpressionSyntax)
            If binaryExpression Is Nothing Then
                Return
            End If
 
            Dim memberAccess As ExpressionSyntax = SyntaxFactory.MemberAccessExpression(
                SyntaxKind.SimpleMemberAccessExpression,
                GetComparatorExpression(binaryExpression).WithoutTrailingTrivia(),
                SyntaxFactory.Token(SyntaxKind.DotToken),
                SyntaxFactory.IdentifierName(IsEmpty)
            )
 
            If binaryExpression.IsKind(SyntaxKind.NotEqualsExpression) Then
                memberAccess = SyntaxFactory.NotExpression(memberAccess)
            End If
 
            Dim useIsEmptyCodeAction = CodeAction.Create(
                MicrosoftNetCoreAnalyzersResources.DoNotCompareSpanToNullIsEmptyCodeFixTitle,
                Function(ct) Task.FromResult(context.Document.WithSyntaxRoot(root.ReplaceNode(binaryExpression, memberAccess))),
                MicrosoftNetCoreAnalyzersResources.DoNotCompareSpanToNullIsEmptyCodeFixTitle
            )
            context.RegisterCodeFix(useIsEmptyCodeAction, context.Diagnostics)
        End Function
 
        Private Shared Function GetComparatorExpression(binaryExpression As BinaryExpressionSyntax) As ExpressionSyntax
            If binaryExpression.Left.IsKind(SyntaxKind.NothingLiteralExpression) Then
                Return binaryExpression.Right
            Else
                Return binaryExpression.Left
            End If
        End Function
    End Class
End Namespace