public void Execute(GeneratorExecutionContext context) { Attributes.AddAttributesToSource(context); if (context.SyntaxReceiver is not ObservableObjectSyntaxReceiver syntaxReceiver) { return; } var compilation = EnsureSymbolsSet((CSharpCompilation)context.Compilation); foreach (var symbolsGroup in GetFieldSymbols(compilation, syntaxReceiver.CandidateClasses).GroupBy(x => x.ContainingType)) { if (!ClassValidator.ValidateAndReportDiagnostics(symbolsGroup.Key, context)) { continue; } var classSourceString = ProcessClass(symbolsGroup.Key, symbolsGroup.AsEnumerable()); context.AddSource($"{symbolsGroup.Key.Name}_observable.cs", SourceText.From(classSourceString, Encoding.UTF8)); } }