File: src\Analyzers\VisualBasic\CodeFixes\ConvertTypeOfToNameOf\VisualBasicConvertGetTypeToNameOfCodeFixProvider.vb
Web Access
Project: src\src\CodeStyle\VisualBasic\CodeFixes\Microsoft.CodeAnalysis.VisualBasic.CodeStyle.Fixes.vbproj (Microsoft.CodeAnalysis.VisualBasic.CodeStyle.Fixes)
' 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.Diagnostics.CodeAnalysis
Imports System.Threading
Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.CodeFixes
Imports Microsoft.CodeAnalysis.ConvertTypeOfToNameOf
Imports Microsoft.CodeAnalysis.Simplification
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
 
Namespace Microsoft.CodeAnalysis.VisualBasic.ConvertTypeOfToNameOf
    <ExportCodeFixProvider(LanguageNames.VisualBasic, Name:=PredefinedCodeFixProviderNames.ConvertTypeOfToNameOf), [Shared]>
    Friend Class VisualBasicConvertGetTypeToNameOfCodeFixProvider
        Inherits AbstractConvertTypeOfToNameOfCodeFixProvider(
            Of MemberAccessExpressionSyntax)
 
        <ImportingConstructor>
        <SuppressMessage("RoslynDiagnosticsReliability", "RS0033:Importing constructor should be [Obsolete]", Justification:="Used in test code: https://github.com/dotnet/roslyn/issues/42814")>
        Public Sub New()
        End Sub
 
        Protected Overrides Function GetCodeFixTitle() As String
            Return VisualBasicCodeFixesResources.Convert_GetType_to_NameOf
        End Function
 
        Protected Overrides Function ConvertToUnboundGeneric(options As ParseOptions, nameOfSyntax As SyntaxNode) As SyntaxNode
            Return nameOfSyntax
        End Function
 
        Protected Overrides Function GetSymbolTypeExpression(semanticModel As SemanticModel, node As MemberAccessExpressionSyntax, cancellationToken As CancellationToken) As SyntaxNode
            Dim expression = node.Expression
            Dim type = DirectCast(expression, GetTypeExpressionSyntax).Type
            Dim symbolType = semanticModel.GetSymbolInfo(type, cancellationToken).Symbol.GetSymbolType()
            Dim symbolExpression = symbolType.GenerateExpressionSyntax()
 
            If TypeOf symbolExpression Is IdentifierNameSyntax OrElse TypeOf symbolExpression Is MemberAccessExpressionSyntax Then
                Return symbolExpression
            End If
 
            If TypeOf symbolExpression Is QualifiedNameSyntax Then
                Dim qualifiedName = DirectCast(symbolExpression, QualifiedNameSyntax)
                Return SyntaxFactory.
                    SimpleMemberAccessExpression(qualifiedName.Left, qualifiedName.Right).
                    WithAdditionalAnnotations(Simplifier.Annotation)
            End If
 
            ' Corresponding analyzer VisualBasicConvertTypeOfToNameOfDiagnosticAnalyzer validated the above syntax
            Throw ExceptionUtilities.Unreachable
        End Function
    End Class
End Namespace