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