| File: Microsoft.NetCore.Analyzers\Runtime\BasicUseSpanBasedStringConcat.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.Operations Imports Microsoft.CodeAnalysis.Diagnostics Imports Microsoft.CodeAnalysis Namespace Microsoft.NetCore.VisualBasic.Analyzers.Runtime <DiagnosticAnalyzer(LanguageNames.VisualBasic)> Public NotInheritable Class BasicUseSpanBasedStringConcat : Inherits UseSpanBasedStringConcat Private Protected Overrides Function IsTopMostConcatOperation(binaryOperation As IBinaryOperation) As Boolean If Not IsStringConcatOperation(binaryOperation) Then Return False End If Dim parentBinaryOperation = TryCast(WalkUpImplicitConversionToObject(binaryOperation.Parent), IBinaryOperation) Return parentBinaryOperation Is Nothing OrElse Not IsStringConcatOperation(parentBinaryOperation) End Function Private Protected Overrides Function WalkDownBuiltInImplicitConversionOnConcatOperand(operand As IOperation) As IOperation Return BasicWalkDownBuiltInImplicitConversionOnConcatOperand(operand) End Function Private Shared Function IsStringConcatOperation(operation As IBinaryOperation) As Boolean 'OperatorKind will be Concatenate even when the "+" operator is used, provided both operands are strings. Return operation.OperatorKind = BinaryOperatorKind.Concatenate End Function Private Shared Function WalkUpImplicitConversionToObject(operation As IOperation) As IOperation Dim conversion = TryCast(operation, IConversionOperation) If conversion IsNot Nothing AndAlso conversion.Type.SpecialType = SpecialType.System_Object AndAlso conversion.IsImplicit AndAlso Not conversion.Conversion.IsUserDefined Then Return conversion.Parent Else Return operation End If End Function End Class End Namespace