Exemple #1
0
        protected override void OnCreateDefinition(
            FilterInputTypeDefinition definition)
        {
            if (!Definition.AttributesAreApplied && Definition.EntityType is not null)
            {
                Context.TypeInspector.ApplyAttributes(Context, this, Definition.EntityType);
                Definition.AttributesAreApplied = true;
            }

            var fields            = new Dictionary <NameString, FilterOperationDefintion>();
            var handledProperties = new HashSet <PropertyInfo>();

            var explicitFields = Fields.Select(t => t.CreateDefinition()).ToList();

            FieldDescriptorUtilities.AddExplicitFields(
                explicitFields.Where(t => !t.Ignore).SelectMany(t => t.Filters),
                f => f.Operation?.Property,
                fields,
                handledProperties);

            foreach (FilterFieldDefintion field in explicitFields.Where(t => t.Ignore))
            {
                handledProperties.Add(field.Property);
            }

            OnCompleteFields(fields, handledProperties);

            Definition.Fields.AddRange(fields.Values);
        }
Exemple #2
0
    protected override void OnCreateDefinition(
        DirectiveTypeDefinition definition)
    {
        if (!Definition.AttributesAreApplied && Definition.RuntimeType != typeof(object))
        {
            Context.TypeInspector.ApplyAttributes(
                Context,
                this,
                Definition.RuntimeType);
            Definition.AttributesAreApplied = true;
        }

        var arguments      = new Dictionary <NameString, DirectiveArgumentDefinition>();
        var handledMembers = new HashSet <PropertyInfo>();

        FieldDescriptorUtilities.AddExplicitFields(
            Arguments.Select(t => t.CreateDefinition()),
            f => f.Property,
            arguments,
            handledMembers);

        OnCompleteArguments(arguments, handledMembers);

        definition.Arguments.AddRange(arguments.Values);

        base.OnCreateDefinition(definition);
    }
    protected override void OnCompleteFields(
        IDictionary <NameString, InputFieldDefinition> fields,
        ISet <PropertyInfo> handledProperties)
    {
        if (Definition.Fields.IsImplicitBinding())
        {
            FieldDescriptorUtilities.AddImplicitFields(
                this,
                p => InputFieldDescriptor
                .New(Context, p)
                .CreateDefinition(),
                fields,
                handledProperties);
        }

        base.OnCompleteFields(fields, handledProperties);
    }
        protected override void OnCreateDefinition(
            FilterInputTypeDefinition definition)
        {
            var fields            = new Dictionary <NameString, FilterOperationDefintion>();
            var handledProperties = new HashSet <PropertyInfo>();

            FieldDescriptorUtilities.AddExplicitFields(
                Fields.Select(t => t.CreateDefinition())
                .SelectMany(t => t.Filters),
                f => f.Operation.Property,
                fields,
                handledProperties);

            OnCompleteFields(fields, handledProperties);

            Definition.Fields.AddRange(fields.Values);
        }
Exemple #5
0
    protected override void OnCompleteArguments(
        IDictionary <NameString, DirectiveArgumentDefinition> arguments,
        ISet <PropertyInfo> handledProperties)
    {
        if (Definition.Arguments.IsImplicitBinding())
        {
            FieldDescriptorUtilities.AddImplicitFields(
                this,
                p => DirectiveArgumentDescriptor
                .New(Context, p)
                .CreateDefinition(),
                arguments,
                handledProperties);
        }

        base.OnCompleteArguments(arguments, handledProperties);
    }
Exemple #6
0
        protected override void OnCompleteFields(
            IDictionary <NameString, FilterFieldDefinition> fields,
            ISet <MemberInfo> handledProperties)
        {
            if (Definition.Fields.IsImplicitBinding())
            {
                FieldDescriptorUtilities.AddImplicitFields(
                    this,
                    Definition.EntityType,
                    p => FilterFieldDescriptor
                    .New(Context, Definition.Scope, p)
                    .CreateDefinition(),
                    fields,
                    handledProperties,
                    include: (members, member) => member is PropertyInfo);
            }

            base.OnCompleteFields(fields, handledProperties);
        }
Exemple #7
0
    protected override void OnCreateDefinition(
        SortInputTypeDefinition definition)
    {
        if (!Definition.AttributesAreApplied && Definition.EntityType is not null)
        {
            Context.TypeInspector.ApplyAttributes(Context, this, Definition.EntityType);
            Definition.AttributesAreApplied = true;
        }

        var fields            = new Dictionary <NameString, SortFieldDefinition>();
        var handledProperties = new HashSet <MemberInfo>();

        FieldDescriptorUtilities.AddExplicitFields(
            Fields.Select(t => t.CreateDefinition()),
            f => f.Member,
            fields,
            handledProperties);

        OnCompleteFields(fields, handledProperties);

        Definition.Fields.AddRange(fields.Values);
    }
        protected override void OnCreateDefinition(
            FilterInputTypeDefinition definition)
        {
            var fields            = new Dictionary <NameString, FilterOperationDefintion>();
            var handledProperties = new HashSet <PropertyInfo>();

            List <FilterFieldDefintion> explicitFields =
                Fields.Select(t => t.CreateDefinition()).ToList();

            FieldDescriptorUtilities.AddExplicitFields(
                explicitFields.Where(t => !t.Ignore).SelectMany(t => t.Filters),
                f => f.Operation.Property,
                fields,
                handledProperties);

            foreach (var field in explicitFields.Where(t => t.Ignore))
            {
                handledProperties.Add(field.Property);
            }

            OnCompleteFields(fields, handledProperties);

            Definition.Fields.AddRange(fields.Values);
        }
    protected override void OnCompleteFields(
        IDictionary <NameString, ObjectFieldDefinition> fields,
        ISet <MemberInfo> handledMembers)
    {
        HashSet <string> subscribeResolver = null;

        if (Definition.Fields.IsImplicitBinding() &&
            Definition.FieldBindingType is not null)
        {
            FieldDescriptorUtilities.AddImplicitFields(
                this,
                Definition.FieldBindingType,
                p =>
            {
                var descriptor = ObjectFieldDescriptor.New(
                    Context, p, Definition.RuntimeType, Definition.FieldBindingType);

                if (Definition.IsExtension && Context.TypeInspector.IsMemberIgnored(p))
                {
                    descriptor.Ignore();
                }

                Fields.Add(descriptor);
                return(descriptor.CreateDefinition());
            },
                fields,
                handledMembers,
                include: IncludeField,
                includeIgnoredMembers
                : Definition.IsExtension);
        }

        base.OnCompleteFields(fields, handledMembers);

        bool IncludeField(IReadOnlyList <MemberInfo> all, MemberInfo current)
        {
            NameString name = Context.Naming.GetMemberName(current, MemberKind.ObjectField);

            if (Fields.Any(t => t.Definition.Name.Equals(name)))
            {
                return(false);
            }

            if (subscribeResolver is null)
            {
                subscribeResolver = new HashSet <string>();

                foreach (MemberInfo member in all)
                {
                    HandlePossibleSubscribeMember(member);
                }
            }

            return(!subscribeResolver.Contains(current.Name));
        }

        void HandlePossibleSubscribeMember(MemberInfo member)
        {
            if (member.IsDefined(typeof(SubscribeAttribute)))
            {
                if (member.GetCustomAttribute <SubscribeAttribute>() is { With : not null } attr)
                {
                    subscribeResolver.Add(attr.With);
                }
            }
        }
    }