@VisibleForTesting
void buildPropertyProviderRegistrator(Set<String> allRootTypes,
SortedSet<BindingProperty> bindingProperties,
SortedSet<ConfigurationProperty> configurationProperties) throws UnableToCompleteException {
PropertyProviderRegistratorGenerator propertyProviderRegistratorGenerator =
new PropertyProviderRegistratorGenerator(bindingProperties, configurationProperties);
StandardGeneratorContext generatorContext = getGeneratorContext();
// Name based on module canonical name, to avoid collisions resulting from multiple modules
// with the same rename.
String propertyProviderRegistratorTypeName = propertyProviderRegistratorGenerator.generate(
logger, generatorContext, module.getCanonicalName());
// Ensures that unification traverses and keeps the class.
allRootTypes.add(propertyProviderRegistratorTypeName);
// Ensures that JProgram knows to index this class's methods so that later bootstrap
// construction code is able to locate the FooPropertyProviderRegistrator.register() function.