public function addVisitor($visitor, array $args = []) { if (is_string($visitor)) { $args = array_merge([$this->traverser, $this->context, $this->errors], $args); $refl = new \ReflectionClass($visitor); $visitor = $refl->newInstanceArgs($args); } if (!$visitor instanceof NodeVisitorInterface) { throw new \InvalidArgumentException('Visitor must be instance of NodeVisitorInterface'); } $this->traverser->addVisitor($visitor); }