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)); }
private SyntaxNode GetRoleMethodInvocation(MemberAccessExpressionSyntax node) { var expression = Visit(node.Expression); if (node.Expression != expression) { node = node.ReplaceNode(node.Expression, expression); } if (IsRoleMethodInvocation(node)) { var methodName = ((SimpleNameSyntax)node.Name).Identifier.ValueText; return(Syntax.IdentifierName("self__" + GetRoleName(node.Expression) + "__" + methodName).WithLeadingTrivia(node.GetLeadingTrivia())); } return(node); }
private SyntaxNode GetRoleMethodInvocation(MemberAccessExpressionSyntax node) { var expression = Visit(node.Expression); if (node.Expression != expression) { node = node.ReplaceNode(node.Expression, expression); } if (IsRoleMethodInvocation(node)) { var methodName = ((SimpleNameSyntax)node.Name).Identifier.ValueText; return Syntax.IdentifierName("self__" + GetRoleName(node.Expression) + "__" + methodName).WithLeadingTrivia(node.GetLeadingTrivia()); } return node; }