protected override Expression VisitMember()

in src/Epam.GraphQL/Helpers/ExpressionRewriter.cs [80:118]


            protected override Expression VisitMember(MemberExpression node)
            {
                var newExpression = node.Expression as NewExpression;

                if (newExpression == null)
                {
                    var memberInitExpression = node.Expression as MemberInitExpression;

                    if (memberInitExpression == null
                        && node.Expression is UnaryExpression unaryExpression
                        && unaryExpression.NodeType == ExpressionType.TypeAs)
                    {
                        newExpression = unaryExpression.Operand as NewExpression;

                        if (newExpression == null)
                        {
                            memberInitExpression = unaryExpression.Operand as MemberInitExpression;
                        }
                    }

                    if (memberInitExpression != null)
                    {
                        var binding = memberInitExpression.Bindings.FirstOrDefault(binding => binding.Member == node.Member);

                        if (binding is not null and MemberAssignment memberAssignment)
                        {
                            return memberAssignment.Expression;
                        }
                    }
                }

                if (newExpression != null && newExpression.Members != null)
                {
                    var indexOfMember = newExpression.Members.IndexOf(node.Member);
                    return newExpression.Arguments[indexOfMember];
                }

                return base.VisitMember(node);
            }