public override SyntaxNode VisitFieldDeclaration(FieldDeclarationSyntax node)
            {
                var fieldSymbol = (IFieldSymbol)_model.GetDeclaredSymbol(node.Declaration.Variables[0]);
                bool ignored;
                if (_unwrittenFields.TryRemove(fieldSymbol, out ignored))
                {
                    return
                        node.WithModifiers(
                            node.Modifiers.Add(
                                SyntaxFactory.Token(
                                    SyntaxFactory.TriviaList(),
                                    SyntaxKind.ReadOnlyKeyword,
                                    SyntaxFactory.TriviaList(
                                        SyntaxFactory.SyntaxTrivia(SyntaxKind.WhitespaceTrivia, " ")))));
                }

                return node;
            }
        /// <summary>
        /// Adds the [Tooltip] attribute to the field.
        /// </summary>
        /// <param name="document">
        /// The document containing the field to fix.
        /// </param>
        /// <param name="fieldDeclaration">
        /// The field to fix.
        /// </param>
        /// <param name="cancellationToken">
        /// Details regarding code fix cancellation.
        /// </param>
        /// <returns>
        /// The fixed document.
        /// </returns>
        private async Task<Document> MakePrivateAsync(Document document, FieldDeclarationSyntax fieldDeclaration, CancellationToken cancellationToken, Diagnostic diagnostic)
        {
            var publicModifier = fieldDeclaration.Modifiers.FirstOrDefault(m => m.IsKind(SyntaxKind.PublicKeyword));
            var privateModifier = SyntaxFactory.Token(SyntaxKind.PrivateKeyword);
            var newModifiers = fieldDeclaration.Modifiers.Replace(publicModifier, privateModifier);
            var newFieldDeclaration = fieldDeclaration.WithModifiers(newModifiers);

            var hasSerializeFieldAttribute = bool.Parse(diagnostic.Properties["hasSerializeFieldAttribute"]);
            if (!hasSerializeFieldAttribute)
            {
                var attribute = SyntaxFactory.Attribute(SyntaxFactory.ParseName("SerializeField"));
                var attributeList = SyntaxFactory.AttributeList().AddAttributes(attribute);
                var newAttributeLists = fieldDeclaration.AttributeLists.Add(attributeList);
                newFieldDeclaration = newFieldDeclaration.WithAttributeLists(newAttributeLists);
            }

            var root = await document.GetSyntaxRootAsync();
            var newRoot = root.ReplaceNode(fieldDeclaration, newFieldDeclaration);
            var newDocument = document.WithSyntaxRoot(newRoot);
            return newDocument;
        }