public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type)
 {
     if ($type['name'] !== 'JMS\\Serializer\\Tests\\Fixtures\\BlogPost') {
         return parent::construct($visitor, $metadata, $data, $type);
     }
     return new BlogPost('This is a nice title.', new Author('Foo Bar'), new \DateTime('2011-07-30 00:00', new \DateTimeZone('UTC')));
 }
 public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context)
 {
     /* @var $reflection \ReflectionClass */
     $reflection = $metadata->reflection;
     $class = $metadata->name;
     $constructor = $reflection->getConstructor();
     if ($constructor) {
         $constructorParameters = $constructor->getParameters();
         $params = array();
         foreach ($constructorParameters as $constructorParameter) {
             $paramName = $constructorParameter->name;
             if (isset($data[$paramName])) {
                 $params[] = $data[$paramName];
             } elseif (!$constructorParameter->isOptional()) {
                 throw new \RuntimeException('Cannot create an instance of ' . $class . ' from serialized data because its constructor requires ' . 'parameter "' . $constructorParameter->name . '" to be present.');
             }
         }
         return $reflection->newInstanceArgs($params);
     }
     return parent::construct($visitor, $metadata, $data, $type, $context);
 }