if ('null' ===
$phpTypeOrClass || 'mixed' ===
$phpTypeOrClass || 'never' ===
$phpTypeOrClass) { continue;
} if (Type::BUILTIN_TYPE_ARRAY ===
$phpTypeOrClass) { $types[] =
new Type(Type::BUILTIN_TYPE_ARRAY,
$nullable, null, true
);
} elseif ('void' ===
$phpTypeOrClass) { $types[] =
new Type(Type::BUILTIN_TYPE_NULL,
$nullable);
} elseif ($type->
isBuiltin()) { $types[] =
new Type($phpTypeOrClass,
$nullable);
} else { $types[] =
new Type(Type::BUILTIN_TYPE_OBJECT,
$nullable,
$this->
resolveTypeName($phpTypeOrClass,
$declaringClass));
} } return $types;
} private function resolveTypeName(string
$name, \ReflectionClass
$declaringClass): string
{ if ('self' ===
$lcName =
strtolower($name)) { return $declaringClass->name;
}