rector/vendor/symfony/config/FileLocator.php
Tomas Votruba a893773fb3 Updated Rector to commit f2e58a222f1b2aa8cb281a1eac6c6cbe71380099
f2e58a222f [Scoped] Fix downgrade rector-generator (#1461)
2021-12-11 09:27:25 +00:00

75 lines
2.6 KiB
PHP

<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace RectorPrefix20211211\Symfony\Component\Config;
use RectorPrefix20211211\Symfony\Component\Config\Exception\FileLocatorFileNotFoundException;
/**
* FileLocator uses an array of pre-defined paths to find files.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class FileLocator implements \RectorPrefix20211211\Symfony\Component\Config\FileLocatorInterface
{
protected $paths;
/**
* @param string|string[] $paths A path or an array of paths where to look for resources
*/
public function __construct($paths = [])
{
$this->paths = (array) $paths;
}
/**
* {@inheritdoc}
*/
public function locate(string $name, string $currentPath = null, bool $first = \true)
{
if ('' === $name) {
throw new \InvalidArgumentException('An empty file name is not valid to be located.');
}
if ($this->isAbsolutePath($name)) {
if (!\file_exists($name)) {
throw new \RectorPrefix20211211\Symfony\Component\Config\Exception\FileLocatorFileNotFoundException(\sprintf('The file "%s" does not exist.', $name), 0, null, [$name]);
}
return $name;
}
$paths = $this->paths;
if (null !== $currentPath) {
\array_unshift($paths, $currentPath);
}
$paths = \array_unique($paths);
$filepaths = $notfound = [];
foreach ($paths as $path) {
if (@\file_exists($file = $path . \DIRECTORY_SEPARATOR . $name)) {
if (\true === $first) {
return $file;
}
$filepaths[] = $file;
} else {
$notfound[] = $file;
}
}
if (!$filepaths) {
throw new \RectorPrefix20211211\Symfony\Component\Config\Exception\FileLocatorFileNotFoundException(\sprintf('The file "%s" does not exist (in: "%s").', $name, \implode('", "', $paths)), 0, null, $notfound);
}
return $filepaths;
}
/**
* Returns whether the file path is an absolute path.
*/
private function isAbsolutePath(string $file) : bool
{
if ('/' === $file[0] || '\\' === $file[0] || \strlen($file) > 3 && \ctype_alpha($file[0]) && ':' === $file[1] && ('\\' === $file[2] || '/' === $file[2]) || null !== \parse_url($file, \PHP_URL_SCHEME)) {
return \true;
}
return \false;
}
}