private void AnalyzeClassDeclaration(SyntaxNodeAnalysisContext context)
        {
            var classDeclaration = (ClassDeclarationSyntax)context.Node;

            INamedTypeSymbol symbol = context.SemanticModel.GetDeclaredSymbol(classDeclaration, context.CancellationToken);

            INamedTypeSymbol diagnosticAnalyzerSymbol = context.GetTypeByMetadataName("Microsoft.CodeAnalysis.Diagnostics.DiagnosticAnalyzer");

            if (diagnosticAnalyzerSymbol != null &&
                symbol.BaseTypesAndSelf().Contains(diagnosticAnalyzerSymbol) &&
                !symbol.Name.EndsWith(diagnosticAnalyzerSymbol.Name, StringComparison.Ordinal))
            {
                context.ReportDiagnostic(
                    DiagnosticDescriptors.AddDiagnosticAnalyzerSuffix,
                    classDeclaration.Identifier.GetLocation());
            }

            INamedTypeSymbol codeFixProviderSymbol = context.GetTypeByMetadataName("Microsoft.CodeAnalysis.CodeFixes.CodeFixProvider");

            if (codeFixProviderSymbol != null &&
                symbol.BaseTypesAndSelf().Contains(codeFixProviderSymbol) &&
                !symbol.Name.EndsWith(codeFixProviderSymbol.Name, StringComparison.Ordinal))
            {
                context.ReportDiagnostic(
                    DiagnosticDescriptors.AddCodeFixProviderSuffix,
                    classDeclaration.Identifier.GetLocation());
            }

            INamedTypeSymbol codeRefactoringProviderSymbol = context.GetTypeByMetadataName("Microsoft.CodeAnalysis.CodeRefactorings.CodeRefactoringProvider");

            if (codeRefactoringProviderSymbol != null &&
                symbol.BaseTypesAndSelf().Contains(codeRefactoringProviderSymbol) &&
                !symbol.Name.EndsWith(codeRefactoringProviderSymbol.Name, StringComparison.Ordinal))
            {
                context.ReportDiagnostic(
                    DiagnosticDescriptors.AddCodeRefactoringProviderSuffix,
                    classDeclaration.Identifier.GetLocation());
            }
        }