예제 #1
0
        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)));
        }
예제 #2
0
        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));
            });
        }
예제 #3
0
 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
     );