private SyntaxNode CreateConditionalAccessExpression(
            ISyntaxFactsService syntaxFacts, SyntaxGenerator generator,
            SyntaxNode whenPart, SyntaxNode match, SyntaxNode currentConditional)
        {
            var memberAccess = match.Parent as TMemberAccessExpression;

            if (memberAccess != null)
            {
                return(whenPart.ReplaceNode(memberAccess,
                                            generator.ConditionalAccessExpression(
                                                match,
                                                generator.MemberBindingExpression(
                                                    syntaxFacts.GetNameOfMemberAccessExpression(memberAccess)))));
            }

            var elementAccess = match.Parent as TElementAccessExpression;

            if (elementAccess != null)
            {
                return(whenPart.ReplaceNode(elementAccess,
                                            generator.ConditionalAccessExpression(
                                                match,
                                                generator.ElementBindingExpression(
                                                    syntaxFacts.GetArgumentListOfElementAccessExpression(elementAccess)))));
            }

            return(currentConditional);
        }