Skip to content

Commit dc1688e

Browse files
jiripudilondrejmirtes
authored andcommitted
Hide fixed invariance composition behind a bleeding-edge toggle
1 parent 58baae6 commit dc1688e

File tree

5 files changed

+242
-10
lines changed

5 files changed

+242
-10
lines changed

conf/bleedingEdge.neon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ parameters:
2424
nullContextForVoidReturningFunctions: true
2525
unescapeStrings: true
2626
duplicateStubs: true
27+
invarianceComposition: true

conf/config.neon

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ parameters:
5454
nullContextForVoidReturningFunctions: false
5555
unescapeStrings: false
5656
duplicateStubs: false
57+
invarianceComposition: false
5758
fileExtensions:
5859
- php
5960
checkAdvancedIsset: false
@@ -272,6 +273,7 @@ parametersSchema:
272273
nullContextForVoidReturningFunctions: bool()
273274
unescapeStrings: bool()
274275
duplicateStubs: bool()
276+
invarianceComposition: bool()
275277
])
276278
fileExtensions: listOf(string())
277279
checkAdvancedIsset: bool()

src/DependencyInjection/ContainerFactory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use PHPStan\Reflection\ReflectionProvider;
2222
use PHPStan\Reflection\ReflectionProviderStaticAccessor;
2323
use PHPStan\Type\Accessory\AccessoryArrayListType;
24+
use PHPStan\Type\Generic\TemplateTypeVariance;
2425
use Symfony\Component\Finder\Finder;
2526
use function array_diff_key;
2627
use function array_map;
@@ -174,6 +175,7 @@ public static function postInitializeContainer(Container $container): void
174175

175176
BleedingEdgeToggle::setBleedingEdge($container->getParameter('featureToggles')['bleedingEdge']);
176177
AccessoryArrayListType::setListTypeEnabled($container->getParameter('featureToggles')['listType']);
178+
TemplateTypeVariance::setInvarianceCompositionEnabled($container->getParameter('featureToggles')['invarianceComposition']);
177179
}
178180

179181
public function clearOldContainers(string $tempDirectory): void

src/Type/Generic/TemplateTypeVariance.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class TemplateTypeVariance
2121
/** @var self[] */
2222
private static array $registry;
2323

24+
private static bool $invarianceCompositionEnabled = false;
25+
2426
private function __construct(private int $value)
2527
{
2628
}
@@ -93,7 +95,7 @@ public function compose(self $other): self
9395
return self::createInvariant();
9496
}
9597

96-
if ($this->invariant()) {
98+
if (self::$invarianceCompositionEnabled && $this->invariant()) {
9799
return self::createInvariant();
98100
}
99101

@@ -177,4 +179,9 @@ public static function __set_state(array $properties): self
177179
return new self($properties['value']);
178180
}
179181

182+
public static function setInvarianceCompositionEnabled(bool $enabled): void
183+
{
184+
self::$invarianceCompositionEnabled = $enabled;
185+
}
186+
180187
}

0 commit comments

Comments
 (0)