public override SyntaxNode VisitBlock(BlockSyntax node)
        {
            node = (BlockSyntax)base.VisitBlock(node);

            var matchingInvocations = node
                                      .Descendants <InvocationExpressionSyntax>()
                                      .Where(i => InvocationMatches(i, _method.Type, _method.Name))
                                      .ToList();

            foreach (var invocation in matchingInvocations)
            {
                var visitor = new ReplaceMethodVisitor(_context, _method, _newMethod1);
                node = node.ReplaceNode(
                    invocation,
                    visitor.VisitInvocationExpression(invocation)
                    .WithTriviaFrom(invocation));

                var variable = invocation.Expression
                               .Descendants <IdentifierNameSyntax>()
                               .First();

                node = node.AddStatements(ExpressionStatement(
                                              CreateInvocation(variable.ToString(), _newMethod2.Name, _newMethod2.Arguments))
                                          .WithTriviaFrom(node.Statements.Last()));
            }

            return(node);
        }
        public SyntaxTree Apply(SyntaxTree initialAST, MigrationContext context)
        {
            var visitor = new ReplaceMethodVisitor(
                context,
                _oldMethod,
                _newMethod);
            var ast = visitor.Visit(initialAST.GetRoot());

            return(ast.SyntaxTree);
        }