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); }
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())); }
private static ObjectTypeDefinitionNode AddFields( ObjectTypeDefinitionNode typeDefinition, ObjectTypeExtensionNode typeExtension) { IReadOnlyList <FieldDefinitionNode> fields = AddFields(typeDefinition.Fields, typeExtension.Fields); return(fields == typeDefinition.Fields ? typeDefinition : typeDefinition.WithFields(fields)); }
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() });
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;
private void VisitObjectTypeExtension(ObjectTypeExtensionNode node, ISyntaxWriter writer) { writer.Write(Keywords.Extend); writer.WriteSpace(); VisitObjectTypeDefinitionBase(node, writer); }
protected virtual void VisitObjectTypeExtension(ObjectTypeExtensionNode node) { }