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 ;
@@ -35,6 +36,7 @@ final class TestCaseSourceLocatorFactory
3536 */
3637 public function __construct (
3738 private ComposerJsonAndInstalledJsonSourceLocatorMaker $ composerJsonAndInstalledJsonSourceLocatorMaker ,
39+ private OptimizedSingleFileSourceLocatorRepository $ optimizedSingleFileSourceLocatorRepository ,
3840 private Parser $ phpParser ,
3941 private Parser $ php8Parser ,
4042 private FileNodesFetcher $ fileNodesFetcher ,
@@ -57,7 +59,13 @@ public function create(): SourceLocator
5759 $ this ->excludePaths ,
5860 ]));
5961 if ($ classLoaderReflection ->hasProperty ('vendorDir ' ) && ! isset (self ::$ composerSourceLocatorsCache [$ cacheKey ])) {
60- $ composerLocators = [];
62+ $ composerLocators = [
63+ $ this ->optimizedSingleFileSourceLocatorRepository ->getOrCreate (
64+ PHP_VERSION_ID < 80500
65+ ? __DIR__ . '/../../stubs/runtime/Attribute84.php '
66+ : __DIR__ . '/../../stubs/runtime/Attribute85.php ' ,
67+ ),
68+ ];
6169 $ vendorDirProperty = $ classLoaderReflection ->getProperty ('vendorDir ' );
6270 $ vendorDirProperty ->setAccessible (true );
6371 foreach ($ classLoaders as $ classLoader ) {
0 commit comments