private async Task <Document> Initialize(Document document, FieldDeclarationSyntax localDeclaration, CancellationToken cancellationToken) { var tree = await document.GetSyntaxTreeAsync(cancellationToken); var root = tree.GetRoot(cancellationToken); var constructors = root.DescendantNodes().OfType <ConstructorDeclarationSyntax>().ToList(); var csor = constructors.FirstOrDefault(); SyntaxNode visitingRoot = root; if (csor == null) { var oldClass = localDeclaration.FirstAncestorOrSelf <ClassDeclarationSyntax>(); var className = oldClass.Identifier.ToString(); var paramList = RoslynExtensions.GenerateParameters(new[] { localDeclaration.Declaration.Type }); var newCtor = SyntaxFactory.ConstructorDeclaration( attributeLists: SyntaxFactory.List(new AttributeListSyntax[] { }), modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)), identifier: oldClass.Identifier, parameterList: paramList, initializer: null, body: SyntaxFactory.Block(new[] { RoslynExtensions.GenerateCtorStatement(RoslynExtensions.GetFieldName(localDeclaration), RoslynExtensions.GetFieldVariableName(localDeclaration.Declaration.Type)) }), semicolonToken: default(SyntaxToken) ); csor = newCtor; visitingRoot = root.InsertNodesAfter(localDeclaration, new[] { newCtor }); } var cr = new ConstructorRewriter(csor, localDeclaration); var newRoot = cr.Visit(visitingRoot).WithAdditionalAnnotations(Formatter.Annotation); //var workspace = MSBuildWorkspace.Create(); //var formatted = Formatter.Format(newRoot, workspace); return(document.WithSyntaxRoot(newRoot)); }