private static void ConvertStringEmptyToEmptyStringLiteral(CodeRefactoringContext context, MemberAccessExpressionSyntax memberAccess, SemanticModel semanticModel)
        {
            if (StringEmptyRefactoring.CanConvertStringEmptyToEmptyStringLiteral(memberAccess, semanticModel, context.CancellationToken))
            {
                context.RegisterRefactoring(
                    "Convert to \"\"",
                    cancellationToken =>
                {
                    return(StringEmptyRefactoring.ConvertStringEmptyToEmptyStringLiteralAsync(
                               context.Document,
                               memberAccess,
                               cancellationToken));
                });
            }
            else
            {
                memberAccess = (MemberAccessExpressionSyntax)memberAccess
                               .FirstAncestor(SyntaxKind.SimpleMemberAccessExpression);

                if (memberAccess != null)
                {
                    ConvertStringEmptyToEmptyStringLiteral(context, memberAccess, semanticModel);
                }
            }
        }
        private void AnalyzeSimpleMemberAccessExpression(SyntaxNodeAnalysisContext context)
        {
            if (GeneratedCodeAnalyzer?.IsGeneratedCode(context) == true)
            {
                return;
            }

            var memberAccess = (MemberAccessExpressionSyntax)context.Node;

            AnalyzePredefinedType(context, memberAccess);

            if (StringEmptyRefactoring.CanConvertStringEmptyToEmptyStringLiteral(memberAccess, context.SemanticModel, context.CancellationToken))
            {
                context.ReportDiagnostic(
                    DiagnosticDescriptors.AvoidUsageOfStringEmpty,
                    memberAccess.GetLocation());
            }
        }
Exemple #3
0
        public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            SyntaxNode root = await context
                              .Document
                              .GetSyntaxRootAsync(context.CancellationToken)
                              .ConfigureAwait(false);

            MemberAccessExpressionSyntax memberAccess = root
                                                        .FindNode(context.Span, getInnermostNodeForTie: true)?
                                                        .FirstAncestorOrSelf <MemberAccessExpressionSyntax>();

            CodeAction codeAction = CodeAction.Create(
                "Convert to \"\"",
                cancellationToken =>
            {
                return(StringEmptyRefactoring.ConvertStringEmptyToEmptyStringLiteralAsync(
                           context.Document,
                           memberAccess,
                           cancellationToken));
            },
                DiagnosticIdentifiers.AvoidUsageOfStringEmpty + EquivalenceKeySuffix);

            context.RegisterCodeFix(codeAction, context.Diagnostics);
        }