public void SymbolAnalysis(SymbolAnalysisContext context)
        {
            if (!(context.Symbol is INamedTypeSymbol symbol))
            {
                return;
            }
            var syntaxes = symbol.DeclaringSyntaxReferences.Select(x => (TypeDeclarationSyntax)x.GetSyntax(context.CancellationToken));

            _generatorFactory.RunGeneration(context.Compilation, syntaxes, generator => {
                generator.OnReportedDiagnostic += (_, diagnostic) => context.ReportDiagnostic(diagnostic);
                generator.VerifySyntax();
            });
        }
        public void Execute(SourceGeneratorContext context)
        {
            try {
                if (!(context.SyntaxReceiver is CandidateSyntaxReceiver receiver))
                {
                    return;
                }

                _genFactory.RunGeneration(context.Compilation, receiver.DeclaredTypes, generator => {
                    generator.OnReportedDiagnostic += (_, diagnostic) => context.ReportDiagnostic(diagnostic);
                    generator.OnGeneratedSource    += (_, source) => context.AddSourceWithDebug(source);
                    generator.GenerateFiles();
                });
            }
            catch (Exception e) {
                context.WriteException(e);
            }
        }