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