Beispiel #1
0
 /**
  * {@inheritDoc}
  */
 public function walkCompositeExpression(CompositeExpression $expr, AbstractNode $parentNode)
 {
     switch ($expr->getType()) {
         case CompositeExpression::TYPE_AND:
             $node = $parentNode->andX();
             break;
         case CompositeExpression::TYPE_OR:
             $node = $parentNode->orX();
             break;
         default:
             throw new \RuntimeException('Unknown composite: ' . $expr->getType());
     }
     $expressions = $expr->getExpressionList();
     $leftExpression = array_shift($expressions);
     $this->dispatch($leftExpression, $node);
     $parentNode = $node;
     foreach ($expressions as $index => $expression) {
         if (count($expressions) === $index + 1) {
             $this->dispatch($expression, $parentNode);
             break;
         }
         switch ($expr->getType()) {
             case CompositeExpression::TYPE_AND:
                 $parentNode = $parentNode->andX();
                 break;
             case CompositeExpression::TYPE_OR:
                 $parentNode = $parentNode->orX();
                 break;
         }
         $this->dispatch($expression, $parentNode);
     }
     return $node;
 }