private static void Analyze(SyntaxNodeAnalysisContext context, ReferenceSymbols typeReferences) { TypeDeclarationSyntax typeDeclaration = (TypeDeclarationSyntax)context.Node; INamedTypeSymbol? declaredSymbol = context.SemanticModel.GetDeclaredSymbol(typeDeclaration); if (declaredSymbol is null) { return; } if ( ((declaredSymbol.TypeKind == TypeKind.Interface) && declaredSymbol.GetAttributes().Any(x2 => Equals(x2.AttributeClass, typeReferences.UnionAttribute))) || ((declaredSymbol.TypeKind == TypeKind.Class) && declaredSymbol.GetAttributes().Any(x2 => Equals(x2.AttributeClass, typeReferences.MessagePackObjectAttribute))) || ((declaredSymbol.TypeKind == TypeKind.Struct) && declaredSymbol.GetAttributes().Any(x2 => Equals(x2.AttributeClass, typeReferences.MessagePackObjectAttribute)))) { var reportContext = new DiagnosticsReportContext(context); var collector = new TypeCollector(reportContext, typeReferences); collector.CollectCore(declaredSymbol); reportContext.ReportAll(); } }