From bc31dc1936ede00fd37d8e87f2c68ac18f8f974e Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 14 Jun 2026 13:47:57 +0200 Subject: [PATCH 1/6] Remove base64_decode workaround --- src/Analyser/NodeScopeResolver.php | 3 +-- src/Reflection/BetterReflection/BetterReflectionProvider.php | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Analyser/NodeScopeResolver.php b/src/Analyser/NodeScopeResolver.php index 9faedfce2f..b4a357a0fa 100644 --- a/src/Analyser/NodeScopeResolver.php +++ b/src/Analyser/NodeScopeResolver.php @@ -174,7 +174,6 @@ use function array_merge; use function array_slice; use function array_values; -use function base64_decode; use function count; use function in_array; use function is_array; @@ -2621,7 +2620,7 @@ private function createAstClassReflection(Node\Stmt\ClassLike $stmt, string $cla throw new ShouldNotHappenException(); } - $enumAdapter = base64_decode('UEhQU3RhblxCZXR0ZXJSZWZsZWN0aW9uXFJlZmxlY3Rpb25cQWRhcHRlclxSZWZsZWN0aW9uRW51bQ==', true); + $enumAdapter = \PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum::class; return $this->classReflectionFactory->create( $betterReflectionClass->getName(), diff --git a/src/Reflection/BetterReflection/BetterReflectionProvider.php b/src/Reflection/BetterReflection/BetterReflectionProvider.php index c7d4bac0df..931db66157 100644 --- a/src/Reflection/BetterReflection/BetterReflectionProvider.php +++ b/src/Reflection/BetterReflection/BetterReflectionProvider.php @@ -59,7 +59,6 @@ use function array_key_exists; use function array_key_first; use function array_map; -use function base64_decode; use function in_array; use function sprintf; use function strtolower; @@ -145,7 +144,7 @@ public function getClass(string $className): ClassReflection } if ($reflectionClass instanceof ReflectionEnum && PHP_VERSION_ID >= 80000) { - $enumAdapter = base64_decode('UEhQU3RhblxCZXR0ZXJSZWZsZWN0aW9uXFJlZmxlY3Rpb25cQWRhcHRlclxSZWZsZWN0aW9uRW51bQ==', true); + $enumAdapter = \PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum::class; $adaptedClass = new $enumAdapter($reflectionClass); } else { $adaptedClass = new ReflectionClass($reflectionClass); From 6787dd65a97dea986e794035299d27df44a04a68 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 14 Jun 2026 13:54:45 +0200 Subject: [PATCH 2/6] Update baseline --- build/baseline-7.4.neon | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build/baseline-7.4.neon b/build/baseline-7.4.neon index 7dee4eae34..8471dd4be6 100644 --- a/build/baseline-7.4.neon +++ b/build/baseline-7.4.neon @@ -77,3 +77,13 @@ parameters: message: "#^Class PHPStan\\\\Reflection\\\\BetterReflection\\\\SourceLocator\\\\CachingVisitor has an uninitialized property \\$constantNodes\\. Give it default value or assign it in the constructor\\.$#" count: 1 path: ../src/Reflection/BetterReflection/SourceLocator/CachingVisitor.php + + - + message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" + count: 1 + path: ../src/Reflection/BetterReflection/BetterReflectionProvider.php + + - + message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" + count: 1 + path: ../src/Analyser/NodeScopeResolver.php From 68f21d0f362140efdc9f237ecf403ca284505117 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 14 Jun 2026 13:56:32 +0200 Subject: [PATCH 3/6] Simplify --- src/Analyser/NodeScopeResolver.php | 6 +++--- .../BetterReflection/BetterReflectionProvider.php | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Analyser/NodeScopeResolver.php b/src/Analyser/NodeScopeResolver.php index b4a357a0fa..dfb9bc6908 100644 --- a/src/Analyser/NodeScopeResolver.php +++ b/src/Analyser/NodeScopeResolver.php @@ -2620,11 +2620,11 @@ private function createAstClassReflection(Node\Stmt\ClassLike $stmt, string $cla throw new ShouldNotHappenException(); } - $enumAdapter = \PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum::class; - return $this->classReflectionFactory->create( $betterReflectionClass->getName(), - $betterReflectionClass instanceof ReflectionEnum && PHP_VERSION_ID >= 80000 ? new $enumAdapter($betterReflectionClass) : new ReflectionClass($betterReflectionClass), + $betterReflectionClass instanceof ReflectionEnum && PHP_VERSION_ID >= 80000 + ? new \PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum($betterReflectionClass) + : new ReflectionClass($betterReflectionClass), null, null, null, diff --git a/src/Reflection/BetterReflection/BetterReflectionProvider.php b/src/Reflection/BetterReflection/BetterReflectionProvider.php index 931db66157..33d0ae0646 100644 --- a/src/Reflection/BetterReflection/BetterReflectionProvider.php +++ b/src/Reflection/BetterReflection/BetterReflectionProvider.php @@ -144,8 +144,7 @@ public function getClass(string $className): ClassReflection } if ($reflectionClass instanceof ReflectionEnum && PHP_VERSION_ID >= 80000) { - $enumAdapter = \PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum::class; - $adaptedClass = new $enumAdapter($reflectionClass); + $adaptedClass = new \PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum($reflectionClass); } else { $adaptedClass = new ReflectionClass($reflectionClass); } From 7277ed646b8a302c9a262e82de4e950072e3293a Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 14 Jun 2026 14:03:44 +0200 Subject: [PATCH 4/6] Fix --- build/baseline-7.4.neon | 10 ---------- build/more-enum-adapter-errors.neon | 10 ++++++++++ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/baseline-7.4.neon b/build/baseline-7.4.neon index 8471dd4be6..7dee4eae34 100644 --- a/build/baseline-7.4.neon +++ b/build/baseline-7.4.neon @@ -77,13 +77,3 @@ parameters: message: "#^Class PHPStan\\\\Reflection\\\\BetterReflection\\\\SourceLocator\\\\CachingVisitor has an uninitialized property \\$constantNodes\\. Give it default value or assign it in the constructor\\.$#" count: 1 path: ../src/Reflection/BetterReflection/SourceLocator/CachingVisitor.php - - - - message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" - count: 1 - path: ../src/Reflection/BetterReflection/BetterReflectionProvider.php - - - - message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" - count: 1 - path: ../src/Analyser/NodeScopeResolver.php diff --git a/build/more-enum-adapter-errors.neon b/build/more-enum-adapter-errors.neon index 34f9e1f598..6b37124f16 100644 --- a/build/more-enum-adapter-errors.neon +++ b/build/more-enum-adapter-errors.neon @@ -26,3 +26,13 @@ parameters: rawMessage: 'Asserted type PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum for $this->getNativeReflection() with type PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass can never happen.' count: 1 path: ../src/Reflection/ClassReflection.php + + - + message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" + count: 1 + path: ../src/Reflection/BetterReflection/BetterReflectionProvider.php + + - + message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" + count: 1 + path: ../src/Analyser/NodeScopeResolver.php From 90c01e353bc5a0217ece7a269ffee23949505772 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 14 Jun 2026 14:07:17 +0200 Subject: [PATCH 5/6] Avoid error --- build/phpstan.neon | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build/phpstan.neon b/build/phpstan.neon index 274ec02501..63ca18d75a 100644 --- a/build/phpstan.neon +++ b/build/phpstan.neon @@ -77,6 +77,10 @@ parameters: - '#^Dynamic call to static method PHPUnit\\Framework\\\S+\(\)\.$#' - '#should be contravariant with parameter \$node \(PhpParser\\Node\) of method PHPStan\\Rules\\Rule::processNode\(\)$#' - '#Variable property access on PhpParser\\Node#' + - + identifier: shipmonk.deadMethod + message: '#^Unused .*?::__construct#' # likely used in DIC + reportUnmatched: false - identifier: shipmonk.deadMethod message: '#^Unused .*?Factory::create#' # likely used in DIC From 8025d6ffef5415ce4afe2256fb201b526738beb4 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 14 Jun 2026 14:15:15 +0200 Subject: [PATCH 6/6] Fix --- build/more-enum-adapter-errors.neon | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/more-enum-adapter-errors.neon b/build/more-enum-adapter-errors.neon index 6b37124f16..0533696393 100644 --- a/build/more-enum-adapter-errors.neon +++ b/build/more-enum-adapter-errors.neon @@ -28,11 +28,11 @@ parameters: path: ../src/Reflection/ClassReflection.php - - message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" + rawMessage: 'Parameter #2 $reflection of method PHPStan\Reflection\ClassReflectionFactory::create() expects ReflectionClass, PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass|PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum given.' count: 1 path: ../src/Reflection/BetterReflection/BetterReflectionProvider.php - - message: "#^Parameter \\#9 \\$reflection of class PHPStan\\\\Reflection\\\\ClassReflection constructor expects ReflectionClass, PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionClass\\|PHPStan\\\\BetterReflection\\\\Reflection\\\\Adapter\\\\ReflectionEnum given\\.$#" + rawMessage: 'Parameter #2 $reflection of method PHPStan\Reflection\ClassReflectionFactory::create() expects ReflectionClass, PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass|PHPStan\BetterReflection\Reflection\Adapter\ReflectionEnum given.' count: 1 path: ../src/Analyser/NodeScopeResolver.php