/**
  * @param array $emailOwnerChanges
  *
  * @return EmailAddress[]
  */
 protected function updateEmailAddresses(array $emailOwnerChanges, array $emailOwnerDeletions)
 {
     $updatedEmailAddresses = [];
     foreach ($emailOwnerChanges as $item) {
         $email = $item['email'];
         $newOwner = false === $item['owner'] ? null : $item['owner'];
         $emailAddress = $this->emailAddressManager->getEmailAddressRepository()->findOneBy(['email' => $email]);
         if ($emailAddress === null) {
             $emailAddress = $this->emailAddressManager->newEmailAddress()->setEmail($email)->setOwner($newOwner);
             $this->emailAddressManager->getEntityManager()->persist($emailAddress);
             $updatedEmailAddresses[] = $emailAddress;
         } elseif ($emailAddress->getOwner() !== $newOwner) {
             $emailAddress->setOwner($newOwner);
             $updatedEmailAddresses[] = $emailAddress;
         }
     }
     foreach ($emailOwnerDeletions as $owner) {
         foreach ($this->emailOwnerClasses as $fieldName => $ownerClass) {
             if (is_a($owner, $ownerClass)) {
                 $condition = array($fieldName => $owner);
                 /* @var $emailAddresses EmailAddress[] */
                 $emailAddresses = $this->emailAddressManager->getEmailAddressRepository()->findBy($condition);
                 foreach ($emailAddresses as $emailAddress) {
                     $emailAddress->setOwner(null);
                     $updatedEmailAddresses[] = $emailAddress;
                 }
             }
         }
     }
     return $updatedEmailAddresses;
 }