code: public function validate($identity, Constraint $constraint)
      {
          if (null === $identity) {
              return;
          }
  
          if (!$identity instanceof IdentityInterface) {
              throw new UnexpectedTypeException($constraint, IdentityInterface::class);
          }
          if (!$constraint instanceof Identity) {
              throw new UnexpectedTypeException($constraint, Identity::class);
          }
  
          // All or none
          $gender = $identity->getGender();
          $firstName = $identity->getFirstName();
          $lastName = $identity->getLastName();
  
          $all = $gender . $lastName . $firstName;
  
          if (empty($all)) {
              if ($constraint->required) {
                  $this->context
                      ->buildViolation($constraint->mandatory)
                      ->atPath('gender')
                      ->addViolation();
              }
          } else {
              $config = [
                  'gender'    => [
                      new Assert\NotBlank(['message' => $constraint->gender_is_mandatory]),
                      new Gender(),
                  ],
                  'firstName' => [
                      new Assert\NotBlank(['message' => $constraint->first_name_is_mandatory]),
                      new Assert\Length(['min' => 2, 'max' => 32,]),
                  ],
                  'lastName'  => [
                      new Assert\NotBlank(['message' => $constraint->last_name_is_mandatory]),
                      new Assert\Length(['min' => 2, 'max' => 32,]),
                  ],
              ];
  
              if (null === $this->propertyAccessor) {
                  $this->propertyAccessor = PropertyAccess::createPropertyAccessor();
              }
  
              foreach ($config as $field => $constraints) {
                  $value = $this->propertyAccessor->getValue($identity, $field);
                  $violationList = $this->context->getValidator()->validate($value, $constraints);
  
                  /** @var \Symfony\Component\Validator\ConstraintViolationInterface $violation */
                  foreach ($violationList as $violation) {
                      $this->context
                          ->buildViolation($violation->getMessage())
                          ->atPath($field)
                          ->addViolation();
                  }
              }
          }
      }
docs: {@inheritdoc}