private async Task <Document> SwapMethodCalls(Document document, InvocationExpressionSyntax typeDecl, CancellationToken cancellationToken)
        {
            IEnumerable <SyntaxNode> children = typeDecl.ChildNodes();

            Debug.Assert(children.Count() > 0);
            MemberAccessExpressionSyntax sliceAccess = children.ElementAt(0) as MemberAccessExpressionSyntax;

            IEnumerable <SyntaxNode> grandChildren = sliceAccess.ChildNodes();

            Debug.Assert(grandChildren.Count() > 0);
            SyntaxNode target = grandChildren.ElementAt(0);

            MemberAccessExpressionSyntax parent = typeDecl.Parent as MemberAccessExpressionSyntax;

            MemberAccessExpressionSyntax newLocal       = parent.ReplaceNode(typeDecl, target);
            MemberAccessExpressionSyntax formattedLocal = newLocal.WithAdditionalAnnotations(Formatter.Annotation);

            InvocationExpressionSyntax replacement = typeDecl.ReplaceNode(target, formattedLocal).WithAdditionalAnnotations(Formatter.Annotation);

            SyntaxNode oldRoot = await document.GetSyntaxRootAsync(cancellationToken);

            SyntaxNode newRoot = oldRoot.ReplaceNode(parent, replacement);

            // Return document with transformed tree.
            return(document.WithSyntaxRoot(newRoot));
        }
Exemplo n.º 2
0
            public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
            {
                node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node);
                if (node.Expression != null && node.OperatorToken.Kind() == SyntaxKind.DotToken && node.Expression.Kind() == SyntaxKind.PredefinedType)
                {
                    _count++;

                    return(node.WithAdditionalAnnotations(s_markerAnnotation));
                }
                return(node);
            }
            public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
            {
                node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node);
                var name = node.Name.Identifier.ValueText;
                if (node.Expression != null &&
                    node.Expression.Kind() == SyntaxKind.ThisExpression &&
                    IsPrivateField(node))
                {
                    _addedAnnotations = true;
                    return node.WithAdditionalAnnotations(Simplifier.Annotation);
                }

                return node;
            }
Exemplo n.º 4
0
            public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
            {
                node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node);
                var name = node.Name.Identifier.ValueText;

                if (node.Expression != null &&
                    node.Expression.Kind() == SyntaxKind.ThisExpression &&
                    IsPrivateField(node))
                {
                    m_addedAnnotations = true;
                    return(node.WithAdditionalAnnotations(Simplifier.Annotation));
                }

                return(node);
            }
Exemplo n.º 5
0
            public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
            {
                if (!Options.FullyQualifiedNames &&
                    node.IsKind(SyntaxKind.SimpleMemberAccessExpression))
                {
                    ISymbol symbol = SemanticModel.GetSymbol(node, CancellationToken);

                    if (symbol?.Kind == SymbolKind.Field &&
                        symbol.ContainingType?.TypeKind == TypeKind.Enum)
                    {
                        return(node.WithAdditionalAnnotations(_simplifierAnnotationAsArray));
                    }
                }

                return(base.VisitMemberAccessExpression(node));
            }
            public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
            {
                node = (MemberAccessExpressionSyntax)base.VisitMemberAccessExpression(node);
                var name = node.Name.Identifier.ValueText;

                if (node.Expression != null)
                {
                    bool shouldReduce = ReducableThisNode(node) || ReducableIdentifierNode(node);
                    if (shouldReduce)
                    {
                        _addedAnnotations = true;
                        return(node.WithAdditionalAnnotations(Simplifier.Annotation));
                    }
                }

                return(node);
            }
Exemplo n.º 7
0
            public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node)
            {
                if (_enumTypeSymbol != null &&
                    !node.IsParentKind(SyntaxKind.SimpleMemberAccessExpression))
                {
                    MemberAccessExpressionSyntax newNode = CSharpFactory.SimpleMemberAccessExpression(
                        SyntaxFactory.ParseExpression(_enumTypeSymbol.ToDisplayString(SymbolDisplayFormats.TypeNameAndContainingTypesAndNamespaces)),
                        node);

                    if (!Options.FullyQualifiedNames)
                    {
                        newNode = newNode.WithAdditionalAnnotations(_simplifierAnnotationAsArray);
                    }

                    return(newNode);
                }

                return(base.VisitIdentifierName(node));
            }
Exemplo n.º 8
0
            public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
            {
                node = (MemberAccessExpressionSyntax)(base.VisitMemberAccessExpression(node) ?? throw ExceptionUtilities.Unreachable);

                if (_extensionMethods.Contains(node.Name.Identifier.Text))
                {
                    // If an extension method is used as a delegate rather than invoked directly,
                    // there is no semantically valid transformation that will fully qualify the extension method.
                    // For example `Func<int> f = x.M;` is not the same as Func<int> f = () => Extensions.M(x);`
                    // since one captures x by value, and the other by reference.
                    //
                    // We will not visit this node if the parent node was an InvocationExpression,
                    // since we would have expanded the parent node entirely, rather than visiting it.
                    // Therefore it's possible that this is an extension method being used as a delegate so we warn.
                    node = node.WithAdditionalAnnotations(WarningAnnotation.Create(string.Format(
                                                                                       WorkspacesResources.Warning_adding_imports_will_bring_an_extension_method_into_scope_with_the_same_name_as_member_access,
                                                                                       node.Name.Identifier.Text)));
                }

                return(node);
            }