public function build(array $engineData, array $json, $engineName)
{
if (!isset($engineData['properties'])) {
$engineData['properties'] = [];
}
if (array_key_exists('inherits', $engineData)) {
$parentName = $engineData['inherits'];
if (!isset($json['engines'][$parentName])) {
throw new \UnexpectedValueException('parent Engine "' . $parentName . '" is missing for engine "' . $engineName . '"');
}
$parentEngine = $this->build($json['engines'][$parentName], $json, $parentName);
$parentEngineData = $parentEngine->getProperties();
$inhEngineProperties = $engineData['properties'];
foreach ($inhEngineProperties as $name => $value) {
if (isset($parentEngineData[$name]) && $parentEngineData[$name] === $value) {
throw new \UnexpectedValueException('the value for property "' . $name . '" has the same value in the keys "' . $engineName . '" and its parent "' . $engineData['inherits'] . '"');
}
}
$engineData['properties'] = array_merge($parentEngineData, $inhEngineProperties);
}
return new Engine($engineData['properties']);
}