How to generate code using Roslyn source generators in real world scenarios