|
10 | 10 | use PHPStan\Command\Output;
|
11 | 11 | use PHPStan\Dependency\ExportedNodeFetcher;
|
12 | 12 | use PHPStan\Dependency\RootExportedNode;
|
| 13 | +use PHPStan\DependencyInjection\Container; |
13 | 14 | use PHPStan\DependencyInjection\ProjectConfigHelper;
|
14 | 15 | use PHPStan\File\CouldNotReadFileException;
|
15 | 16 | use PHPStan\File\FileFinder;
|
@@ -66,6 +67,7 @@ final class ResultCacheManager
|
66 | 67 | * @param string[] $scanDirectories
|
67 | 68 | */
|
68 | 69 | public function __construct(
|
| 70 | + private Container $container, |
69 | 71 | private ExportedNodeFetcher $exportedNodeFetcher,
|
70 | 72 | private FileFinder $scanFileFinder,
|
71 | 73 | private ReflectionProvider $reflectionProvider,
|
@@ -904,6 +906,7 @@ private function getMeta(array $allAnalysedFiles, ?array $projectConfigArray): a
|
904 | 906 | return [
|
905 | 907 | 'cacheVersion' => self::CACHE_VERSION,
|
906 | 908 | 'phpstanVersion' => ComposerHelper::getPhpStanVersion(),
|
| 909 | + 'metaExtensions' => $this->getMetaFromPhpStanExtensions(), |
907 | 910 | 'phpVersion' => PHP_VERSION_ID,
|
908 | 911 | 'projectConfig' => $projectConfigArray,
|
909 | 912 | 'analysedPaths' => $this->analysedPaths,
|
@@ -1036,4 +1039,29 @@ private function getStubFiles(): array
|
1036 | 1039 | return $stubFiles;
|
1037 | 1040 | }
|
1038 | 1041 |
|
| 1042 | + /** |
| 1043 | + * @return array<string, string> |
| 1044 | + * @throws ShouldNotHappenException |
| 1045 | + */ |
| 1046 | + private function getMetaFromPhpStanExtensions(): array |
| 1047 | + { |
| 1048 | + $meta = []; |
| 1049 | + |
| 1050 | + /** @var ResultCacheMetaExtension $extension */ |
| 1051 | + foreach ($this->container->getServicesByTag(ResultCacheMetaExtension::EXTENSION_TAG) as $extension) { |
| 1052 | + if (array_key_exists($extension->getKey(), $meta)) { |
| 1053 | + throw new ShouldNotHappenException(sprintf( |
| 1054 | + 'Duplicate ResultCacheMetaExtension with key "%s" found.', |
| 1055 | + $extension->getKey(), |
| 1056 | + )); |
| 1057 | + } |
| 1058 | + |
| 1059 | + $meta[$extension->getKey()] = $extension->getHash(); |
| 1060 | + } |
| 1061 | + |
| 1062 | + ksort($meta); |
| 1063 | + |
| 1064 | + return $meta; |
| 1065 | + } |
| 1066 | + |
1039 | 1067 | }
|
0 commit comments