From f3a3feb8b3bb58bce726296db328908dd5f1636c Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 24 Aug 2026 11:56:36 +0100 Subject: [PATCH 1/2] [DI] Register PHPStan PhpVersionFactory as public service so 3rd-party rules can autowire it The entropy container autowires by reflection and throws on non-class scalar constructor params (?int $versionId, ?string $composerPhpVersion) of PHPStan\Php\PhpVersionFactory, which illuminate/container previously resolved as null. 3rd-party rules such as drupal-rector's FunctionalTestDefaultThemePropertyRector inject this service directly and broke with 'Cannot resolve parameter "versionId"'. Serve it from the PHPStan container like ReflectionProvider. --- .../LazyContainerFactory.php | 2 ++ .../PhpVersionFactoryAutowireTest.php | 30 +++++++++++++++++++ .../Source/HasPhpVersionFactoryDependency.php | 24 +++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 tests/DependencyInjection/PhpVersionFactoryAutowireTest.php create mode 100644 tests/DependencyInjection/Source/HasPhpVersionFactoryDependency.php diff --git a/src/DependencyInjection/LazyContainerFactory.php b/src/DependencyInjection/LazyContainerFactory.php index 695e9c9a312..106d8159204 100644 --- a/src/DependencyInjection/LazyContainerFactory.php +++ b/src/DependencyInjection/LazyContainerFactory.php @@ -10,6 +10,7 @@ use PHPStan\Analyser\NodeScopeResolver; use PHPStan\Analyser\ScopeFactory; use PHPStan\Parser\Parser; +use PHPStan\Php\PhpVersionFactory; use PHPStan\PhpDoc\TypeNodeResolver; use PHPStan\PhpDocParser\ParserConfig; use PHPStan\Reflection\ReflectionProvider; @@ -311,6 +312,7 @@ final class LazyContainerFactory TypeNodeResolver::class, NodeScopeResolver::class, ReflectionProvider::class, + PhpVersionFactory::class, ]; /** diff --git a/tests/DependencyInjection/PhpVersionFactoryAutowireTest.php b/tests/DependencyInjection/PhpVersionFactoryAutowireTest.php new file mode 100644 index 00000000000..d65e4e0743c --- /dev/null +++ b/tests/DependencyInjection/PhpVersionFactoryAutowireTest.php @@ -0,0 +1,30 @@ +make(PhpVersionFactory::class); + $this->assertInstanceOf(PhpVersionFactory::class, $phpVersionFactory); + } + + public function testResolvedAsConstructorDependency(): void + { + $service = $this->make(HasPhpVersionFactoryDependency::class); + $this->assertInstanceOf(PhpVersionFactory::class, $service->getPhpVersionFactory()); + } +} diff --git a/tests/DependencyInjection/Source/HasPhpVersionFactoryDependency.php b/tests/DependencyInjection/Source/HasPhpVersionFactoryDependency.php new file mode 100644 index 00000000000..644b47cbb01 --- /dev/null +++ b/tests/DependencyInjection/Source/HasPhpVersionFactoryDependency.php @@ -0,0 +1,24 @@ +phpVersionFactory; + } +} From b661fefd697ddb482b9cc33a6d3c1a6eb9e0f258 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 24 Aug 2026 10:58:28 +0000 Subject: [PATCH 2/2] [ci-review] Rector Rectify --- tests/DependencyInjection/PhpVersionFactoryAutowireTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/DependencyInjection/PhpVersionFactoryAutowireTest.php b/tests/DependencyInjection/PhpVersionFactoryAutowireTest.php index d65e4e0743c..0f48209be8e 100644 --- a/tests/DependencyInjection/PhpVersionFactoryAutowireTest.php +++ b/tests/DependencyInjection/PhpVersionFactoryAutowireTest.php @@ -24,7 +24,7 @@ public function testResolvedDirectly(): void public function testResolvedAsConstructorDependency(): void { - $service = $this->make(HasPhpVersionFactoryDependency::class); - $this->assertInstanceOf(PhpVersionFactory::class, $service->getPhpVersionFactory()); + $hasPhpVersionFactoryDependency = $this->make(HasPhpVersionFactoryDependency::class); + $this->assertInstanceOf(PhpVersionFactory::class, $hasPhpVersionFactoryDependency->getPhpVersionFactory()); } }