protected override Expression VisitMethodCall()

in src/Epam.GraphQL/Helpers/ExpressionPrinter.cs [115:177]


        protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression)
        {
            var thisArg = methodCallExpression.Object;

            var isExtension = methodCallExpression.Method.IsExtensionMethod();
            var args = (isExtension ? methodCallExpression.Arguments.Skip(1) : methodCallExpression.Arguments).ToArray();

            if (isExtension)
            {
                thisArg = methodCallExpression.Arguments[0];
            }

            var shouldIndent = false;

            if (thisArg != null)
            {
                if ((_calls.TryPeek(out var storedMethodCall) && storedMethodCall == methodCallExpression)
                    || thisArg is MethodCallExpression)
                {
                    shouldIndent = true;

                    if (thisArg is MethodCallExpression previousMethodCall)
                    {
                        _calls.Push(previousMethodCall);
                    }
                }

                Visit(thisArg);

                if (shouldIndent)
                {
                    Indent();
                    AppendLine();

                    if (thisArg is MethodCallExpression)
                    {
                        _calls.Pop();
                    }
                }
            }

            Append(".");
            Append(methodCallExpression.Method.Name);
            Append("(");

            for (var i = 0; i < args.Length; i++)
            {
                Visit(args[i]);
                if (i < args.Length - 1)
                {
                    Append(", ");
                }
            }

            Append(")");

            if (shouldIndent)
            {
                Unindent();
            }

            return methodCallExpression;
        }