Пример #1
0
        private IEnumerable <StatementSyntax> GenerateReadMethodBody()
        {
            var fields = _schema.GetInputFields(_inputObjectType);

            foreach (var fieldDefinition in fields)
            {
                var fieldName     = fieldDefinition.Key.ToFieldResolverName();
                var rawFieldName  = fieldDefinition.Key;
                var fieldTypeName = CodeModel.SelectFieldTypeName(_schema, _inputObjectType, fieldDefinition);
                yield return(ExpressionStatement(
                                 AssignmentExpression(
                                     SyntaxKind.SimpleAssignmentExpression,
                                     IdentifierName(fieldName),
                                     InvocationExpression(
                                         MemberAccessExpression(
                                             SyntaxKind.SimpleMemberAccessExpression,
                                             IdentifierName("source"),
                                             GenericName(
                                                 Identifier("GetValue"))
                                             .WithTypeArgumentList(
                                                 TypeArgumentList(
                                                     SingletonSeparatedList(
                                                         ParseTypeName(fieldTypeName))))))
                                     .WithArgumentList(
                                         ArgumentList(
                                             SingletonSeparatedList(
                                                 Argument(
                                                     LiteralExpression(
                                                         SyntaxKind.StringLiteralExpression,
                                                         Literal(rawFieldName)))))))));
            }
        }
Пример #2
0
        private IEnumerable <MemberDeclarationSyntax> GenerateFields()
        {
            yield return(CodeModel.TypenameProperty(_inputObjectType.Name));

            var fields = _schema.GetInputFields(_inputObjectType);

            foreach (var fieldDefinition in fields)
            {
                var fieldName     = fieldDefinition.Key.ToFieldResolverName();
                var fieldTypeName = CodeModel.SelectFieldTypeName(_schema, _inputObjectType, fieldDefinition);
                yield return(PropertyDeclaration(
                                 IdentifierName(fieldTypeName),
                                 Identifier(fieldName))
                             .WithModifiers(
                                 TokenList(
                                     Token(SyntaxKind.PublicKeyword)))
                             .WithLeadingTrivia(CodeModel.ToXmlComment(fieldDefinition.Value.Description))
                             .WithAccessorList(
                                 AccessorList(
                                     List(
                                         new[]
                {
                    AccessorDeclaration(
                        SyntaxKind.GetAccessorDeclaration)
                    .WithSemicolonToken(
                        Token(SyntaxKind.SemicolonToken)),
                    AccessorDeclaration(
                        SyntaxKind.SetAccessorDeclaration)
                    .WithSemicolonToken(
                        Token(SyntaxKind.SemicolonToken))
                }))));
            }

            yield return(GenerateRead());
        }
        private MemberDeclarationSyntax GenerateProperty(KeyValuePair <string, IField> field)
        {
            var propertyName = field.Key.ToFieldResolverName();
            var typeName     = CodeModel.SelectFieldTypeName(_schema, _interfaceType, field);

            return(PropertyDeclaration(
                       IdentifierName(typeName),
                       Identifier(propertyName))
                   .WithModifiers(
                       TokenList(
                           Token(SyntaxKind.PublicKeyword)))
                   .WithLeadingTrivia(CodeModel.ToXmlComment(field.Value.Description))
                   .WithAccessorList(
                       AccessorList(
                           List(
                               new[]
            {
                AccessorDeclaration(
                    SyntaxKind.GetAccessorDeclaration)
                .WithSemicolonToken(
                    Token(SyntaxKind.SemicolonToken)),

                /*AccessorDeclaration(
                 *      SyntaxKind.SetAccessorDeclaration)
                 *  .WithSemicolonToken(
                 *      Token(SyntaxKind.SemicolonToken))*/
            }))));
        }
        private MethodDeclarationSyntax WithPropertyFieldMethod(
            string methodName,
            ObjectType objectType,
            KeyValuePair <string, IField> field)
        {
            var resultTypeName = CodeModel.SelectFieldTypeName(_schema, _objectType, field);

            return(MethodDeclaration(
                       GenericName(
                           Identifier(nameof(ValueTask)))
                       .WithTypeArgumentList(
                           TypeArgumentList(
                               SingletonSeparatedList <TypeSyntax>(
                                   IdentifierName(resultTypeName)))),
                       Identifier(methodName))
                   .WithModifiers(
                       TokenList(Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.VirtualKeyword)))
                   .WithParameterList(
                       ParameterList(
                           SeparatedList <ParameterSyntax>(
                               new SyntaxNodeOrToken[]
            {
                Parameter(
                    Identifier("objectValue"))
                .WithType(
                    IdentifierName("T")),
                Token(SyntaxKind.CommaToken),
                Parameter(
                    Identifier("context"))
                .WithType(
                    IdentifierName(nameof(IResolverContext)))
            })))
                   .WithBody(
                       Block(
                           SingletonList <StatementSyntax>(
                               ReturnStatement(
                                   ObjectCreationExpression(
                                       GenericName(
                                           Identifier(nameof(ValueTask)))
                                       .WithTypeArgumentList(
                                           TypeArgumentList(
                                               SingletonSeparatedList <TypeSyntax>(
                                                   IdentifierName(resultTypeName)))))
                                   .WithArgumentList(
                                       ArgumentList(
                                           SingletonSeparatedList(
                                               Argument(
                                                   MemberAccessExpression(
                                                       SyntaxKind.SimpleMemberAccessExpression,
                                                       IdentifierName("objectValue"),
                                                       IdentifierName(methodName)))))))))));
        }
        private MethodDeclarationSyntax WithAbstractFieldMethod(
            string methodName,
            ObjectType objectType,
            KeyValuePair <string, IField> field)
        {
            var resultTypeName = CodeModel.SelectFieldTypeName(_schema, _objectType, field);

            return(MethodDeclaration(
                       GenericName(
                           Identifier(nameof(ValueTask)))
                       .WithTypeArgumentList(
                           TypeArgumentList(
                               SingletonSeparatedList <TypeSyntax>(
                                   IdentifierName(resultTypeName)))),
                       Identifier(methodName))
                   .WithModifiers(
                       TokenList(Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.AbstractKeyword)))
                   .WithParameterList(
                       ParameterList(
                           SeparatedList <ParameterSyntax>(
                               WithParameters(objectType, field))))
                   .WithSemicolonToken(
                       Token(SyntaxKind.SemicolonToken)));
        }
 public string SelectFieldType(KeyValuePair <string, IField> field)
 {
     return(CodeModel.SelectFieldTypeName(_schema, _objectType, field));
 }