*/ 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:----TtxO8+lbL9pSGxkgpQ4n3Q8lhtUytFiLWB+Lq8dldAk6JP/p/f7adcDJET2Ee4kbitwiXQAMFPPpYka7PkA6BE04x7troBMtggDYkZGIGxm+/kK++tn4QDHK2k5vLVsVJMh1dN2mWZEIMCM838Wgss3H4em9d3tkFH08eXOr4Ru1/cBY4WGhEgFb1P7f8TBm1Z5xWTd1Ni87RWHJo3GEtS5Xk4ExTdAaWMQ/UBzFh1UA7IXzsEqQCJAMFOsRhQA6fnv52BimLaChbphMXqAgSJ34AdDm9mdTUigRSyxeH27Kz0TcbMbvxwHuLH4QLyXD/iFtm25IUYuKKPETs2P3w00rynIzMnTN53gCwKmvkORtaXrgdgLOi7X/BBSDASX8MreWA92eF6Ac1XRQ365btC2FrC0tqfLC9t1cTaIgQTV8FPQib3bQkhbxYfyThMDykju2ydjmL+QRJuIr2R4CnyWKk69XJUvWhSRfmo83sLzHmG30Qy2nIPuInEnfps5g3t2CY6WoLRdsn0a9ARgdmDFxEW3UovmyznFkpKyEawvoKQT80icqczUqE8sz7L2dFA8ZlCZVPI2NonN+6WAikKidD7dcQ8JiB2TwMH+XaTvN//NLiEFFUMFBeMC8rDDpBNauL9PP4RlrL1JAvTTnHidiY/w12P0wIBOzqRH6Wc8=----ATTACHMENT:----NzI3OTg1MzYyNDQwMzM4NCA2NzQwODQ1MTI2MTk5MDcyIDIxMjAwNjIyNTkwODc3NjI=