@@ -65,9 +65,17 @@ public RequiredType GetObjectEqualityType(VBSyntax.BinaryExpressionSyntax node,
6565
6666 public ( ExpressionSyntax lhs , ExpressionSyntax rhs ) VbCoerceToString ( VBSyntax . ExpressionSyntax vbLeft , ExpressionSyntax csLeft , TypeInfo lhsTypeInfo , VBSyntax . ExpressionSyntax vbRight , ExpressionSyntax csRight , TypeInfo rhsTypeInfo )
6767 {
68+ if ( IsNonEmptyStringLiteral ( vbLeft ) || IsNonEmptyStringLiteral ( vbRight ) ) {
69+ return ( csLeft , csRight ) ;
70+ }
6871 return ( VbCoerceToString ( vbLeft , csLeft , lhsTypeInfo ) , VbCoerceToString ( vbRight , csRight , rhsTypeInfo ) ) ;
6972 }
7073
74+ private static bool IsNonEmptyStringLiteral ( VBSyntax . ExpressionSyntax vbExpr )
75+ {
76+ return vbExpr . SkipParens ( ) . IsKind ( VBSyntaxKind . StringLiteralExpression ) && vbExpr is VBSyntax . LiteralExpressionSyntax literal && ! IsEmptyString ( literal ) ;
77+ }
78+
7179 private ExpressionSyntax VbCoerceToString ( VBSyntax . ExpressionSyntax vbNode , ExpressionSyntax csNode , TypeInfo typeInfo )
7280 {
7381 bool isStringType = typeInfo . Type . SpecialType == SpecialType . System_String ;
@@ -163,12 +171,16 @@ private bool IsNothingOrEmpty(VBSyntax.ExpressionSyntax expressionSyntax)
163171 {
164172 if ( expressionSyntax is VBSyntax . LiteralExpressionSyntax les &&
165173 ( les . IsKind ( VBSyntaxKind . NothingLiteralExpression ) ||
166- ( les . IsKind ( VBSyntaxKind . StringLiteralExpression ) &&
167- String . IsNullOrEmpty ( les . Token . ValueText ) ) ) ) return true ;
174+ IsEmptyString ( les ) ) ) return true ;
168175 var constantAnalysis = _semanticModel . GetConstantValue ( expressionSyntax ) ;
169176 return constantAnalysis . HasValue && ( constantAnalysis . Value == null || constantAnalysis . Value as string == "" ) ;
170177 }
171178
179+ private static bool IsEmptyString ( VBSyntax . LiteralExpressionSyntax les )
180+ {
181+ return les . IsKind ( VBSyntaxKind . StringLiteralExpression ) && string . IsNullOrEmpty ( les . Token . ValueText ) ;
182+ }
183+
172184 private static ExpressionSyntax NegateIfNeeded ( VBSyntax . BinaryExpressionSyntax node , InvocationExpressionSyntax positiveExpression )
173185 {
174186 return node . IsKind ( VBasic . SyntaxKind . EqualsExpression )
0 commit comments