public ExpressionField AddField()

in src/Epam.GraphQL/Configuration/Implementations/BaseObjectGraphTypeConfigurator.cs [251:294]


        public ExpressionField<TEntity, TReturnType, TExecutionContext> AddField<TReturnType>(
            Func<IChainConfigurationContextOwner, IChainConfigurationContext> configurationContextFactory,
            string? name,
            Expression<Func<TExecutionContext, TEntity, TReturnType>> expression,
            string? deprecationReason)
        {
            MethodInfo? addFieldMethodInfo = null;
            if (typeof(TReturnType) == typeof(string))
            {
                _addContextExpressionStringFieldMethodInfo = ReflectionHelpers.GetMethodInfo<Func<IChainConfigurationContextOwner, IChainConfigurationContext>, string, Expression<Func<TExecutionContext, TEntity, string>>, string?, ExpressionField<TEntity, string, TExecutionContext>>(
                    AddExpressionField);

                addFieldMethodInfo = _addContextExpressionStringFieldMethodInfo;
            }
            else if (typeof(TReturnType).IsValueType)
            {
                var unwrappedUnderlyingType = typeof(TReturnType).UnwrapIfNullable();
                var isNullable = typeof(TReturnType) != unwrappedUnderlyingType;

                if (isNullable)
                {
                    _addContextExpressionNullableFieldMethodInfo ??= ReflectionHelpers.GetMethodInfo<Func<IChainConfigurationContextOwner, IChainConfigurationContext>, string, Expression<Func<TExecutionContext, TEntity, int?>>, string?, ExpressionField<TEntity, int?, TExecutionContext>>(
                        AddExpressionField);

                    addFieldMethodInfo = _addContextExpressionNullableFieldMethodInfo.MakeGenericMethod(unwrappedUnderlyingType);
                }
                else
                {
                    _addContextExpressionFieldMethodInfo ??= ReflectionHelpers.GetMethodInfo<Func<IChainConfigurationContextOwner, IChainConfigurationContext>, string, Expression<Func<TExecutionContext, TEntity, int>>, string?, ExpressionField<TEntity, int, TExecutionContext>>(
                        AddExpressionField);

                    addFieldMethodInfo = _addContextExpressionFieldMethodInfo.MakeGenericMethod(unwrappedUnderlyingType);
                }
            }
            else
            {
                _addContextExpressionObjectFieldMethodInfo ??= ReflectionHelpers.GetMethodInfo<Func<IChainConfigurationContextOwner, IChainConfigurationContext>, string, Expression<Func<TExecutionContext, TEntity, object>>, string?, ExpressionField<TEntity, object, TExecutionContext>>(
                    AddObjectExpressionField);

                addFieldMethodInfo = _addContextExpressionObjectFieldMethodInfo.MakeGenericMethod(typeof(TReturnType));
            }

            return addFieldMethodInfo.InvokeAndHoistBaseException<ExpressionField<TEntity, TReturnType, TExecutionContext>>(this, configurationContextFactory, name, expression, deprecationReason);
        }