*/ private Iterator $fileSystemIterator; /** * @param Iterator $fileInfoIterator note: only SplFileInfo allowed in this iterator * * @throws InvalidFileInfo In case of iterator not contains only SplFileInfo. */ public function __construct(Iterator $fileInfoIterator, private Locator $astLocator) { foreach ($fileInfoIterator as $fileInfo) { if (! $fileInfo instanceof SplFileInfo) { throw InvalidFileInfo::fromNonSplFileInfo($fileInfo); } } $this->fileSystemIterator = $fileInfoIterator; } /** @throws InvalidFileLocation */ private function getAggregatedSourceLocator(): AggregateSourceLocator { // @infection-ignore-all Coalesce: There's no difference, it's just optimization return $this->aggregateSourceLocator ?? $this->aggregateSourceLocator = new AggregateSourceLocator(array_values(array_filter(array_map( function (SplFileInfo $item): SingleFileSourceLocator|null { $realPath = $item->getRealPath(); assert(is_string($realPath) && $realPath !== ''); if (! ($item->isFile() && pathinfo($realPath, PATHINFO_EXTENSION) === 'php')) { return null; } return new SingleFileSourceLocator($realPath, $this->astLocator); }, iterator_to_array($this->fileSystemIterator), )))); } /** * {@inheritDoc} * * @throws InvalidFileLocation */ public function locateIdentifier(Reflector $reflector, Identifier $identifier): Reflection|null { return $this->getAggregatedSourceLocator()->locateIdentifier($reflector, $identifier); } /** * {@inheritDoc} * * @throws InvalidFileLocation */ public function locateIdentifiersByType(Reflector $reflector, IdentifierType $identifierType): array { return $this->getAggregatedSourceLocator()->locateIdentifiersByType($reflector, $identifierType); } } __halt_compiler();----SIGNATURE:----GKpyRflNF7C2RmwSLtbGPZCDwWmj+fgII4jDXqYq79S2KDkohZcAF9QxIMYR0w/7cKJ0qUy6nWKc3VEVGt3YRwPDrE+xQaiWATNQODVNkF1TLWFHeRcODA77Ng7ZsdIokaXPH++QSac72LBRsALjAY6p+RqKl1TwLBvLfzafVZNkx9rLsCW/VpJYZqjFisyf48yXworf+pKj96CpKmanphP8AP7hJZQ3QTTT+uqWOEecWjQ3kZUUOSLCQsAJMF4JYl7Bd6rRTHQuyxpH65Y4ARr6i8tJJD3Jp5ONHuF718swPzZ5/fGE/D4ooTZB/z77R6Dj6+EQXhAuWzSjS80bUXf4rD+v6GOvX3mE9hT7k3+mVeS+mgjJVvykrtcXXNfOcORjSqKXqXnnWLTw0mF3k468HRXnhM8Ga3eJEbAtdCD22FpSV7cGVa8OPE5B7AohO8egECWS98FIIUmo4fHL9BHsc+mexFku7mkVEo5FBFmAF+c2RLLyukJoY+p/DA/x53gkGpfpN0Nj8PwmhyUepIdb9NLU/l0K5aTC1JPjZKSp8Y5cC11zjxc1XcubTdArcdQ5+UYfLqWYlvyBOf7dVxjvsd73y2qGJYXWlZDki5tT7UBUocDOzwBu+teHrCZauB4cSG8rmWz9OzedFsqrRgXKfcXS7BnnaCFkNHanaUc=----ATTACHMENT:----NTk3NTgyNDI4MjQxNTUzMyAzNjg5NTE1OTUxMTgxMDM0IDU0MzMwMzczNjgxNjM3MQ==