public function getHeraldField($field)
 {
     switch ($field) {
         case self::FIELD_TITLE:
             return $this->revision->getTitle();
             break;
         case self::FIELD_BODY:
             return $this->revision->getSummary() . "\n" . $this->revision->getTestPlan();
             break;
         case self::FIELD_AUTHOR:
             return $this->revision->getAuthorPHID();
             break;
         case self::FIELD_AUTHOR_PROJECTS:
             $author_phid = $this->revision->getAuthorPHID();
             if (!$author_phid) {
                 return array();
             }
             $projects = id(new PhabricatorProjectQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withMemberPHIDs(array($author_phid))->execute();
             return mpull($projects, 'getPHID');
         case self::FIELD_DIFF_FILE:
             return $this->loadAffectedPaths();
         case self::FIELD_REVIEWERS:
             if (isset($this->explicitReviewers)) {
                 return array_keys($this->explicitReviewers);
             } else {
                 return $this->revision->getReviewers();
             }
         case self::FIELD_REPOSITORY:
             $repository = $this->loadRepository();
             if (!$repository) {
                 return null;
             }
             return $repository->getPHID();
         case self::FIELD_REPOSITORY_PROJECTS:
             $repository = $this->loadRepository();
             if (!$repository) {
                 return array();
             }
             return $repository->getProjectPHIDs();
         case self::FIELD_DIFF_CONTENT:
             return $this->loadContentDictionary();
         case self::FIELD_DIFF_ADDED_CONTENT:
             return $this->loadAddedContentDictionary();
         case self::FIELD_DIFF_REMOVED_CONTENT:
             return $this->loadRemovedContentDictionary();
         case self::FIELD_AFFECTED_PACKAGE:
             $packages = $this->loadAffectedPackages();
             return mpull($packages, 'getPHID');
         case self::FIELD_AFFECTED_PACKAGE_OWNER:
             $packages = $this->loadAffectedPackages();
             return PhabricatorOwnersOwner::loadAffiliatedUserPHIDs(mpull($packages, 'getID'));
     }
     return parent::getHeraldField($field);
 }
 public function getHeraldField($field)
 {
     switch ($field) {
         case self::FIELD_AUTHOR:
             return $this->getObject()->getAuthorPHID();
             break;
         case self::FIELD_AUTHOR_PROJECTS:
             $author_phid = $this->getHeraldField(self::FIELD_AUTHOR);
             if (!$author_phid) {
                 return array();
             }
             $projects = id(new PhabricatorProjectQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withMemberPHIDs(array($author_phid))->execute();
             return mpull($projects, 'getPHID');
         case self::FIELD_DIFF_FILE:
             return $this->loadAffectedPaths();
         case self::FIELD_REPOSITORY:
             $repository = $this->loadRepository();
             if (!$repository) {
                 return null;
             }
             return $repository->getPHID();
         case self::FIELD_REPOSITORY_PROJECTS:
             $repository = $this->loadRepository();
             if (!$repository) {
                 return array();
             }
             return $repository->getProjectPHIDs();
         case self::FIELD_DIFF_CONTENT:
             return $this->loadContentDictionary();
         case self::FIELD_DIFF_ADDED_CONTENT:
             return $this->loadAddedContentDictionary();
         case self::FIELD_DIFF_REMOVED_CONTENT:
             return $this->loadRemovedContentDictionary();
     }
     return parent::getHeraldField($field);
 }