reflectionProvider = $reflectionProvider; $this->objectTypeSpecifier = $objectTypeSpecifier; } /** * @api */ public function resolveFqnTargetEntity(string $targetEntity, Node $node) : string { $targetEntity = $this->getCleanedUpTargetEntity($targetEntity); if ($this->reflectionProvider->hasClass($targetEntity)) { return $targetEntity; } $scope = $node->getAttribute(AttributeKey::SCOPE); if (!$scope instanceof Scope) { return $targetEntity; } $namespacedTargetEntity = $scope->getNamespace() . '\\' . $targetEntity; if ($this->reflectionProvider->hasClass($namespacedTargetEntity)) { return $namespacedTargetEntity; } $resolvedType = $this->objectTypeSpecifier->narrowToFullyQualifiedOrAliasedObjectType($node, new ObjectType($targetEntity), $scope); if ($resolvedType instanceof ShortenedObjectType) { return $resolvedType->getFullyQualifiedName(); } // probably tested class return $targetEntity; } private function getCleanedUpTargetEntity(string $targetEntity) : string { return Strings::replace($targetEntity, self::CLASS_CONST_REGEX, ''); } }