/** * Simplifies compound constraints. For e.g. when an AndX * is inside an other AndX, it gets simplified to a single * AndX. * * @param Constraint $constraint * @return Constraint|mixed */ protected function canonicalize(Constraint $constraint) { if ($constraint instanceof CompoundConstraint) { $children = $constraint->getConstraints(); if (1 === count($children) && $constraint instanceof AndX) { return $constraint->pop(); } foreach ($children as &$child) { $child = $this->canonicalize($child); } $constraint->setConstraints($children); } return $constraint; }