|  | 
| 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