internal static CompilationUnitSyntax ImplementFullProperty(CompilationUnitSyntax root, SemanticModel model, PropertyDeclarationSyntax propertyDecl, Workspace workspace) { TypeDeclarationSyntax typeDecl = propertyDecl.FirstAncestorOrSelf<TypeDeclarationSyntax>(); string propertyName = propertyDecl.Identifier.ValueText; string backingFieldName = $"_{char.ToLower(propertyName[0])}{propertyName.Substring(1)}"; ITypeSymbol propertyTypeSymbol = model.GetDeclaredSymbol(propertyDecl).Type; root = root.ReplaceNodes(new SyntaxNode[] { propertyDecl, typeDecl }, (original, updated) => original.IsKind(SyntaxKind.PropertyDeclaration) ? ExpandProperty((PropertyDeclarationSyntax)original, (PropertyDeclarationSyntax)updated, backingFieldName) as SyntaxNode : ExpandType((TypeDeclarationSyntax)original, (TypeDeclarationSyntax)updated, propertyTypeSymbol, backingFieldName, model, workspace) as SyntaxNode ); return root; }