コード例 #1
0
        /// <summary>
        /// Parses an object type definition.
        /// <see cref="ObjectTypeDefinitionNode" />:
        /// Description?
        /// type Name ImplementsInterfaces? Directives[isConstant=true]? FieldsDefinition?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private ObjectTypeDefinitionNode ParseObjectTypeDefinition(
            ParserContext context)
        {
            SyntaxToken     start       = context.Current;
            StringValueNode description = ParseDescription(context);

            context.ExpectTypeKeyword();
            NameNode             name       = ParseName(context);
            List <NamedTypeNode> interfaces =
                ParseImplementsInterfaces(context);
            List <DirectiveNode> directives =
                ParseDirectives(context, true);
            List <FieldDefinitionNode> fields =
                ParseFieldsDefinition(context);
            Location location = context.CreateLocation(start);

            return(new ObjectTypeDefinitionNode
                   (
                       location,
                       name,
                       description,
                       directives,
                       interfaces,
                       fields
                   ));
        }
コード例 #2
0
        private ObjectTypeExtensionNode ParseObjectTypeExtension(ParserContext context)
        {
            SyntaxToken start = context.Current;

            context.ExpectExtendKeyword();
            context.ExpectTypeKeyword();
            NameNode             name       = context.ParseName();
            List <NamedTypeNode> interfaces =
                ParseImplementsInterfaces(context);
            List <DirectiveNode> directives =
                ParseDirectives(context, true);
            List <FieldDefinitionNode> fields =
                ParseFieldsDefinition(context);
            Location location = context.CreateLocation(start);

            if (interfaces.Count == 0 &&
                directives.Count == 0 &&
                fields.Count == 0)
            {
                throw context.Unexpected(start);
            }

            return(new ObjectTypeExtensionNode
                   (
                       location,
                       name,
                       directives,
                       interfaces,
                       fields
                   ));
        }