|
' 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.NetCore.Analyzers.InteropServices
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
Namespace Microsoft.NetCore.VisualBasic.Analyzers.InteropServices
<ExportCodeFixProvider(LanguageNames.CSharp, Name:=PInvokeDiagnosticAnalyzer.RuleCA2101Id), [Shared]>
Public Class BasicSpecifyMarshalingForPInvokeStringArgumentsFixer
Inherits SpecifyMarshalingForPInvokeStringArgumentsFixer
Protected Overrides Function IsAttribute(node As SyntaxNode) As Boolean
Return node.IsKind(SyntaxKind.Attribute)
End Function
Protected Overrides Function FindNamedArgument(arguments As IReadOnlyList(Of SyntaxNode), argumentName As String) As SyntaxNode
Return Aggregate arg In arguments.OfType(Of SimpleArgumentSyntax)
Where arg.IsNamed
Into FirstOrDefault(String.Equals(arg.NameColonEquals.Name.Identifier.Text, argumentName, StringComparison.OrdinalIgnoreCase))
End Function
Protected Overrides Function IsDeclareStatement(node As SyntaxNode) As Boolean
Return node.IsKind(SyntaxKind.DeclareFunctionStatement) OrElse
node.IsKind(SyntaxKind.DeclareSubStatement)
End Function
Protected Overrides Async Function FixDeclareStatementAsync(document As Document, node As SyntaxNode, cancellationToken As CancellationToken) As Task(Of Document)
Dim editor = Await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(False)
Dim decl = CType(node, DeclareStatementSyntax)
Dim newCharSetKeyword = SyntaxFactory.Token(SyntaxKind.UnicodeKeyword).
WithLeadingTrivia(decl.CharsetKeyword.LeadingTrivia).
WithTrailingTrivia(decl.CharsetKeyword.TrailingTrivia).
WithAdditionalAnnotations(Formatter.Annotation)
Dim newDecl = decl.WithCharsetKeyword(newCharSetKeyword)
editor.ReplaceNode(decl, newDecl)
Return editor.GetChangedDocument()
End Function
End Class
End Namespace
|