private function traverseDisjunction(OrX $expr)
{
$disjuncts1 = $expr->getDisjuncts();
$disjuncts2 = array();
foreach ($disjuncts1 as $disjunct) {
if ($disjunct = $this->traverse($disjunct)) {
$disjuncts2[] = $disjunct;
}
}
if ($disjuncts1 === $disjuncts2) {
return $expr;
}
return $disjuncts2 ? new OrX($disjuncts2) : null;
}