public function process(ContainerBuilder $container): void
    {
        if (!$container->has('ruwork_synchronizer.factory')) {
            return;
        }

        $syncTypes = $container->findTaggedServiceIds('ruwork_synchronizer.synchronization_type', true);
        $syncTypeRefs = [];

        foreach ($syncTypes as $id => $attributes) {
            $class = $container->getDefinition($id)->getClass();

            if (!is_subclass_of($class, TypeInterface::class)) {
                throw new \InvalidArgumentException(sprintf('Synchronization type "%s" must implement "%s".', $class, TypeInterface::class));
            }

            $syncTypeRefs[$class] = new Reference($id);
        }

        $container
            ->findDefinition('ruwork_synchronizer.factory')
            ->setArgument('$types', ServiceLocatorTagPass::register($container, $syncTypeRefs));
    }
public function process(ContainerBuilder $container): void
    {
        if (!$container->has('ruwork_synchronizer.factory')) {
            return;
        }

        $syncTypes = $container->findTaggedServiceIds('ruwork_synchronizer.synchronization_type', true);
        $syncTypeRefs = [];

        foreach ($syncTypes as $id => $attributes) {
            $class = $container->getDefinition($id)->getClass();

            if (!is_subclass_of($class, TypeInterface::class)) {
                throw new \InvalidArgumentException(sprintf('Synchronization type "%s" must implement "%s".', $class, TypeInterface::class));
            }

            $syncTypeRefs[$class] = new Reference($id);
        }

        $container
            ->findDefinition('ruwork_synchronizer.factory')
            ->setArgument('$types', ServiceLocatorTagPass::register($container, $syncTypeRefs));
    }
{@inheritdoc}