protected override void VisitObjectTypeExtension(
            ObjectTypeExtensionNode node,
            TypeDefinitionItem context)
        {
            var item = new TypeDefinitionItem {
                Name = node.Name.ToString(), Type = TypeDefinitionType.Extension
            };

            List <string> intfaces = new List <string>();

            using (var interfaces = node.Interfaces.GetEnumerator())
            {
                while (interfaces.MoveNext())
                {
                    intfaces.Add(interfaces.Current.Name.Value);
                }
            }

            item.InterfaceKeys.AddRange(intfaces);
            VisitName(node.Name, context);
            VisitMany(node.Directives, context, VisitDirective);
            VisitMany(node.Interfaces, context, VisitNamedType);
            VisitMany(node.Fields, item, VisitFieldDefinition);
            this.VisitedItems.Add(item);
        }
Beispiel #2
0
        private static ObjectTypeDefinitionNode AddInterfaces(
            ObjectTypeDefinitionNode typeDefinition,
            ObjectTypeExtensionNode typeExtension)
        {
            if (typeExtension.Interfaces.Count == 0)
            {
                return(typeDefinition);
            }

            var interfaces = new HashSet <string>(
                typeDefinition.Interfaces.Select(t => t.Name.Value));

            foreach (string interfaceName in
                     typeExtension.Interfaces.Select(t => t.Name.Value))
            {
                interfaces.Add(interfaceName);
            }

            if (interfaces.Count == typeDefinition.Interfaces.Count)
            {
                return(typeDefinition);
            }

            return(typeDefinition.WithInterfaces(
                       interfaces.Select(n => new NamedTypeNode(new NameNode(n)))
                       .ToList()));
        }
Beispiel #3
0
        private static ObjectTypeDefinitionNode AddFields(
            ObjectTypeDefinitionNode typeDefinition,
            ObjectTypeExtensionNode typeExtension)
        {
            IReadOnlyList <FieldDefinitionNode> fields =
                AddFields(typeDefinition.Fields, typeExtension.Fields);

            return(fields == typeDefinition.Fields
                ? typeDefinition
                : typeDefinition.WithFields(fields));
        }
Beispiel #4
0
 protected sealed override ISyntaxVisitorAction Enter(
     ISyntaxNode node,
     ISyntaxVisitorContext context)
 {
     return(node switch
     {
         DocumentNode n => Enter(n, context),
         OperationDefinitionNode n => Enter(n, context),
         VariableDefinitionNode n => Enter(n, context),
         VariableNode n => Enter(n, context),
         SelectionSetNode n => Enter(n, context),
         FieldNode n => Enter(n, context),
         ArgumentNode n => Enter(n, context),
         FragmentSpreadNode n => Enter(n, context),
         InlineFragmentNode n => Enter(n, context),
         FragmentDefinitionNode n => Enter(n, context),
         DirectiveNode n => Enter(n, context),
         NamedTypeNode n => Enter(n, context),
         ListTypeNode n => Enter(n, context),
         NonNullTypeNode n => Enter(n, context),
         ListValueNode n => Enter(n, context),
         ObjectValueNode n => Enter(n, context),
         ObjectFieldNode n => Enter(n, context),
         IValueNode n => Enter(n, context),
         SchemaDefinitionNode n => Enter(n, context),
         OperationTypeDefinitionNode n => Enter(n, context),
         ScalarTypeDefinitionNode n => Enter(n, context),
         ObjectTypeDefinitionNode n => Enter(n, context),
         FieldDefinitionNode n => Enter(n, context),
         InputValueDefinitionNode n => Enter(n, context),
         InterfaceTypeDefinitionNode n => Enter(n, context),
         UnionTypeDefinitionNode n => Enter(n, context),
         EnumTypeDefinitionNode n => Enter(n, context),
         EnumValueDefinitionNode n => Enter(n, context),
         InputObjectTypeDefinitionNode n => Enter(n, context),
         DirectiveDefinitionNode n => Enter(n, context),
         SchemaExtensionNode n => Enter(n, context),
         ScalarTypeExtensionNode n => Enter(n, context),
         ObjectTypeExtensionNode n => Enter(n, context),
         InterfaceTypeExtensionNode n => Enter(n, context),
         UnionTypeExtensionNode n => Enter(n, context),
         EnumTypeExtensionNode n => Enter(n, context),
         InputObjectTypeExtensionNode n => Enter(n, context),
         _ => throw new NotSupportedException()
     });
Beispiel #5
0
        public ObjectTypeExtension Create(IDescriptorContext context, ObjectTypeExtensionNode node)
        {
            var preserveSyntaxNodes = context.Options.PreserveSyntaxNodes;

            var typeDefinition = new ObjectTypeDefinition(node.Name.Value);

            typeDefinition.BindTo = node.GetBindingValue();

            foreach (NamedTypeNode typeNode in node.Interfaces)
            {
                typeDefinition.Interfaces.Add(TypeReference.Create(typeNode));
            }

            SdlToTypeSystemHelper.AddDirectives(typeDefinition, node);

            DeclareFields(typeDefinition, node.Fields, preserveSyntaxNodes);

            return(ObjectTypeExtension.CreateUnsafe(typeDefinition));
        }
 protected virtual ISyntaxVisitorAction Enter(
     ObjectTypeExtensionNode node,
     ISyntaxVisitorContext context) =>
 DefaultAction;
 protected virtual ISyntaxVisitorAction Leave(
     ObjectTypeExtensionNode node,
     TContext context) =>
 DefaultAction;
Beispiel #8
0
 private void VisitObjectTypeExtension(ObjectTypeExtensionNode node, ISyntaxWriter writer)
 {
     writer.Write(Keywords.Extend);
     writer.WriteSpace();
     VisitObjectTypeDefinitionBase(node, writer);
 }
Beispiel #9
0
 protected virtual void VisitObjectTypeExtension(ObjectTypeExtensionNode node)
 {
 }