public function getUnitByName($name)
{
if (isset($this->loadedUnits[$name])) {
return $this->loadedUnits[$name];
}
$parts = explode('\\', $name);
$local = array_pop($parts);
$namespace = join('\\', $parts);
$indexNode = $this->index->findUnitNodeByName($namespace, $local);
if (!$indexNode) {
throw new ProjectException("No unit with name '{$name}' found");
}
switch ($indexNode->localName) {
case 'interface':
$unit = new InterfaceObject();
break;
case 'trait':
$unit = new TraitObject();
break;
case 'class':
$unit = new ClassObject();
break;
default:
throw new ProjectException(sprintf('Unexpected type "%s"', $indexNode->localName), ProjectException::UnexpectedType);
}
$dom = new fDOMDocument();
$dom->load($this->xmlDir . '/' . $indexNode->getAttribute('xml'));
$unit->import($dom);
return $unit;
}