コード例 #1
0
        public IReadOnlyList <FieldSelection> CollectFields(
            ObjectType objectType,
            SelectionSetNode selectionSet,
            Path path)
        {
            if (objectType == null)
            {
                throw new ArgumentNullException(nameof(objectType));
            }

            if (selectionSet == null)
            {
                throw new ArgumentNullException(nameof(selectionSet));
            }

            IReadOnlyList <FieldSelection> fields =
                _cachedQuery.GetOrCollectFields(
                    objectType,
                    selectionSet,
                    () => _fieldCollector.CollectFields(
                        objectType, selectionSet, path));

            var visibleFields = new List <FieldSelection>();
            int vi            = 0;

            for (int i = 0; i < fields.Count; i++)
            {
                FieldSelection field = fields[i];

                if (field.IsVisible(Variables))
                {
                    visibleFields.Add(
                        field.ResponseIndex == vi
                            ? field
                            : field.WithResponseIndex(vi));
                    vi++;
                }
            }

            return(visibleFields);
        }