@@ -98,25 +98,29 @@ public function __construct(
9898 public function restore (array $ allAnalysedFiles , bool $ debug , bool $ onlyFiles , ?array $ projectConfigArray , Output $ output ): ResultCache
9999 {
100100 $ startTime = microtime (true );
101+ $ currentFileHashes = [];
102+ foreach ($ allAnalysedFiles as $ analysedFile ) {
103+ $ currentFileHashes [$ analysedFile ] = $ this ->getFileHash ($ analysedFile );
104+ }
101105 if ($ debug ) {
102106 if ($ output ->isVeryVerbose ()) {
103107 $ output ->writeLineFormatted ('Result cache not used because of debug mode. ' );
104108 }
105- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
109+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
106110 }
107111 if ($ onlyFiles ) {
108112 if ($ output ->isVeryVerbose ()) {
109113 $ output ->writeLineFormatted ('Result cache not used because only files were passed as analysed paths. ' );
110114 }
111- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
115+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
112116 }
113117
114118 $ cacheFilePath = $ this ->cacheFilePath ;
115119 if (!is_file ($ cacheFilePath )) {
116120 if ($ output ->isVeryVerbose ()) {
117121 $ output ->writeLineFormatted ('Result cache not used because the cache file does not exist. ' );
118122 }
119- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
123+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
120124 }
121125
122126 try {
@@ -128,7 +132,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
128132
129133 @unlink ($ cacheFilePath );
130134
131- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
135+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
132136 }
133137
134138 if (!is_array ($ data )) {
@@ -137,7 +141,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
137141 $ output ->writeLineFormatted ('Result cache not used because the cache file is corrupted. ' );
138142 }
139143
140- return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], []);
144+ return new ResultCache ($ allAnalysedFiles , true , time (), $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray ), [], [], [], [], [], [], [], [], $ currentFileHashes );
141145 }
142146
143147 $ meta = $ this ->getMeta ($ allAnalysedFiles , $ projectConfigArray );
@@ -146,7 +150,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
146150 $ diffs = $ this ->getMetaKeyDifferences ($ data ['meta ' ], $ meta );
147151 $ output ->writeLineFormatted ('Result cache not used because the metadata do not match: ' . implode (', ' , $ diffs ));
148152 }
149- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
153+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
150154 }
151155
152156 $ daysOldForSkip = $ this ->skipResultCacheIfOlderThanDays ;
@@ -155,7 +159,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
155159 $ output ->writeLineFormatted (sprintf ("Result cache not used because it's more than %d days since last full analysis. " , $ daysOldForSkip ));
156160 }
157161 // run full analysis if the result cache is older than X days
158- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
162+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
159163 }
160164
161165 /**
@@ -170,7 +174,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
170174 if ($ output ->isVeryVerbose ()) {
171175 $ output ->writeLineFormatted (sprintf ('Result cache not used because extension file %s was not found. ' , $ extensionFile ));
172176 }
173- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
177+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
174178 }
175179
176180 if ($ this ->getFileHash ($ extensionFile ) === $ fileHash ) {
@@ -181,7 +185,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
181185 $ output ->writeLineFormatted (sprintf ('Result cache not used because extension file %s hash does not match. ' , $ extensionFile ));
182186 }
183187
184- return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], []);
188+ return new ResultCache ($ allAnalysedFiles , true , time (), $ meta , [], [], [], [], [], [], [], [], $ currentFileHashes );
185189 }
186190
187191 $ invertedDependencies = $ data ['dependencies ' ];
@@ -242,7 +246,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
242246 $ cachedFileHash = $ analysedFileData ['fileHash ' ];
243247 $ dependentFiles = $ analysedFileData ['dependentFiles ' ];
244248 $ invertedDependenciesToReturn [$ analysedFile ] = $ dependentFiles ;
245- $ currentFileHash = $ this -> getFileHash ( $ analysedFile) ;
249+ $ currentFileHash = $ currentFileHashes [ $ analysedFile] ;
246250
247251 if ($ cachedFileHash === $ currentFileHash ) {
248252 continue ;
@@ -309,7 +313,7 @@ public function restore(array $allAnalysedFiles, bool $debug, bool $onlyFiles, ?
309313 ));
310314 }
311315
312- return new ResultCache ($ filesToAnalyse , false , $ data ['lastFullAnalysisTime ' ], $ meta , $ filteredErrors , $ filteredLocallyIgnoredErrors , $ filteredLinesToIgnore , $ filteredUnmatchedLineIgnores , $ filteredCollectedData , $ invertedDependenciesToReturn , $ filteredExportedNodes , $ data ['projectExtensionFiles ' ]);
316+ return new ResultCache ($ filesToAnalyse , false , $ data ['lastFullAnalysisTime ' ], $ meta , $ filteredErrors , $ filteredLocallyIgnoredErrors , $ filteredLinesToIgnore , $ filteredUnmatchedLineIgnores , $ filteredCollectedData , $ invertedDependenciesToReturn , $ filteredExportedNodes , $ data ['projectExtensionFiles ' ], $ currentFileHashes );
313317 }
314318
315319 /**
@@ -450,7 +454,7 @@ public function process(AnalyserResult $analyserResult, ResultCache $resultCache
450454 }
451455 }
452456
453- $ this ->save ($ resultCache ->getLastFullAnalysisTime (), $ errorsByFile , $ locallyIgnoredErrorsByFile , $ linesToIgnore , $ unmatchedLineIgnores , $ collectedDataByFile , $ dependencies , $ exportedNodes , $ projectExtensionFiles , $ meta );
457+ $ this ->save ($ resultCache ->getLastFullAnalysisTime (), $ errorsByFile , $ locallyIgnoredErrorsByFile , $ linesToIgnore , $ unmatchedLineIgnores , $ collectedDataByFile , $ dependencies , $ exportedNodes , $ projectExtensionFiles , $ resultCache -> getCurrentFileHashes (), $ meta );
454458
455459 if ($ output ->isVeryVerbose ()) {
456460 $ output ->writeLineFormatted ('Result cache is saved. ' );
@@ -700,6 +704,7 @@ private function mergeUnmatchedLineIgnores(ResultCache $resultCache, array $fres
700704 * @param array<string, array<string>> $dependencies
701705 * @param array<string, array<RootExportedNode>> $exportedNodes
702706 * @param array<string, array{string, bool, string}> $projectExtensionFiles
707+ * @param array<string, string> $currentFileHashes
703708 * @param mixed[] $meta
704709 */
705710 private function save (
@@ -712,6 +717,7 @@ private function save(
712717 array $ dependencies ,
713718 array $ exportedNodes ,
714719 array $ projectExtensionFiles ,
720+ array $ currentFileHashes ,
715721 array $ meta ,
716722 ): void
717723 {
@@ -721,7 +727,7 @@ private function save(
721727 foreach ($ fileDependencies as $ fileDep ) {
722728 if (!array_key_exists ($ fileDep , $ invertedDependencies )) {
723729 $ invertedDependencies [$ fileDep ] = [
724- 'fileHash ' => $ this ->getFileHash ($ fileDep ),
730+ 'fileHash ' => $ currentFileHashes [ $ fileDep ] ?? $ this ->getFileHash ($ fileDep ),
725731 'dependentFiles ' => [],
726732 ];
727733 unset($ filesNoOneIsDependingOn [$ fileDep ]);
@@ -740,7 +746,7 @@ private function save(
740746 }
741747
742748 $ invertedDependencies [$ file ] = [
743- 'fileHash ' => $ this ->getFileHash ($ file ),
749+ 'fileHash ' => $ currentFileHashes [ $ file ] ?? $ this ->getFileHash ($ file ),
744750 'dependentFiles ' => [],
745751 ];
746752 }
0 commit comments