From 5371408babdacb17ccbbe89b4c74281dcb4825c1 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 20 Mar 2023 03:23:49 +0700 Subject: [PATCH] [Container] Add RectorConfig::containerCacheDirectory() (#3490) * [Container] Add RectorConfig::containerCacheDirectory() * final touch: future comment * final touch: clean up * final touch: clean up * final touch: clean up * final touch: clean up * final touch: clean up --- config/config.php | 1 + packages/Config/RectorConfig.php | 11 +++++++++++ .../DependencyInjection/PHPStanServicesFactory.php | 6 +++++- src/Configuration/Option.php | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/config/config.php b/config/config.php index e9867c1b7cc..02c8ab651f1 100644 --- a/config/config.php +++ b/config/config.php @@ -72,6 +72,7 @@ $rectorConfig->nestedChainMethodCallLimit(120); $rectorConfig->cacheDirectory(sys_get_temp_dir() . '/rector_cached_files'); + $rectorConfig->containerCacheDirectory(sys_get_temp_dir()); $services = $rectorConfig->services(); $services->defaults() diff --git a/packages/Config/RectorConfig.php b/packages/Config/RectorConfig.php index 1c7c041c7b1..b7849c5b7c3 100644 --- a/packages/Config/RectorConfig.php +++ b/packages/Config/RectorConfig.php @@ -211,10 +211,21 @@ public function nestedChainMethodCallLimit(int $limit): void public function cacheDirectory(string $directoryPath): void { + // cache directory path is created via mkdir in CacheFactory + // when not exists, so no need to validate $directoryPath is a directory $parameters = $this->parameters(); $parameters->set(Option::CACHE_DIR, $directoryPath); } + public function containerCacheDirectory(string $directoryPath): void + { + // container cache directory path must be a directory on the first place + Assert::directory($directoryPath); + + $parameters = $this->parameters(); + $parameters->set(Option::CONTAINER_CACHE_DIRECTORY, $directoryPath); + } + /** * @param class-string $cacheClass */ diff --git a/packages/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php b/packages/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php index 3e026ea7559..2f0008bcb12 100644 --- a/packages/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php +++ b/packages/NodeTypeResolver/DependencyInjection/PHPStanServicesFactory.php @@ -50,7 +50,11 @@ public function __construct( } $containerFactory = new ContainerFactory(getcwd()); - $this->container = $containerFactory->create(sys_get_temp_dir(), $additionalConfigFiles, []); + $this->container = $containerFactory->create( + $parameterProvider->provideStringParameter(Option::CONTAINER_CACHE_DIRECTORY), + $additionalConfigFiles, + [] + ); // clear temporary files, after container is created $filesystem = new Filesystem(); diff --git a/src/Configuration/Option.php b/src/Configuration/Option.php index 4605eb9ef7b..ec785c64b77 100644 --- a/src/Configuration/Option.php +++ b/src/Configuration/Option.php @@ -218,4 +218,10 @@ final class Option * @var string */ public const REMOVE_UNUSED_IMPORTS = 'remove-unused-imports'; + + /** + * @internal Use @see \Rector\Config\RectorConfig::containerCacheDirectory() method + * @var string + */ + public const CONTAINER_CACHE_DIRECTORY = 'container-cache-directory'; }