From e40474b3fcd27e5a2b37b8f6add8e7ad906db019 Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Wed, 4 May 2022 16:40:43 +0200 Subject: [PATCH] OptimizedPsrAutoloaderLocator - look for other symbols in already scanned files --- .../OptimizedPsrAutoloaderLocator.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Reflection/BetterReflection/SourceLocator/OptimizedPsrAutoloaderLocator.php b/src/Reflection/BetterReflection/SourceLocator/OptimizedPsrAutoloaderLocator.php index 36bd379882..6e7d1d5d3a 100644 --- a/src/Reflection/BetterReflection/SourceLocator/OptimizedPsrAutoloaderLocator.php +++ b/src/Reflection/BetterReflection/SourceLocator/OptimizedPsrAutoloaderLocator.php @@ -13,6 +13,9 @@ class OptimizedPsrAutoloaderLocator implements SourceLocator { + /** @var array */ + private array $locators = []; + public function __construct( private PsrAutoloaderMapping $mapping, private OptimizedSingleFileSourceLocatorRepository $optimizedSingleFileSourceLocatorRepository, @@ -22,16 +25,28 @@ public function __construct( public function locateIdentifier(Reflector $reflector, Identifier $identifier): ?Reflection { + foreach ($this->locators as $locator) { + $reflection = $locator->locateIdentifier($reflector, $identifier); + if ($reflection === null) { + continue; + } + + return $reflection; + } + foreach ($this->mapping->resolvePossibleFilePaths($identifier) as $file) { if (!is_file($file)) { continue; } - $reflection = $this->optimizedSingleFileSourceLocatorRepository->getOrCreate($file)->locateIdentifier($reflector, $identifier); + $locator = $this->optimizedSingleFileSourceLocatorRepository->getOrCreate($file); + $reflection = $locator->locateIdentifier($reflector, $identifier); if ($reflection === null) { continue; } + $this->locators[$file] = $locator; + return $reflection; }