protected function load(\ReflectionClass $class)
{
$parent = null;
foreach ($this->getParentClasses($class) as $class) {
$name = $class->getName();
if (isset($this->metadata[$name])) {
$parent = $this->metadata[$name];
continue;
}
$config = [];
if ($parent) {
foreach ($parent->getFields() as $field) {
if (!isset($field['inherited']) && !$parent->isMappedSuperclass()) {
$field['inherited'] = $parent->getClass();
}
$config['fields'][$field['name']] = $field;
}
foreach ($parent->getRelationMappings() as $relation) {
if (!isset($relation['inherited']) && !$parent->isMappedSuperclass()) {
$relation['inherited'] = $parent->getClass();
}
$config['relations'][$relation['name']] = $relation;
}
if ($identifier = $parent->getIdentifier()) {
$config['identifier'] = $identifier;
}
$config['events'] = $parent->getEvents();
}
$this->metadata[$name] = $parent = new Metadata($this, $name, $this->loader->load($class, $config));
}
return $parent;
}