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)); }
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))))))); } }