refactor SourceGen