Updated Rector to commit 3c34942dc98015298c9aa3fdb0369190937021d8

3c34942dc9 Revert "Revert "use NewOptimizedDirectorySourceLocator"" (#4846)
This commit is contained in:
Tomas Votruba 2023-08-24 16:53:49 +00:00
parent a28209cafc
commit 2142e5018e
8 changed files with 32 additions and 89 deletions

View File

@ -5,13 +5,11 @@ namespace Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvi
use PHPStan\BetterReflection\SourceLocator\Type\AggregateSourceLocator;
use PHPStan\BetterReflection\SourceLocator\Type\SourceLocator;
use PHPStan\Php\PhpVersion;
use PHPStan\Reflection\BetterReflection\SourceLocator\FileNodesFetcher;
use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedDirectorySourceLocator;
use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedDirectorySourceLocatorFactory;
use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedSingleFileSourceLocator;
use Rector\Core\Contract\DependencyInjection\ResetableInterface;
use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment;
use RectorPrefix202308\Webmozart\Assert\Assert;
/**
* @api phpstan external
*/
@ -24,25 +22,25 @@ final class DynamicSourceLocatorProvider implements ResetableInterface
private $fileNodesFetcher;
/**
* @readonly
* @var \PHPStan\Php\PhpVersion
* @var \PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedDirectorySourceLocatorFactory
*/
private $phpVersion;
private $optimizedDirectorySourceLocatorFactory;
/**
* @var string[]
*/
private $filePaths = [];
/**
* @var array<string, string[]>
* @var string[]
*/
private $filesByDirectory = [];
private $directories = [];
/**
* @var \PHPStan\BetterReflection\SourceLocator\Type\AggregateSourceLocator|null
*/
private $aggregateSourceLocator;
public function __construct(FileNodesFetcher $fileNodesFetcher, PhpVersion $phpVersion)
public function __construct(FileNodesFetcher $fileNodesFetcher, OptimizedDirectorySourceLocatorFactory $optimizedDirectorySourceLocatorFactory)
{
$this->fileNodesFetcher = $fileNodesFetcher;
$this->phpVersion = $phpVersion;
$this->optimizedDirectorySourceLocatorFactory = $optimizedDirectorySourceLocatorFactory;
}
public function setFilePath(string $filePath) : void
{
@ -55,6 +53,13 @@ final class DynamicSourceLocatorProvider implements ResetableInterface
{
$this->filePaths = \array_merge($this->filePaths, $files);
}
/**
* @param string[] $directories
*/
public function addDirectories(array $directories) : void
{
$this->directories = \array_merge($this->directories, $directories);
}
public function provide() : SourceLocator
{
// do not cache for PHPUnit, as in test every fixture is different
@ -66,23 +71,15 @@ final class DynamicSourceLocatorProvider implements ResetableInterface
foreach ($this->filePaths as $file) {
$sourceLocators[] = new OptimizedSingleFileSourceLocator($this->fileNodesFetcher, $file);
}
foreach ($this->filesByDirectory as $files) {
$sourceLocators[] = new OptimizedDirectorySourceLocator($this->fileNodesFetcher, $this->phpVersion, $files);
foreach ($this->directories as $directory) {
$sourceLocators[] = $this->optimizedDirectorySourceLocatorFactory->createByDirectory($directory);
}
$this->aggregateSourceLocator = new AggregateSourceLocator($sourceLocators);
return $this->aggregateSourceLocator;
}
/**
* @param string[] $files
*/
public function addFilesByDirectory(string $directory, array $files) : void
{
Assert::allString($files);
$this->filesByDirectory[$directory] = $files;
}
public function isPathsEmpty() : bool
{
return $this->filePaths === [] && $this->filesByDirectory === [];
return $this->filePaths === [] && $this->directories === [];
}
/**
* @api to allow fast single-container tests
@ -90,7 +87,7 @@ final class DynamicSourceLocatorProvider implements ResetableInterface
public function reset() : void
{
$this->filePaths = [];
$this->filesByDirectory = [];
$this->directories = [];
$this->aggregateSourceLocator = null;
}
}

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = 'dce10846395c476ad300274c266545153a5fd7ad';
public const PACKAGE_VERSION = '3c34942dc98015298c9aa3fdb0369190937021d8';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2023-08-24 15:51:44';
public const RELEASE_DATE = '2023-08-24 23:35:22';
/**
* @var int
*/

View File

@ -1,42 +0,0 @@
<?php
declare (strict_types=1);
namespace Rector\Core\FileSystem;
use Rector\Caching\UnchangedFilesFilter;
final class PhpFilesFinder
{
/**
* @readonly
* @var \Rector\Core\FileSystem\FilesFinder
*/
private $filesFinder;
/**
* @readonly
* @var \Rector\Caching\UnchangedFilesFilter
*/
private $unchangedFilesFilter;
public function __construct(\Rector\Core\FileSystem\FilesFinder $filesFinder, UnchangedFilesFilter $unchangedFilesFilter)
{
$this->filesFinder = $filesFinder;
$this->unchangedFilesFilter = $unchangedFilesFilter;
}
/**
* @param string[] $paths
* @return string[]
*/
public function findInPaths(array $paths) : array
{
$filePaths = $this->filesFinder->findInDirectoriesAndFiles($paths, ['php'], \false);
// filter out non-PHP files
foreach ($filePaths as $key => $filePath) {
/**
* check .blade.php early so next .php check in next if can be skipped
*/
if (\substr_compare($filePath, '.blade.php', -\strlen('.blade.php')) === 0) {
unset($filePaths[$key]);
}
}
return $this->unchangedFilesFilter->filterFileInfos($filePaths);
}
}

View File

@ -5,7 +5,6 @@ namespace Rector\Core\StaticReflection;
use Rector\Core\FileSystem\FileAndDirectoryFilter;
use Rector\Core\FileSystem\FilesystemTweaker;
use Rector\Core\FileSystem\PhpFilesFinder;
use Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider;
/**
* @see https://phpstan.org/blog/zero-config-analysis-with-static-reflection
@ -18,11 +17,6 @@ final class DynamicSourceLocatorDecorator
* @var \Rector\NodeTypeResolver\Reflection\BetterReflection\SourceLocatorProvider\DynamicSourceLocatorProvider
*/
private $dynamicSourceLocatorProvider;
/**
* @readonly
* @var \Rector\Core\FileSystem\PhpFilesFinder
*/
private $phpFilesFinder;
/**
* @readonly
* @var \Rector\Core\FileSystem\FileAndDirectoryFilter
@ -33,10 +27,9 @@ final class DynamicSourceLocatorDecorator
* @var \Rector\Core\FileSystem\FilesystemTweaker
*/
private $filesystemTweaker;
public function __construct(DynamicSourceLocatorProvider $dynamicSourceLocatorProvider, PhpFilesFinder $phpFilesFinder, FileAndDirectoryFilter $fileAndDirectoryFilter, FilesystemTweaker $filesystemTweaker)
public function __construct(DynamicSourceLocatorProvider $dynamicSourceLocatorProvider, FileAndDirectoryFilter $fileAndDirectoryFilter, FilesystemTweaker $filesystemTweaker)
{
$this->dynamicSourceLocatorProvider = $dynamicSourceLocatorProvider;
$this->phpFilesFinder = $phpFilesFinder;
$this->fileAndDirectoryFilter = $fileAndDirectoryFilter;
$this->filesystemTweaker = $filesystemTweaker;
}
@ -52,10 +45,7 @@ final class DynamicSourceLocatorDecorator
$files = $this->fileAndDirectoryFilter->filterFiles($paths);
$this->dynamicSourceLocatorProvider->addFiles($files);
$directories = $this->fileAndDirectoryFilter->filterDirectories($paths);
foreach ($directories as $directory) {
$filesInDirectory = $this->phpFilesFinder->findInPaths([$directory]);
$this->dynamicSourceLocatorProvider->addFilesByDirectory($directory, $filesInDirectory);
}
$this->dynamicSourceLocatorProvider->addDirectories($directories);
}
public function isPathsEmpty() : bool
{

2
vendor/autoload.php vendored
View File

@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit9e5f3cd1174d06cd16a4ec3638b9dde3::getLoader();
return ComposerAutoloaderInit6b575e2c5cb765ce60488ae5a7e92afe::getLoader();

View File

@ -1202,7 +1202,6 @@ return array(
'Rector\\Core\\FileSystem\\FilesFinder' => $baseDir . '/src/FileSystem/FilesFinder.php',
'Rector\\Core\\FileSystem\\FilesystemTweaker' => $baseDir . '/src/FileSystem/FilesystemTweaker.php',
'Rector\\Core\\FileSystem\\InitFilePathsResolver' => $baseDir . '/src/FileSystem/InitFilePathsResolver.php',
'Rector\\Core\\FileSystem\\PhpFilesFinder' => $baseDir . '/src/FileSystem/PhpFilesFinder.php',
'Rector\\Core\\Logging\\CurrentRectorProvider' => $baseDir . '/src/Logging/CurrentRectorProvider.php',
'Rector\\Core\\Logging\\RectorOutput' => $baseDir . '/src/Logging/RectorOutput.php',
'Rector\\Core\\NodeAnalyzer\\ArgsAnalyzer' => $baseDir . '/src/NodeAnalyzer/ArgsAnalyzer.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit9e5f3cd1174d06cd16a4ec3638b9dde3
class ComposerAutoloaderInit6b575e2c5cb765ce60488ae5a7e92afe
{
private static $loader;
@ -22,17 +22,17 @@ class ComposerAutoloaderInit9e5f3cd1174d06cd16a4ec3638b9dde3
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit9e5f3cd1174d06cd16a4ec3638b9dde3', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInit6b575e2c5cb765ce60488ae5a7e92afe', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit9e5f3cd1174d06cd16a4ec3638b9dde3', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit6b575e2c5cb765ce60488ae5a7e92afe', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInit6b575e2c5cb765ce60488ae5a7e92afe::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3::$files;
$filesToLoad = \Composer\Autoload\ComposerStaticInit6b575e2c5cb765ce60488ae5a7e92afe::$files;
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3
class ComposerStaticInit6b575e2c5cb765ce60488ae5a7e92afe
{
public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
@ -1422,7 +1422,6 @@ class ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3
'Rector\\Core\\FileSystem\\FilesFinder' => __DIR__ . '/../..' . '/src/FileSystem/FilesFinder.php',
'Rector\\Core\\FileSystem\\FilesystemTweaker' => __DIR__ . '/../..' . '/src/FileSystem/FilesystemTweaker.php',
'Rector\\Core\\FileSystem\\InitFilePathsResolver' => __DIR__ . '/../..' . '/src/FileSystem/InitFilePathsResolver.php',
'Rector\\Core\\FileSystem\\PhpFilesFinder' => __DIR__ . '/../..' . '/src/FileSystem/PhpFilesFinder.php',
'Rector\\Core\\Logging\\CurrentRectorProvider' => __DIR__ . '/../..' . '/src/Logging/CurrentRectorProvider.php',
'Rector\\Core\\Logging\\RectorOutput' => __DIR__ . '/../..' . '/src/Logging/RectorOutput.php',
'Rector\\Core\\NodeAnalyzer\\ArgsAnalyzer' => __DIR__ . '/../..' . '/src/NodeAnalyzer/ArgsAnalyzer.php',
@ -2609,9 +2608,9 @@ class ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit9e5f3cd1174d06cd16a4ec3638b9dde3::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInit6b575e2c5cb765ce60488ae5a7e92afe::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit6b575e2c5cb765ce60488ae5a7e92afe::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit6b575e2c5cb765ce60488ae5a7e92afe::$classMap;
}, null, ClassLoader::class);
}