public static async Task <Document> RefactorAsync( Document document, PropertyDeclarationSyntax property, CancellationToken cancellationToken) { var parentMember = (MemberDeclarationSyntax)property.Parent; SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); ISymbol fieldSymbol = GetFieldSymbol(property, semanticModel, cancellationToken); var declarator = (VariableDeclaratorSyntax)await fieldSymbol.DeclaringSyntaxReferences[0].GetSyntaxAsync(cancellationToken).ConfigureAwait(false); var variableDeclaration = (VariableDeclarationSyntax)declarator.Parent; SyntaxList <MemberDeclarationSyntax> members = parentMember.GetMembers(); int propertyIndex = members.IndexOf(property); int fieldIndex = members.IndexOf((FieldDeclarationSyntax)variableDeclaration.Parent); ImmutableArray <SyntaxNode> oldNodes = await document.FindSymbolNodesAsync(fieldSymbol, cancellationToken).ConfigureAwait(false); IdentifierNameSyntax newNode = IdentifierName(property.Identifier); MemberDeclarationSyntax newParentMember = parentMember.ReplaceNodes(oldNodes, (f, g) => newNode.WithTriviaFrom(f)); members = newParentMember.GetMembers(); if (variableDeclaration.Variables.Count == 1) { newParentMember = newParentMember.RemoveNode( newParentMember.GetMemberAt(fieldIndex), SyntaxRemoveOptions.KeepUnbalancedDirectives); if (propertyIndex > fieldIndex) { propertyIndex--; } } else { var field = (FieldDeclarationSyntax)members[fieldIndex]; FieldDeclarationSyntax newField = field.RemoveNode( field.Declaration.Variables[variableDeclaration.Variables.IndexOf(declarator)], SyntaxRemoveOptions.KeepUnbalancedDirectives); members = members.Replace(field, newField.WithFormatterAnnotation()); newParentMember = newParentMember.SetMembers(members); } members = newParentMember.GetMembers(); property = (PropertyDeclarationSyntax)members[propertyIndex]; PropertyDeclarationSyntax newProperty = CreateAutoProperty(property, declarator.Initializer); members = members.Replace(property, newProperty); newParentMember = newParentMember.SetMembers(members); return(await document.ReplaceNodeAsync(parentMember, newParentMember, cancellationToken).ConfigureAwait(false)); }