protected override Expression VisitMethodCall()

in src/Elastic.Clients.Elasticsearch/_Shared/Core/Infer/Field/ToStringExpressionVisitor.cs [48:82]


	protected override Expression VisitMethodCall(MethodCallExpression methodCall)
	{
		if (methodCall.Method.Name == nameof(SuffixExtensions.Suffix) && methodCall.Arguments.Any())
		{
			VisitConstantOrVariable(methodCall, _stack);
			var callingMember = new ReadOnlyCollection<Expression>(
				new List<Expression> { { methodCall.Arguments.First() } }
			);
			Visit(callingMember);
			return methodCall;
		}
		else if (methodCall.Method.Name == "get_Item" && methodCall.Arguments.Any())
		{
			var t = methodCall.Object.Type;
			var isDict =
				typeof(IDictionary).IsAssignableFrom(t)
				|| typeof(IDictionary<,>).IsAssignableFrom(t)
				|| t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IDictionary<,>);

			if (!isDict)
				return base.VisitMethodCall(methodCall);

			VisitConstantOrVariable(methodCall, _stack);
			Visit(methodCall.Object);
			return methodCall;
		}
		else if (IsLinqOperator(methodCall.Method))
		{
			for (var i = 1; i < methodCall.Arguments.Count; i++)
				Visit(methodCall.Arguments[i]);
			Visit(methodCall.Arguments[0]);
			return methodCall;
		}
		return base.VisitMethodCall(methodCall);
	}