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; }