diff --git a/conf/services.neon b/conf/services.neon index c754bd59d5..0e1382d4b3 100644 --- a/conf/services.neon +++ b/conf/services.neon @@ -68,6 +68,11 @@ services: - class: PHPStan\Reflection\Annotations\AnnotationsPropertiesClassReflectionExtension + - + class: PHPStan\Reflection\Php\UniversalObjectCratesClassReflectionExtension + arguments: + classes: %universalObjectCratesClasses% + - class: PHPStan\Reflection\Mixin\MixinMethodsClassReflectionExtension arguments: diff --git a/src/DependencyInjection/Reflection/LazyClassReflectionExtensionRegistryProvider.php b/src/DependencyInjection/Reflection/LazyClassReflectionExtensionRegistryProvider.php index 124a2eaa3d..a292eba2ab 100644 --- a/src/DependencyInjection/Reflection/LazyClassReflectionExtensionRegistryProvider.php +++ b/src/DependencyInjection/Reflection/LazyClassReflectionExtensionRegistryProvider.php @@ -12,6 +12,7 @@ use PHPStan\Reflection\Mixin\MixinPropertiesClassReflectionExtension; use PHPStan\Reflection\Php\PhpClassReflectionExtension; use PHPStan\Reflection\Php\Soap\SoapClientMethodsClassReflectionExtension; +use PHPStan\Reflection\Php\UniversalObjectCratesClassReflectionExtension; use PHPStan\Reflection\RequireExtension\RequireExtendsMethodsClassReflectionExtension; use PHPStan\Reflection\RequireExtension\RequireExtendsPropertiesClassReflectionExtension; use function array_merge; @@ -36,9 +37,10 @@ public function getRegistry(): ClassReflectionExtensionRegistry $mixinMethodsClassReflectionExtension = $this->container->getByType(MixinMethodsClassReflectionExtension::class); $mixinPropertiesClassReflectionExtension = $this->container->getByType(MixinPropertiesClassReflectionExtension::class); $soapClientMethodsClassReflectionExtension = $this->container->getByType(SoapClientMethodsClassReflectionExtension::class); + $universalObjectCratesClassReflectionExtension = $this->container->getByType(UniversalObjectCratesClassReflectionExtension::class); $this->registry = new ClassReflectionExtensionRegistry( - array_merge([$phpClassReflectionExtension], $this->container->getServicesByTag(BrokerFactory::PROPERTIES_CLASS_REFLECTION_EXTENSION_TAG), [$annotationsPropertiesClassReflectionExtension, $mixinPropertiesClassReflectionExtension]), + array_merge([$phpClassReflectionExtension], $this->container->getServicesByTag(BrokerFactory::PROPERTIES_CLASS_REFLECTION_EXTENSION_TAG), [$annotationsPropertiesClassReflectionExtension, $mixinPropertiesClassReflectionExtension, $universalObjectCratesClassReflectionExtension]), array_merge([$phpClassReflectionExtension], $this->container->getServicesByTag(BrokerFactory::METHODS_CLASS_REFLECTION_EXTENSION_TAG), [$annotationsMethodsClassReflectionExtension, $mixinMethodsClassReflectionExtension, $soapClientMethodsClassReflectionExtension]), $this->container->getServicesByTag(BrokerFactory::ALLOWED_SUB_TYPES_CLASS_REFLECTION_EXTENSION_TAG), $this->container->getByType(RequireExtendsPropertiesClassReflectionExtension::class), diff --git a/src/Reflection/Php/UniversalObjectCratesClassReflectionExtension.php b/src/Reflection/Php/UniversalObjectCratesClassReflectionExtension.php index 0f9822ddb1..0cd79eb232 100644 --- a/src/Reflection/Php/UniversalObjectCratesClassReflectionExtension.php +++ b/src/Reflection/Php/UniversalObjectCratesClassReflectionExtension.php @@ -2,8 +2,6 @@ namespace PHPStan\Reflection\Php; -use PHPStan\DependencyInjection\AutowiredParameter; -use PHPStan\DependencyInjection\AutowiredService; use PHPStan\Reflection\Annotations\AnnotationsPropertiesClassReflectionExtension; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\PropertiesClassReflectionExtension; @@ -11,7 +9,6 @@ use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\MixedType; -#[AutowiredService] final class UniversalObjectCratesClassReflectionExtension implements PropertiesClassReflectionExtension { @@ -21,7 +18,6 @@ final class UniversalObjectCratesClassReflectionExtension */ public function __construct( private ReflectionProvider $reflectionProvider, - #[AutowiredParameter(ref: '%universalObjectCratesClasses%')] private array $classes, private AnnotationsPropertiesClassReflectionExtension $annotationClassReflection, ) diff --git a/tests/PHPStan/Analyser/nsrt/bug-13342.php b/tests/PHPStan/Analyser/nsrt/bug-13342.php new file mode 100644 index 0000000000..de6d80dd61 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-13342.php @@ -0,0 +1,22 @@ +test); + assertType('bool', $crate->test); +}