Skip to content

Commit b6bb9a9

Browse files
committed
Introduce invalidateResultCacheOnDiDefinitionChange config option
1 parent 5f8002d commit b6bb9a9

4 files changed

+35
-2
lines changed

extension.neon

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ parameters:
88
containerXmlPath: null
99
constantHassers: true
1010
consoleApplicationLoader: null
11+
invalidateResultCacheOnDiDefinitionChange: true
1112
stubFiles:
1213
- stubs/Psr/Cache/CacheException.stub
1314
- stubs/Psr/Cache/CacheItemInterface.stub
@@ -98,6 +99,7 @@ parametersSchema:
9899
containerXmlPath: schema(string(), nullable())
99100
constantHassers: bool()
100101
consoleApplicationLoader: schema(string(), nullable())
102+
?invalidateResultCacheOnDiDefinitionChange: bool()
101103
])
102104

103105
services:

src/Symfony/Configuration.php

+5
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,9 @@ public function getConsoleApplicationLoader(): ?string
3131
return $this->parameters['consoleApplicationLoader'];
3232
}
3333

34+
public function shouldInvalidateResultCacheOnDiDefinitionChange(): bool
35+
{
36+
return $this->parameters['invalidateResultCacheOnDiDefinitionChange'] ?? true;
37+
}
38+
3439
}

src/Symfony/SymfonyContainerResultCacheMetaExtension.php

+12-1
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,17 @@ final class SymfonyContainerResultCacheMetaExtension implements ResultCacheMetaE
1515

1616
private ServiceMap $serviceMap;
1717

18-
public function __construct(ParameterMap $parameterMap, ServiceMap $serviceMap)
18+
private bool $invalidateResultCacheOnDiDefinitionChange;
19+
20+
public function __construct(
21+
ParameterMap $parameterMap,
22+
ServiceMap $serviceMap,
23+
Configuration $configuration
24+
)
1925
{
2026
$this->parameterMap = $parameterMap;
2127
$this->serviceMap = $serviceMap;
28+
$this->invalidateResultCacheOnDiDefinitionChange = $configuration->shouldInvalidateResultCacheOnDiDefinitionChange();
2229
}
2330

2431
public function getKey(): string
@@ -28,6 +35,10 @@ public function getKey(): string
2835

2936
public function getHash(): string
3037
{
38+
if (!$this->invalidateResultCacheOnDiDefinitionChange) {
39+
return 'disabled';
40+
}
41+
3142
return hash('sha256', serialize([
3243
'parameters' => array_map(
3344
static fn (ParameterDefinition $parameter): array => [

tests/Symfony/SymfonyContainerResultCacheMetaExtensionTest.php

+16-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use function file_put_contents;
88
use function sys_get_temp_dir;
99
use function tempnam;
10+
use function var_export;
1011

1112
final class SymfonyContainerResultCacheMetaExtensionTest extends PHPStanTestCase
1213
{
@@ -27,6 +28,14 @@ public static function getAdditionalConfigFiles(): array
2728
];
2829
}
2930

31+
public function testInvalidatingResultCacheCanBeDisabled(): void
32+
{
33+
self::assertSame('disabled', $this->calculateSymfonyContainerHash(
34+
'<container><services></services></container>',
35+
false,
36+
));
37+
}
38+
3039
/**
3140
* @param list<string> $sameHashXmlContents
3241
*
@@ -361,24 +370,30 @@ public static function provideContainerHashIsCalculatedCorrectlyCases(): iterabl
361370
];
362371
}
363372

364-
private function calculateSymfonyContainerHash(string $xmlContent): string
373+
private function calculateSymfonyContainerHash(
374+
string $xmlContent,
375+
bool $invalidateResultCacheOnDiDefinitionChange = true
376+
): string
365377
{
366378
$symfonyContainerXmlPath = tempnam(sys_get_temp_dir(), 'phpstan-meta-extension-test-container-xml-');
367379
self::$configFilePath = tempnam(sys_get_temp_dir(), 'phpstan-meta-extension-test-config-') . '.neon';
380+
$invalidateResultCacheOnDiDefinitionChange = var_export($invalidateResultCacheOnDiDefinitionChange, true);
368381

369382
file_put_contents(
370383
self::$configFilePath,
371384
<<<NEON
372385
parameters:
373386
symfony:
374387
containerXmlPath: '$symfonyContainerXmlPath'
388+
invalidateResultCacheOnDiDefinitionChange: $invalidateResultCacheOnDiDefinitionChange
375389
NEON,
376390
);
377391
file_put_contents($symfonyContainerXmlPath, $xmlContent);
378392

379393
$metaExtension = new SymfonyContainerResultCacheMetaExtension(
380394
self::getContainer()->getByType(ParameterMap::class),
381395
self::getContainer()->getByType(ServiceMap::class),
396+
self::getContainer()->getByType(Configuration::class),
382397
);
383398

384399
return $metaExtension->getHash();

0 commit comments

Comments
 (0)