1<?php
2
3declare(strict_types=1);
4
5namespace JMS\Serializer\Construction;
6
7use Doctrine\Instantiator\Instantiator;
8use JMS\Serializer\DeserializationContext;
9use JMS\Serializer\Metadata\ClassMetadata;
10use JMS\Serializer\Visitor\DeserializationVisitorInterface;
11
12final class UnserializeObjectConstructor implements ObjectConstructorInterface
13{
14    /** @var Instantiator */
15    private $instantiator;
16
17    /**
18     * {@inheritdoc}
19     */
20    public function construct(DeserializationVisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context): ?object
21    {
22        return $this->getInstantiator()->instantiate($metadata->name);
23    }
24
25    private function getInstantiator(): Instantiator
26    {
27        if (null === $this->instantiator) {
28            $this->instantiator = new Instantiator();
29        }
30
31        return $this->instantiator;
32    }
33}
34