private static void AnalyzeSimpleMemberAccessExpression(SyntaxNodeAnalysisContext context) { var memberAccess = (MemberAccessExpressionSyntax)context.Node; if (memberAccess.IsParentKind(SyntaxKind.SimpleMemberAccessExpression)) { return; } if (memberAccess.Expression == null) { return; } if (memberAccess.Name?.Identifier.ValueText != "Empty") { return; } var fieldSymbol = context.SemanticModel.GetSymbol(memberAccess.Name, context.CancellationToken) as IFieldSymbol; if (!SymbolUtility.IsPublicStaticReadOnly(fieldSymbol)) { return; } if (fieldSymbol.ContainingType?.SpecialType != SpecialType.System_String) { return; } DiagnosticHelpers.ReportDiagnostic(context, DiagnosticRules.UseEmptyStringLiteralInsteadOfStringEmptyOrViceVersa, memberAccess, AnalyzerOptions.UseStringEmptyInsteadOfEmptyStringLiteral); }
public static bool IsFixable( MemberAccessExpressionSyntax memberAccess, SemanticModel semanticModel, CancellationToken cancellationToken = default) { if (memberAccess.IsParentKind(SyntaxKind.SimpleMemberAccessExpression)) { return(false); } if (memberAccess.Expression == null) { return(false); } if (memberAccess.Name?.Identifier.ValueText != "Empty") { return(false); } var fieldSymbol = semanticModel.GetSymbol(memberAccess.Name, cancellationToken) as IFieldSymbol; return(SymbolUtility.IsPublicStaticReadOnly(fieldSymbol) && fieldSymbol.ContainingType?.SpecialType == SpecialType.System_String); }
public static bool IsEmptyStringExpression( ExpressionSyntax expression, SemanticModel semanticModel, CancellationToken cancellationToken = default(CancellationToken)) { if (expression == null) { throw new ArgumentNullException(nameof(expression)); } if (semanticModel == null) { throw new ArgumentNullException(nameof(semanticModel)); } SyntaxKind kind = expression.Kind(); if (kind == SyntaxKind.StringLiteralExpression) { return(((LiteralExpressionSyntax)expression).Token.ValueText.Length == 0); } else if (kind == SyntaxKind.InterpolatedStringExpression) { return(!((InterpolatedStringExpressionSyntax)expression).Contents.Any()); } else if (kind == SyntaxKind.SimpleMemberAccessExpression) { var memberAccess = (MemberAccessExpressionSyntax)expression; if (memberAccess.Name?.Identifier.ValueText == "Empty") { ISymbol symbol = semanticModel.GetSymbol(memberAccess, cancellationToken); if (symbol?.Kind == SymbolKind.Field) { var fieldSymbol = (IFieldSymbol)symbol; if (SymbolUtility.IsPublicStaticReadOnly(fieldSymbol, "Empty") && fieldSymbol.ContainingType?.SpecialType == SpecialType.System_String && fieldSymbol.Type.IsString()) { return(true); } } } } Optional <object> optional = semanticModel.GetConstantValue(expression, cancellationToken); if (optional.HasValue) { var value = optional.Value as string; return(value?.Length == 0); } return(false); }