public function addUse($name, $alias = NULL, &$aliasOut = NULL)
{
$name = ltrim($name, '\\');
if ($alias === NULL && $this->name === Helpers::extractNamespace($name)) {
$alias = Helpers::extractShortName($name);
}
if ($alias === NULL) {
$path = explode('\\', $name);
$counter = NULL;
do {
if (empty($path)) {
$counter++;
} else {
$alias = array_pop($path) . $alias;
}
} while (isset($this->uses[$alias . $counter]) && $this->uses[$alias . $counter] !== $name);
$alias .= $counter;
} elseif (isset($this->uses[$alias]) && $this->uses[$alias] !== $name) {
throw new InvalidStateException("Alias '{$alias}' used already for '{$this->uses[$alias]}', cannot use for '{$name}'.");
}
$aliasOut = $alias;
$this->uses[$alias] = $name;
return $this;
}