Exemple #1
0
 PropertyDeclarationSyntax MakeEnumProperty(Field field, string readName)
 {
     return(MakeProperty(_names.MakeTypeSyntax(field.Type, field.DeclaringType, TypeUsage.NotRelevant), Type <ushort>(),
                         _names.GetCodeIdentifier(field).ToString(),
                         readName,
                         nameof(Capnp.SerializerExtensions.WriteData),
                         field.BitOffset.Value,
                         ValueOf(field.DefaultValue.ScalarValue),
                         true,
                         field.DiscValue.HasValue,
                         true));
 }
Exemple #2
0
        MemberDeclarationSyntax MakeUnionField(Field field)
        {
            var type = _names.MakeTypeSyntax(field.Type, field.DeclaringType, TypeUsage.DomainClassNullable);

            switch (field.Type.Tag)
            {
            case TypeTag.Void:
                return(null);

            default:
                return(PropertyDeclaration(type,
                                           _names.GetCodeIdentifier(field).Identifier)
                       .AddModifiers(Public).AddAccessorListAccessors(
                           AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
                           .WithExpressionBody(
                               ArrowExpressionClause(
                                   ConditionalExpression(
                                       BinaryExpression(
                                           SyntaxKind.EqualsExpression,
                                           _names.UnionDiscriminatorField.IdentifierName,
                                           MemberAccessExpression(
                                               SyntaxKind.SimpleMemberAccessExpression,
                                               _names.UnionDiscriminatorEnum.IdentifierName,
                                               _names.GetCodeIdentifier(field).IdentifierName)),
                                       CastExpression(type,
                                                      _names.UnionContentField.IdentifierName),
                                       LiteralExpression(
                                           SyntaxKind.NullLiteralExpression))))
                           .WithSemicolonToken(
                               Token(SyntaxKind.SemicolonToken)),
                           AccessorDeclaration(
                               SyntaxKind.SetAccessorDeclaration)
                           .WithBody(
                               Block(
                                   ExpressionStatement(
                                       AssignmentExpression(
                                           SyntaxKind.SimpleAssignmentExpression,
                                           _names.UnionDiscriminatorField.IdentifierName,
                                           MemberAccessExpression(
                                               SyntaxKind.SimpleMemberAccessExpression,
                                               _names.UnionDiscriminatorEnum.IdentifierName,
                                               _names.GetCodeIdentifier(field).IdentifierName))),
                                   ExpressionStatement(
                                       AssignmentExpression(
                                           SyntaxKind.SimpleAssignmentExpression,
                                           _names.UnionContentField.IdentifierName,
                                           IdentifierName("value")))))));
            }
        }
        PropertyDeclarationSyntax MakeReadEnumProperty(Field field)
        {
            var typeSyntax = _names.MakeTypeSyntax(field.Type, field.DeclaringType, TypeUsage.Reader);

            return(MakeReadProperty(typeSyntax,
                                    _names.GetCodeIdentifier(field).ToString(),
                                    nameof(Capnp.SerializerExtensions.ReadDataUShort), field.BitOffset.Value,
                                    ValueOf(field.DefaultValue.ScalarValue),
                                    x => CastExpression(typeSyntax, x),
                                    field.DiscValue.HasValue));
        }
        TypeSyntax TransformReturnType(Method method)
        {
            switch (method.Results.Count)
            {
            case 0:
                return(IdentifierName(nameof(Task)));

            case 1:
                return(GenericName(nameof(Task)).AddTypeArgumentListArguments(
                           _names.MakeTypeSyntax(method.Results[0].Type, method.DeclaringInterface, TypeUsage.DomainClass)));

            default:
                return(GenericName(nameof(Task)).AddTypeArgumentListArguments(
                           TupleType(SeparatedList(
                                         method.Results.Select(
                                             f => TupleElement(_names.MakeTypeSyntax(f.Type, method.DeclaringInterface, TypeUsage.DomainClass)))))));
            }
        }