<?php 
 
namespace Doctrine\Bundle\DoctrineBundle\Mapping; 
 
use Doctrine\ORM\Id\AbstractIdGenerator; 
use Doctrine\ORM\Mapping\ClassMetadata; 
use Doctrine\ORM\Mapping\ClassMetadataFactory as BaseClassMetadataFactory; 
 
use function assert; 
 
class ClassMetadataFactory extends BaseClassMetadataFactory 
{ 
    /** 
     * {@inheritDoc} 
     */ 
    protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents): void 
    { 
        parent::doLoadMetadata($class, $parent, $rootEntityFound, $nonSuperclassParents); 
 
        $customGeneratorDefinition = $class->customGeneratorDefinition; 
 
        if (! isset($customGeneratorDefinition['instance'])) { 
            return; 
        } 
 
        assert($customGeneratorDefinition['instance'] instanceof AbstractIdGenerator); 
 
        $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); 
        $class->setIdGenerator($customGeneratorDefinition['instance']); 
        unset($customGeneratorDefinition['instance']); 
        $class->setCustomGeneratorDefinition($customGeneratorDefinition); 
    } 
}