public CodeAction CalculateAction(Document document, SyntaxNode root, BaseTypeDeclarationSyntax typeDeclaration)
        {
            var accessModifiers = typeDeclaration.FindAccessModifiers();

            if (accessModifiers.Count >= 1)
            {
                return(CodeAction.Create(Resources.ToInternalImplicit, cancellationToken =>
                {
                    var newTypeDeclaration = typeDeclaration.WithModifiers(TokenList(typeDeclaration.FindOtherModifiers()));
                    var newRoot = root.ReplaceNode(typeDeclaration, newTypeDeclaration)
                                  .WithAdditionalAnnotations(Formatter.Annotation);

                    return Task.FromResult(document.WithSyntaxRoot(newRoot));
                }));
            }

            return(null);
        }
        public CodeAction CalculateAction(Document document, SyntaxNode root, BaseTypeDeclarationSyntax typeDeclaration)
        {
            var accessModifiers = typeDeclaration.FindAccessModifiers();

            if (accessModifiers.Count > 1)
            {
                return(CodeAction.Create(title, cancellationToken =>
                {
                    var modifiers = new List <SyntaxToken> {
                        Token(targetAccessModifier)
                    };
                    modifiers.AddRange(typeDeclaration.FindOtherModifiers());

                    var newTypeDeclaration = typeDeclaration.WithModifiers(TokenList(modifiers));
                    var newRoot = root.ReplaceNode(typeDeclaration, newTypeDeclaration);

                    return Task.FromResult(document.WithSyntaxRoot(newRoot));
                }));
            }
            else if (accessModifiers.Count == 1 && accessModifiers[0].Kind() != targetAccessModifier)
            {
                return(CodeAction.Create(title, cancellationToken =>
                {
                    var newRoot = root.ReplaceToken(accessModifiers[0], Token(targetAccessModifier));
                    return Task.FromResult(document.WithSyntaxRoot(newRoot));
                }));
            }
            else if (!accessModifiers.Any())
            {
                return(CodeAction.Create(title, cancellationToken =>
                {
                    var modifiers = typeDeclaration.Modifiers.Insert(0, Token(targetAccessModifier));
                    var newTypeDeclaration = typeDeclaration.WithModifiers(modifiers);
                    var newRoot = root.ReplaceNode(typeDeclaration, newTypeDeclaration);

                    return Task.FromResult(document.WithSyntaxRoot(newRoot));
                }));
            }

            return(null);
        }
Exemple #3
0
        public CodeAction CalculateAction(Document document, SyntaxNode root, BaseTypeDeclarationSyntax typeDeclaration)
        {
            var accessModifiers = typeDeclaration.FindAccessModifiers();

            if (accessModifiers.Count == 2 &&
                accessModifiers.All(modifier => modifier.Kind() == SyntaxKind.ProtectedKeyword || modifier.Kind() == SyntaxKind.InternalKeyword))
            {
                return(null);
            }

            return(CodeAction.Create(Resources.ToProtectedInternal, cancellationToken =>
            {
                var modifiers = new List <SyntaxToken> {
                    Token(SyntaxKind.ProtectedKeyword), Token(SyntaxKind.InternalKeyword)
                };
                modifiers.AddRange(typeDeclaration.FindOtherModifiers());

                var newTypeDeclaration = typeDeclaration.WithModifiers(TokenList(modifiers));
                var newRoot = root.ReplaceNode(typeDeclaration, newTypeDeclaration);

                return Task.FromResult(document.WithSyntaxRoot(newRoot));
            }));
        }