/**
  * {@inheritdoc}
  */
 public function parse(array $input)
 {
     $params = array();
     $className = $input['class'];
     $classdata = $this->factory->getClassMetadata($className);
     $properties = $classdata->getConstrainedProperties();
     foreach ($properties as $property) {
         $vparams = array();
         $pds = $classdata->getMemberMetadatas($property);
         foreach ($pds as $propdata) {
             $constraints = $propdata->getConstraints();
             foreach ($constraints as $constraint) {
                 $vparams = $this->parseConstraint($constraint, $vparams, $className);
             }
         }
         if (isset($vparams['format'])) {
             $vparams['format'] = join(', ', $vparams['format']);
         }
         foreach (array('dataType', 'readonly', 'required') as $reqprop) {
             if (!isset($vparams[$reqprop])) {
                 $vparams[$reqprop] = null;
             }
         }
         $params[$property] = $vparams;
     }
     return $params;
 }
 /**
  * {@inheritdoc}
  */
 public function hasMetadataFor($value)
 {
     $class = is_object($value) ? get_class($value) : $value;
     set_error_handler(array($this, 'handleBC'));
     $return = null !== $this->innerFactory->getClassMetadata($class);
     restore_error_handler();
     return $return;
 }
 /**
  * @param Node $node
  * @return void
  */
 public function enterNode(Node $node)
 {
     if ($node instanceof Node\Stmt\Namespace_) {
         if (isset($node->name)) {
             $this->namespace = implode('\\', $node->name->parts);
         }
         return;
     }
     if (!$node instanceof Node\Stmt\Class_) {
         return;
     }
     $name = '' === $this->namespace ? $node->name : $this->namespace . '\\' . $node->name;
     if (!class_exists($name)) {
         return;
     }
     $metadata = $this->metadataFactory instanceof ClassMetadataFactoryInterface ? $this->metadataFactory->getClassMetadata($name) : $this->metadataFactory->getMetadataFor($name);
     if (!$metadata->hasConstraints() && !count($metadata->getConstrainedProperties())) {
         return;
     }
     $this->extractFromConstraints($metadata->constraints);
     foreach ($metadata->members as $members) {
         foreach ($members as $member) {
             $this->extractFromConstraints($member->constraints);
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function hasMetadataFor($value)
 {
     $class = is_object($value) ? get_class($value) : $value;
     return null !== $this->innerFactory->getClassMetadata($class);
 }