public T ConvertToBody <T>(T method) where T : BaseMethodDeclarationSyntax
        {
            if (method.ExpressionBody == null || method.Body != null)
            {
                // can't convert
                return(method);
            }

            StatementSyntax statementLine;

            switch (method)
            {
            case MethodDeclarationSyntax actualMethod when actualMethod.NeedsReturn():
                statementLine = SyntaxFactory.ReturnStatement(method.ExpressionBody.Expression.WithLeadingTrivia(SyntaxFactory.Space));

                break;

            case ConversionOperatorDeclarationSyntax _:
            case OperatorDeclarationSyntax _:
                statementLine = SyntaxFactory.ReturnStatement(method.ExpressionBody.Expression.WithLeadingTrivia(SyntaxFactory.Space));
                break;

            default:
                statementLine = SyntaxFactory.ExpressionStatement(method.ExpressionBody.Expression);
                break;
            }

            // do we need add return to the expression body?
            var statement = SyntaxFactory.Block(statementLine);

            BaseMethodDeclarationSyntax result = method switch
            {
                MethodDeclarationSyntax actualMethod => actualMethod.Update(actualMethod.AttributeLists,
                                                                            actualMethod.Modifiers, actualMethod.ReturnType, actualMethod.ExplicitInterfaceSpecifier,
                                                                            actualMethod.Identifier, actualMethod.TypeParameterList, actualMethod.ParameterList,
                                                                            actualMethod.ConstraintClauses, statement, null, SyntaxFactory.Token(SyntaxKind.None)),
                OperatorDeclarationSyntax operatorDeclaration => operatorDeclaration.Update(
                    operatorDeclaration.AttributeLists, operatorDeclaration.Modifiers, operatorDeclaration.ReturnType,
                    operatorDeclaration.OperatorKeyword, operatorDeclaration.OperatorToken,
                    operatorDeclaration.ParameterList, statement, SyntaxFactory.Token(SyntaxKind.None)),
                ConversionOperatorDeclarationSyntax conversion => conversion.Update(conversion.AttributeLists,
                                                                                    conversion.Modifiers, conversion.ImplicitOrExplicitKeyword, conversion.OperatorKeyword,
                                                                                    conversion.Type, conversion.ParameterList, statement, null, SyntaxFactory.Token(SyntaxKind.None)),
                DestructorDeclarationSyntax destructor => destructor.Update(destructor.AttributeLists,
                                                                            destructor.Modifiers, destructor.TildeToken, destructor.Identifier, destructor.ParameterList,
                                                                            statement, SyntaxFactory.Token(SyntaxKind.None)),
                ConstructorDeclarationSyntax constructor => constructor.Update(constructor.AttributeLists,
                                                                               constructor.Modifiers, constructor.Identifier, constructor.ParameterList, constructor.Initializer,
                                                                               statement, SyntaxFactory.Token(SyntaxKind.None)),
                _ => method
            };

            return(result.WithAdditionalAnnotations(Marker) as T);
        }