コード例 #1
0
            public override SyntaxNode VisitFieldDeclaration(FieldDeclarationSyntax node)
            {
                if (node.Modifiers.Any(SyntaxKind.ReadOnlyKeyword))
                {
                    return(node);
                }
                if (semanticModel.GetTypeInfo(node.Declaration.Type).Type.Name != "Bindable")
                {
                    return(node);
                }
                if (!node.Declaration.Type.IsKind(SyntaxKind.GenericName))
                {
                    return(node);
                }

                if (semanticModel.GetTypeInfo(node.Declaration.Type).Type.ContainingNamespace.Name != "Zebble" &&
                    semanticModel.GetTypeInfo(node.Declaration.Type).Type.ContainingNamespace.Name != "Olive")
                {
                    return(node);
                }

                if (isReportOnlyMode)
                {
                    var lineSpan = node.GetFileLinePosSpan();

                    AddReport(new ChangesReport(node)
                    {
                        LineNumber = lineSpan.StartLinePosition.Line,
                        Column     = lineSpan.StartLinePosition.Character,
                        Message    = "Should Add Readonly Modifier",
                        Generator  = nameof(ZebbleCleaner)
                    });

                    return(node);
                }

                return(node.AddModifiers(
                           SyntaxFactory.Token(SyntaxKind.ReadOnlyKeyword)
                           .WithTrailingTrivia(SyntaxFactory.ParseTrailingTrivia(" "))));
            }