/**
  * @param EntityId $entityId
  * @param string $termType
  * @param string[] $languageCodes The languages to get terms for
  *
  * @return string[]
  */
 protected function getTermsOfType(EntityId $entityId, $termType, array $languageCodes)
 {
     $terms = $this->getBufferedTerms($entityId, $termType, $languageCodes);
     $languageCodes = array_diff($languageCodes, array_keys($terms));
     if (!empty($languageCodes)) {
         $bufferedKeys = $this->getBufferKeys(array($entityId), array($termType), array_keys($terms));
         $fetchedTerms = $this->termIndex->getTermsOfEntity($entityId, array($termType), $languageCodes);
         $fetchedKeys = $this->setBufferedTermObjects($fetchedTerms);
         $terms = array_merge($terms, $this->convertTermsToMap($fetchedTerms));
         $bufferedKeys = array_merge($bufferedKeys, $fetchedKeys);
         $this->setUndefinedTerms(array($entityId), array($termType), $languageCodes, $bufferedKeys);
     }
     $terms = $this->stripUndefinedTerms($terms);
     return $terms;
 }
 /**
  * @param EntityId $entityId
  * @param string $termType
  * @param string[]|null $languageCodes The languages to get terms for; null means all languages.
  *
  * @return string[]
  */
 protected function getTermsOfType(EntityId $entityId, $termType, array $languageCodes = null)
 {
     $wikibaseTerms = $this->termIndex->getTermsOfEntity($entityId, array($termType), $languageCodes);
     return $this->convertTermsToMap($wikibaseTerms);
 }