protected override void OnCompleteFields( IDictionary <NameString, ObjectFieldDefinition> fields, ISet <MemberInfo> handledMembers) { HashSet <string> subscribeResolver = null; if (Definition.Fields.IsImplicitBinding()) { FieldDescriptorUtilities.AddImplicitFields( this, Definition.FieldBindingType, p => { var descriptor = ObjectFieldDescriptor.New( Context, p, Definition.RuntimeType, Definition.FieldBindingType); Fields.Add(descriptor); return(descriptor.CreateDefinition()); }, fields, handledMembers, include: IncludeField); } base.OnCompleteFields(fields, handledMembers); bool IncludeField(IReadOnlyList <MemberInfo> all, MemberInfo current) { if (subscribeResolver is null) { subscribeResolver = new HashSet <string>(); foreach (MemberInfo member in all) { if (member.IsDefined(typeof(SubscribeAttribute))) { SubscribeAttribute attribute = member.GetCustomAttribute <SubscribeAttribute>(); if (attribute.With is not null) { subscribeResolver.Add(attribute.With); } } } } return(!subscribeResolver.Contains(current.Name)); } }
protected override void OnCompleteFields( IDictionary <NameString, InterfaceFieldDefinition> fields, ISet <MemberInfo> handledMembers) { if (Definition.Fields.IsImplicitBinding()) { FieldDescriptorUtilities.AddImplicitFields( this, p => InterfaceFieldDescriptor .New(Context, p) .CreateDefinition(), fields, handledMembers); } base.OnCompleteFields(fields, handledMembers); }
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); }
protected override void OnCompleteFields( IDictionary <NameString, ObjectFieldDefinition> fields, ISet <MemberInfo> handledMembers) { if (Definition.Fields.IsImplicitBinding()) { FieldDescriptorUtilities.AddImplicitFields( this, Definition.FieldBindingType, p => { ObjectFieldDescriptor descriptor = ObjectFieldDescriptor.New(Context, p); Fields.Add(descriptor); return(descriptor.CreateDefinition()); }, fields, handledMembers); } base.OnCompleteFields(fields, handledMembers); }
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); } } } }