/**
* @param string $alias
* @param \ReflectionClass $context
* @return string
* @throws Exception\NamespaceNotFoundException
*/
static function getClass($alias, \ReflectionClass $context)
{
if (!strlen($alias)) {
return $alias;
}
if (strncmp($alias, '\\', 1) === 0) {
return substr($alias, 1);
}
$file = $context->getFileName();
if (!isset(self::$map[$file])) {
if (self::$cache === NULL) {
$list = Parser::parse($file);
} else {
$key = self::C_FILE . $file;
$list = self::$cache->load($key);
if ($list === NULL) {
$list = self::$cache->save($key, Parser::parse($file), array(NCache::FILES => array($file)));
}
}
self::$map[$file] = $list;
}
$namespace = $context->getNamespaceName();
if (!isset(self::$map[$file][$namespace])) {
throw new Exception\NamespaceNotFoundException("Namespace '{$namespace}' not found in '{$file}'.");
}
$parts = explode('\\', $alias);
$first = array_shift($parts);
if (!isset(self::$map[$file][$namespace][$first])) {
return ltrim(trim($namespace, '\\') . '\\', '\\') . $alias;
}
$appendix = implode('\\', $parts);
return self::$map[$file][$namespace][$first] . (strlen($appendix) ? '\\' . $appendix : '');
}