| File: Microsoft.NetCore.Analyzers\Runtime\BasicPreferDictionaryContainsMethods.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 Microsoft.NetCore.Analyzers.Runtime Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.CodeFixes Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports System.Threading Imports Microsoft.CodeAnalysis.Editing Imports Microsoft.CodeAnalysis.CodeActions Imports Microsoft.NetCore.Analyzers Namespace Microsoft.NetCore.VisualBasic.Analyzers.Runtime <ExportCodeFixProvider(LanguageNames.VisualBasic)> Public NotInheritable Class BasicPreferDictionaryContainsMethodsFixer : Inherits PreferDictionaryContainsMethodsFixer Public Overrides Async Function RegisterCodeFixesAsync(context As CodeFixContext) As Task Dim doc = context.Document Dim root = Await doc.GetSyntaxRootAsync().ConfigureAwait(False) Dim invocation = TryCast(root.FindNode(context.Span), InvocationExpressionSyntax) If invocation Is Nothing Then Return End If Dim containsMemberAccess = TryCast(invocation.Expression, MemberAccessExpressionSyntax) If containsMemberAccess Is Nothing Then Return End If Dim keysOrValuesMember = TryCast(containsMemberAccess.Expression, MemberAccessExpressionSyntax) If keysOrValuesMember Is Nothing Then Return End If If keysOrValuesMember.Name.Identifier.ValueText = PreferDictionaryContainsMethods.KeysPropertyName Then Dim ReplaceWithContainsKey = Async Function(ct As CancellationToken) As Task(Of Document) Dim editor = Await DocumentEditor.CreateAsync(doc, ct).ConfigureAwait(False) Dim containsKeyMemberExpression = editor.Generator.MemberAccessExpression(keysOrValuesMember.Expression, PreferDictionaryContainsMethods.ContainsKeyMethodName) Dim newInvocation = editor.Generator.InvocationExpression(containsKeyMemberExpression, invocation.ArgumentList.Arguments) editor.ReplaceNode(invocation, newInvocation) Return editor.GetChangedDocument() End Function Dim codeFixTitle = MicrosoftNetCoreAnalyzersResources.PreferDictionaryContainsKeyCodeFixTitle Dim action = CodeAction.Create(codeFixTitle, ReplaceWithContainsKey, codeFixTitle) context.RegisterCodeFix(action, context.Diagnostics) ElseIf keysOrValuesMember.Name.Identifier.ValueText = PreferDictionaryContainsMethods.ValuesPropertyName Then Dim ReplaceWithContainsValue = Async Function(ct As CancellationToken) As Task(Of Document) Dim editor = Await DocumentEditor.CreateAsync(doc, ct).ConfigureAwait(False) Dim containsValueMemberExpression = editor.Generator.MemberAccessExpression(keysOrValuesMember.Expression, PreferDictionaryContainsMethods.ContainsValueMethodName) Dim newInvocation = editor.Generator.InvocationExpression(containsValueMemberExpression, invocation.ArgumentList.Arguments) editor.ReplaceNode(invocation, newInvocation) Return editor.GetChangedDocument() End Function Dim codeFixTitle = MicrosoftNetCoreAnalyzersResources.PreferDictionaryContainsValueCodeFixTitle Dim action = CodeAction.Create(codeFixTitle, ReplaceWithContainsValue, codeFixTitle) context.RegisterCodeFix(action, context.Diagnostics) End If End Function End Class End Namespace