private function fixRelativeType($path, $names)
{
$nsuse = null;
$types = [];
foreach ($names as $type) {
if (isset($this->primitive_types[$type])) {
continue;
}
if (!$nsuse && $type[0] != '\\') {
$nsuse = $this->nsuse($path);
}
if (in_array(strtolower($type), ['static', '$this', 'self'])) {
$type = $nsuse['namespace'] . '\\' . $nsuse['class'];
} elseif ($type[0] != '\\') {
$parts = explode('\\', $type);
$alias = array_shift($parts);
if (isset($nsuse['imports'][$alias])) {
$type = $nsuse['imports'][$alias];
if ($parts) {
$type = $type . '\\' . join('\\', $parts);
}
} else {
$type = $nsuse['namespace'] . '\\' . $type;
}
}
if ($type) {
if ($type[0] != '\\') {
$type = '\\' . $type;
}
$types[] = $type;
}
}
return self::arrayUnique($types);
}