![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/rector/rector/vendor/rector/rector-symfony/src/ |
<?php declare (strict_types=1); namespace Rector\Symfony; use PhpParser\Node; use PhpParser\Node\Stmt\ClassLike; use PhpParser\NodeTraverser; use PhpParser\NodeVisitor\NameResolver; use PHPStan\Reflection\ReflectionProvider; use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Parser\RectorParser; use Rector\NodeNameResolver\NodeNameResolver; final class BundleClassResolver { /** * @readonly * @var \Rector\Core\PhpParser\Node\BetterNodeFinder */ private $betterNodeFinder; /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; /** * @readonly * @var \Rector\Core\PhpParser\Parser\RectorParser */ private $rectorParser; /** * @readonly * @var \PHPStan\Reflection\ReflectionProvider */ private $reflectionProvider; public function __construct(BetterNodeFinder $betterNodeFinder, NodeNameResolver $nodeNameResolver, RectorParser $rectorParser, ReflectionProvider $reflectionProvider) { $this->betterNodeFinder = $betterNodeFinder; $this->nodeNameResolver = $nodeNameResolver; $this->rectorParser = $rectorParser; $this->reflectionProvider = $reflectionProvider; } public function resolveShortBundleClassFromControllerClass(string $class) : ?string { $classReflection = $this->reflectionProvider->getClass($class); // resolve bundle from existing ones $fileName = $classReflection->getFileName(); if ($fileName === null) { return null; } $controllerDirectory = \dirname($fileName); $rootFolder = \getenv('SystemDrive', \true) . \DIRECTORY_SEPARATOR; // traverse up, un-till first bundle class appears $bundleFiles = []; while ($bundleFiles === [] && $controllerDirectory !== $rootFolder) { $bundleFiles = (array) \glob($controllerDirectory . '/**Bundle.php'); $controllerDirectory = \dirname($controllerDirectory); } /** @var string[] $bundleFiles */ if ($bundleFiles === []) { return null; } $bundleFile = $bundleFiles[0]; $bundleClassName = $this->resolveClassNameFromFilePath($bundleFile); if ($bundleClassName !== null) { return $this->nodeNameResolver->getShortName($bundleClassName); } return null; } private function resolveClassNameFromFilePath(string $filePath) : ?string { $nodes = $this->rectorParser->parseFile($filePath); $this->addFullyQualifiedNamesToNodes($nodes); $classLike = $this->betterNodeFinder->findFirstNonAnonymousClass($nodes); if (!$classLike instanceof ClassLike) { return null; } return $this->nodeNameResolver->getName($classLike); } /** * @param Node[] $nodes */ private function addFullyQualifiedNamesToNodes(array $nodes) : void { $nodeTraverser = new NodeTraverser(); $nameResolver = new NameResolver(); $nodeTraverser->addVisitor($nameResolver); $nodeTraverser->traverse($nodes); } }