public function initialize(Expander $expanderNode)
{
if (!array_key_exists($expanderNode->getName(), $this->expanderDefinitions)) {
throw new UnknownExpanderException(sprintf("Unknown expander \"%s\"", $expanderNode->getName()));
}
$reflection = new \ReflectionClass($this->expanderDefinitions[$expanderNode->getName()]);
if ($expanderNode->hasArguments()) {
$arguments = array();
foreach ($expanderNode->getArguments() as $argument) {
$arguments[] = $argument instanceof Expander ? $this->initialize($argument) : $argument;
}
$expander = $reflection->newInstanceArgs($arguments);
} else {
$expander = $reflection->newInstance();
}
if (!$expander instanceof PatternExpander) {
throw new InvalidExpanderTypeException();
}
return $expander;
}