protected function isNodeTypeAllowedByInheritanceConstraints(NodeType $nodeType, array $constraints)
{
$constraintDistanceForTrue = null;
$constraintDistanceForFalse = null;
foreach ($constraints as $superType => $constraint) {
if ($nodeType->isOfType($superType)) {
$distance = $this->traverseSuperTypes($nodeType, $superType, 0);
if ($constraint === true && ($constraintDistanceForTrue === null || $constraintDistanceForTrue > $distance)) {
$constraintDistanceForTrue = $distance;
}
if ($constraint === false && ($constraintDistanceForFalse === null || $constraintDistanceForFalse > $distance)) {
$constraintDistanceForFalse = $distance;
}
}
}
if ($constraintDistanceForTrue !== null && $constraintDistanceForFalse !== null) {
return $constraintDistanceForTrue < $constraintDistanceForFalse ? true : false;
}
if ($constraintDistanceForFalse !== null) {
return false;
}
if ($constraintDistanceForTrue !== null) {
return true;
}
return null;
}