private static AccessorDeclarationSyntax GenerateSetter(CsField csElement, PropertyValueSetTransform valueTransformation) { ExpressionSyntax valueExpression = IdentifierName("value"); var storage = MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, ThisExpression(), IdentifierName(csElement.IntermediateMarshalName) ); return(AccessorDeclaration(SyntaxKind.SetAccessorDeclaration) .WithExpressionBody( ArrowExpressionClause( AssignmentExpression( SyntaxKind.SimpleAssignmentExpression, storage, valueTransformation != null ? valueTransformation(storage, valueExpression) : valueExpression ) ) ) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken))); }
private static PropertyValueSetTransform Compose(PropertyValueSetTransform second, PropertyValueSetTransform first) { if (second == null) { return(first); } if (first == null) { return(second); } return((oldValue, x) => { var value = first(oldValue, x); return second(oldValue, GeneratorHelpers.WrapInParentheses(value)); }); }
private PropertyDeclarationSyntax GenerateProperty(CsField csElement, TypeSyntax propertyType, PropertyValueGetTransform getterTransform, PropertyValueSetTransform setterTransform) => AddDocumentationTrivia( PropertyDeclaration(propertyType, csElement.Name) .WithAccessorList( AccessorList( List( new[] { GenerateGetter(csElement, getterTransform), GenerateSetter(csElement, setterTransform) } ) ) ) .WithModifiers(csElement.VisibilityTokenList), csElement );