public void InsertNode()
{
string text = "class C { void M() { } }";
var tree = SyntaxTree.ParseText(text);
var root = (CompilationUnitSyntax)tree.GetRoot();
var classNode = root.ChildNodes().First() as ClassDeclarationSyntax;
var newMethod = Syntax.MethodDeclaration(Syntax.ParseTypeName("int"), Syntax.Identifier("NewMethod"))
.WithBody(Syntax.Block());
var newMembers = Syntax.List<MemberDeclarationSyntax>(classNode.Members.Concat(new[] { newMethod }));
var newClass = Syntax.ClassDeclaration(
classNode.AttributeLists,
classNode.Modifiers,
classNode.Keyword,
classNode.Identifier,
classNode.TypeParameterList,
classNode.BaseList,
classNode.ConstraintClauses,
classNode.OpenBraceToken,
newMembers,
classNode.CloseBraceToken,
classNode.SemicolonToken).NormalizeWhitespace(elasticTrivia: true);
root = root.ReplaceNode(classNode, newClass);
tree = SyntaxTree.Create(root, tree.FilePath, tree.Options);
Assert.AreEqual(@"class C
{
void M()
{
}
int NewMethod()
{
}
}", tree.GetText().ToString());
}