/**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     $validatorClassMetadata = $this->validatorMetadataFactory->getMetadataFor($classMetadata->getName());
     foreach ($classMetadata->getAttributesMetadata() as $attributeName => $attributeMetadata) {
         foreach ($validatorClassMetadata->getPropertyMetadata($attributeName) as $propertyMetadata) {
             if (null === $validationGroups) {
                 foreach ($propertyMetadata->findConstraints($validatorClassMetadata->getDefaultGroup()) as $constraint) {
                     if ($this->isRequired($constraint)) {
                         $attributeMetadata = $attributeMetadata->withRequired(true);
                         break 2;
                     }
                 }
             } else {
                 foreach ($validationGroups as $validationGroup) {
                     if (!is_string($validationGroup)) {
                         continue;
                     }
                     foreach ($propertyMetadata->findConstraints($validationGroup) as $constraint) {
                         if ($this->isRequired($constraint)) {
                             $attributeMetadata = $attributeMetadata->withRequired(true);
                             break 3;
                         }
                     }
                 }
             }
         }
         $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata);
     }
     return $classMetadata;
 }