/**
  * Adds inherited fields to the subclass mapping.
  *
  * @param ClassMetadata $subClass
  * @param ClassMetadata $parentClass
  * @return void
  */
 private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass)
 {
     $inheritedFields = $parentClass->getInheritedFields();
     foreach ($inheritedFields as $fieldName => $className) {
         $subClass->setFieldInherited($fieldName, $className);
     }
     $delcaredFields = $parentClass->getDeclaredFields();
     foreach ($delcaredFields as $fieldName => $className) {
         $subClass->setFieldDeclared($fieldName, $className);
     }
     foreach ($parentClass->fieldMappings as $fieldName => $mapping) {
         $this->registerParentOnField($subClass, $parentClass, $fieldName);
         $subClass->mapField($mapping);
     }
     foreach ($parentClass->associationsMappings as $fieldName => $mapping) {
         $this->registerParentOnField($subClass, $parentClass, $fieldName);
         if ($mapping['type'] == ClassMetadata::MANY_TO_ONE) {
             $subClass->mapManyToOne($mapping);
         } else {
             $subClass->mapManyToMany($mapping);
         }
     }
     foreach ($parentClass->childMappings as $fieldName => $mapping) {
         $this->registerParentOnField($subClass, $parentClass, $fieldName);
         $subClass->mapChild($mapping);
     }
     foreach ($parentClass->childrenMappings as $fieldName => $mapping) {
         $this->registerParentOnField($subClass, $parentClass, $fieldName);
         $subClass->mapChildren($mapping);
     }
     foreach ($parentClass->referrersMappings as $fieldName => $mapping) {
         $this->registerParentOnField($subClass, $parentClass, $fieldName);
         $subClass->mapReferrers($mapping);
     }
     if ($parentClass->identifier) {
         $this->registerParentOnField($subClass, $parentClass, $parentClass->identifier);
         $subClass->mapId(array('fieldName' => $parentClass->identifier, 'id' => true, 'strategy' => $parentClass->idGenerator));
     }
     if ($parentClass->node) {
         $this->registerParentOnField($subClass, $parentClass, $parentClass->node);
         $subClass->mapNode(array('fieldName' => $parentClass->node));
     }
     if ($parentClass->nodename) {
         $this->registerParentOnField($subClass, $parentClass, $parentClass->nodename);
         $subClass->mapNodename(array('fieldName' => $parentClass->nodename));
     }
     if ($parentClass->parentMapping) {
         $this->registerParentOnField($subClass, $parentClass, $parentClass->parentMapping);
         $subClass->mapParentDocument(array('fieldName' => $parentClass->parentMapping));
     }
     if ($parentClass->localeMapping) {
         $this->registerParentOnField($subClass, $parentClass, $parentClass->localeMapping);
         $subClass->mapLocale(array('fieldName' => $parentClass->localeMapping));
     }
     if ($parentClass->versionNameField) {
         $this->registerParentOnField($subClass, $parentClass, $parentClass->versionNameField);
         $subClass->mapVersionName(array('fieldName' => $parentClass->versionNameField));
     }
     if ($parentClass->versionCreatedField) {
         $this->registerParentOnField($subClass, $parentClass, $parentClass->versionCreatedField);
         $subClass->mapVersionCreated(array('fieldName' => $parentClass->versionCreatedField));
     }
     if ($parentClass->lifecycleCallbacks) {
         $subClass->mapLifecycleCallbacks($parentClass->lifecycleCallbacks);
     }
 }