Skip to content

Commit c0e6f0e

Browse files
calebdwondrejmirtes
authored andcommitted
fix: place UniversalObjectCratesClassReflectionExtension last
This moves the UniversalObjectCratesClassReflectionExtension to the very end of the extensions to give other extensions a chance to override.
1 parent e3f1afe commit c0e6f0e

File tree

4 files changed

+30
-5
lines changed

4 files changed

+30
-5
lines changed

conf/services.neon

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ services:
6868
-
6969
class: PHPStan\Reflection\Annotations\AnnotationsPropertiesClassReflectionExtension
7070

71+
-
72+
class: PHPStan\Reflection\Php\UniversalObjectCratesClassReflectionExtension
73+
arguments:
74+
classes: %universalObjectCratesClasses%
75+
7176
-
7277
class: PHPStan\Reflection\Mixin\MixinMethodsClassReflectionExtension
7378
arguments:

src/DependencyInjection/Reflection/LazyClassReflectionExtensionRegistryProvider.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use PHPStan\Reflection\Mixin\MixinPropertiesClassReflectionExtension;
1313
use PHPStan\Reflection\Php\PhpClassReflectionExtension;
1414
use PHPStan\Reflection\Php\Soap\SoapClientMethodsClassReflectionExtension;
15+
use PHPStan\Reflection\Php\UniversalObjectCratesClassReflectionExtension;
1516
use PHPStan\Reflection\RequireExtension\RequireExtendsMethodsClassReflectionExtension;
1617
use PHPStan\Reflection\RequireExtension\RequireExtendsPropertiesClassReflectionExtension;
1718
use function array_merge;
@@ -36,9 +37,10 @@ public function getRegistry(): ClassReflectionExtensionRegistry
3637
$mixinMethodsClassReflectionExtension = $this->container->getByType(MixinMethodsClassReflectionExtension::class);
3738
$mixinPropertiesClassReflectionExtension = $this->container->getByType(MixinPropertiesClassReflectionExtension::class);
3839
$soapClientMethodsClassReflectionExtension = $this->container->getByType(SoapClientMethodsClassReflectionExtension::class);
40+
$universalObjectCratesClassReflectionExtension = $this->container->getByType(UniversalObjectCratesClassReflectionExtension::class);
3941

4042
$this->registry = new ClassReflectionExtensionRegistry(
41-
array_merge([$phpClassReflectionExtension], $this->container->getServicesByTag(BrokerFactory::PROPERTIES_CLASS_REFLECTION_EXTENSION_TAG), [$annotationsPropertiesClassReflectionExtension, $mixinPropertiesClassReflectionExtension]),
43+
array_merge([$phpClassReflectionExtension], $this->container->getServicesByTag(BrokerFactory::PROPERTIES_CLASS_REFLECTION_EXTENSION_TAG), [$annotationsPropertiesClassReflectionExtension, $mixinPropertiesClassReflectionExtension, $universalObjectCratesClassReflectionExtension]),
4244
array_merge([$phpClassReflectionExtension], $this->container->getServicesByTag(BrokerFactory::METHODS_CLASS_REFLECTION_EXTENSION_TAG), [$annotationsMethodsClassReflectionExtension, $mixinMethodsClassReflectionExtension, $soapClientMethodsClassReflectionExtension]),
4345
$this->container->getServicesByTag(BrokerFactory::ALLOWED_SUB_TYPES_CLASS_REFLECTION_EXTENSION_TAG),
4446
$this->container->getByType(RequireExtendsPropertiesClassReflectionExtension::class),

src/Reflection/Php/UniversalObjectCratesClassReflectionExtension.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@
22

33
namespace PHPStan\Reflection\Php;
44

5-
use PHPStan\DependencyInjection\AutowiredParameter;
6-
use PHPStan\DependencyInjection\AutowiredService;
75
use PHPStan\Reflection\Annotations\AnnotationsPropertiesClassReflectionExtension;
86
use PHPStan\Reflection\ClassReflection;
97
use PHPStan\Reflection\PropertiesClassReflectionExtension;
108
use PHPStan\Reflection\PropertyReflection;
119
use PHPStan\Reflection\ReflectionProvider;
1210
use PHPStan\Type\MixedType;
1311

14-
#[AutowiredService]
1512
final class UniversalObjectCratesClassReflectionExtension
1613
implements PropertiesClassReflectionExtension
1714
{
@@ -21,7 +18,6 @@ final class UniversalObjectCratesClassReflectionExtension
2118
*/
2219
public function __construct(
2320
private ReflectionProvider $reflectionProvider,
24-
#[AutowiredParameter(ref: '%universalObjectCratesClasses%')]
2521
private array $classes,
2622
private AnnotationsPropertiesClassReflectionExtension $annotationClassReflection,
2723
)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Bug13342;
4+
5+
use stdClass;
6+
use function PHPStan\Testing\assertType;
7+
8+
class Mixin { public bool $test = true; }
9+
10+
/** @mixin Mixin */
11+
#[\AllowDynamicProperties]
12+
class TestNormal {}
13+
14+
/** @mixin Mixin */
15+
#[\AllowDynamicProperties]
16+
class TestUniversalObjectCrate extends stdClass {}
17+
18+
function test(TestNormal $normal, TestUniversalObjectCrate $crate): void
19+
{
20+
assertType('bool', $normal->test);
21+
assertType('bool', $crate->test);
22+
}

0 commit comments

Comments
 (0)