Example #1
0
        private static AccessorDeclarationSyntax UseExpressionOrBlockBodyIfDesired(
            DocumentOptionSet documentOptions, ParseOptions parseOptions,
            AccessorDeclarationSyntax accessorDeclaration)
        {
            var preferExpressionBody = documentOptions.GetOption(CSharpCodeStyleOptions.PreferExpressionBodiedAccessors).Value;

            if (accessorDeclaration?.Body != null && preferExpressionBody)
            {
                if (accessorDeclaration.Body.TryConvertToExpressionBody(
                        parseOptions, out var arrowExpression, out var semicolonToken))
                {
                    return(accessorDeclaration.WithBody(null)
                           .WithExpressionBody(arrowExpression)
                           .WithSemicolonToken(semicolonToken)
                           .WithAdditionalAnnotations(Formatter.Annotation));
                }
            }
            else if (accessorDeclaration?.ExpressionBody != null && !preferExpressionBody)
            {
                var block = accessorDeclaration.ExpressionBody.ConvertToBlock(
                    accessorDeclaration.SemicolonToken,
                    createReturnStatementForExpression: accessorDeclaration.Kind() == SyntaxKind.GetAccessorDeclaration);
                return(accessorDeclaration.WithExpressionBody(null)
                       .WithSemicolonToken(default(SyntaxToken))
                       .WithBody(block)
                       .WithAdditionalAnnotations(Formatter.Annotation));
            }

            return(accessorDeclaration);
        }
        private AccessorDeclarationSyntax ResolveAccessor(SyntaxKind kind, CSharpSyntaxNode body, bool forceInlining)
        {
            AccessorDeclarationSyntax declaration = AccessorDeclaration(kind);

            switch (body)
            {
            case BlockSyntax block:
                declaration = declaration.WithBody(block);
                break;

            case ArrowExpressionClauseSyntax arrow:
                declaration = declaration
                              .WithExpressionBody(arrow)
                              .WithSemicolonToken
                              (
                    Token(SyntaxKind.SemicolonToken)
                              );
                break;

            default:
                Debug.Fail("Unknown node type");
                return(null !);
            }

            if (forceInlining)
            {
                declaration = declaration.WithAttributeLists
                              (
                    attributeLists: ResolveMethodImplAttributeToForceInlining()
                              );
            }

            return(declaration);
        }
Example #3
0
 public static AccessorDeclarationSyntax WithExpressionBodyFull(this AccessorDeclarationSyntax syntax, ExpressionSyntax body)
 {
     return
         (syntax
          .WithExpressionBody(
              ArrowExpressionClause(body))
          .WithSemicolonToken(
              Token(SyntaxKind.SemicolonToken)));
 }