1616use PHPStan \Reflection \BetterReflection \SourceLocator \AutoloadSourceLocator ;
1717use PHPStan \Reflection \BetterReflection \SourceLocator \ComposerJsonAndInstalledJsonSourceLocatorMaker ;
1818use PHPStan \Reflection \BetterReflection \SourceLocator \FileNodesFetcher ;
19+ use PHPStan \Reflection \BetterReflection \SourceLocator \OptimizedSingleFileSourceLocatorRepository ;
1920use PHPStan \Reflection \BetterReflection \SourceLocator \PhpVersionBlacklistSourceLocator ;
2021use ReflectionClass ;
2122use function dirname ;
2223use function is_file ;
2324use function serialize ;
2425use function sha1 ;
26+ use const PHP_VERSION_ID ;
2527
2628final class TestCaseSourceLocatorFactory
2729{
@@ -35,6 +37,7 @@ final class TestCaseSourceLocatorFactory
3537 */
3638 public function __construct (
3739 private ComposerJsonAndInstalledJsonSourceLocatorMaker $ composerJsonAndInstalledJsonSourceLocatorMaker ,
40+ private OptimizedSingleFileSourceLocatorRepository $ optimizedSingleFileSourceLocatorRepository ,
3841 private Parser $ phpParser ,
3942 private Parser $ php8Parser ,
4043 private FileNodesFetcher $ fileNodesFetcher ,
@@ -57,7 +60,13 @@ public function create(): SourceLocator
5760 $ this ->excludePaths ,
5861 ]));
5962 if ($ classLoaderReflection ->hasProperty ('vendorDir ' ) && ! isset (self ::$ composerSourceLocatorsCache [$ cacheKey ])) {
60- $ composerLocators = [];
63+ $ composerLocators = [
64+ $ this ->optimizedSingleFileSourceLocatorRepository ->getOrCreate (
65+ PHP_VERSION_ID < 80500
66+ ? __DIR__ . '/../../stubs/runtime/Attribute84.php '
67+ : __DIR__ . '/../../stubs/runtime/Attribute85.php ' ,
68+ ),
69+ ];
6170 $ vendorDirProperty = $ classLoaderReflection ->getProperty ('vendorDir ' );
6271 $ vendorDirProperty ->setAccessible (true );
6372 foreach ($ classLoaders as $ classLoader ) {
0 commit comments