*/
final class ClassConstFetchTypeResolver implements NodeTypeResolverInterface
{
/**
* @return array>
*/
public function getNodeClasses() : array
{
return [ClassConstFetch::class];
}
/**
* @param ClassConstFetch $node
*/
public function resolve(Node $node) : Type
{
$scope = $node->getAttribute(AttributeKey::SCOPE);
if (!$scope instanceof Scope) {
return new MixedType();
}
if ($node->class instanceof FullyQualified) {
return $scope->getType($node);
}
if ($node->class instanceof Name && $node->class->hasAttribute(AttributeKey::NAMESPACED_NAME)) {
$newNode = clone $node;
$newNode->class = new FullyQualified($node->class->getAttribute(AttributeKey::NAMESPACED_NAME));
return $scope->getType($newNode);
}
return $scope->getType($node);
}
}