private function runCache(IncrementalCache $cache, CoverageData $coverage, Collector $collector, $mutableFile, $index) { static $fileHits = []; static $cacheHits = []; if (in_array($mutableFile, $cacheHits)) { return true; } elseif (in_array($mutableFile, $fileHits)) { return false; } $fileHits[] = $mutableFile; $testFilesHaveChanged = $cache->hasModifiedTestFiles($coverage, $mutableFile); $sourceFilesHaveChanged = $cache->hasModifiedSourceFiles($mutableFile); if ($cache->hasResultsFor($mutableFile) && $testFilesHaveChanged === false && $sourceFilesHaveChanged === false) { $resultSet = $cache->getResultsFor($mutableFile); foreach ($resultSet as $result) { if ($result['isShadow'] === false) { $resultObject = unserialize($result['result']); $collector->collect($resultObject); $this->onMutantDone($resultObject, $index); } else { $mutantObject = unserialize($result['result']); $collector->collectShadow($mutantObject); $this->onShadowMutant($index); } } $cacheHits[] = $mutableFile; return true; } return false; }