This new abstract class allows us move some logic from the cmGlobalGenerator into its own layer in a next step.