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); }