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