From d636aec3e110128d7195bd5b11d133f4fad872f5 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 24 Aug 2025 01:55:49 +0700 Subject: [PATCH 1/2] [CodeQuality] Skip @final doc with public property on ConvertStaticToSelfRector --- .../non_final_class_final_members.php.inc | 16 ++++++++-------- .../Fixture/skip_final_doc_property.php.inc | 18 ++++++++++++++++++ .../Class_/ConvertStaticToSelfRector.php | 6 +++--- 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/skip_final_doc_property.php.inc diff --git a/rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/non_final_class_final_members.php.inc b/rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/non_final_class_final_members.php.inc index c69bad6bdf6..ceb6d92b41b 100644 --- a/rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/non_final_class_final_members.php.inc +++ b/rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/non_final_class_final_members.php.inc @@ -6,16 +6,16 @@ class NonFinalClassFinalMembers { final public const BAR = 1; - final public static string $privateProperty = 'test'; + final public static string $publicProperty = 'test'; - final public static function privateMethod(): void + final public static function publicMethod(): void { } public function run() { - static::$privateProperty; - static::privateMethod(); + static::$publicProperty; + static::publicMethod(); static::BAR; } } @@ -30,16 +30,16 @@ class NonFinalClassFinalMembers { final public const BAR = 1; - final public static string $privateProperty = 'test'; + final public static string $publicProperty = 'test'; - final public static function privateMethod(): void + final public static function publicMethod(): void { } public function run() { - self::$privateProperty; - self::privateMethod(); + self::$publicProperty; + self::publicMethod(); self::BAR; } } diff --git a/rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/skip_final_doc_property.php.inc b/rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/skip_final_doc_property.php.inc new file mode 100644 index 00000000000..a6c3e67afac --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Class_/ConvertStaticToSelfRector/Fixture/skip_final_doc_property.php.inc @@ -0,0 +1,18 @@ + diff --git a/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php b/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php index 01af812c262..763e15a3b25 100644 --- a/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php +++ b/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php @@ -4,8 +4,8 @@ namespace Rector\CodeQuality\Rector\Class_; +use PHPStan\Reflection\RealClassClassConstantReflection; use PHPStan\Analyser\Scope; -use PHPStan\Reflection\ClassConstantReflection; use PhpParser\Node; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\StaticCall; @@ -163,9 +163,9 @@ private function shouldSkip( } if (! $isFinal) { - $memberIsFinal = $reflection instanceof ClassConstantReflection + $memberIsFinal = $reflection instanceof RealClassClassConstantReflection ? $reflection->isFinal() - : $reflection->isFinal()->yes(); + : $reflection->isFinalByKeyword()->yes(); // Final native members can be safely converted if ($memberIsFinal) { From 33b1a81e81599fd02d059d73563aad6d576b8885 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 24 Aug 2025 02:04:39 +0700 Subject: [PATCH 2/2] Fix phpstan --- rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php b/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php index 763e15a3b25..7d256c9b881 100644 --- a/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php +++ b/rules/CodeQuality/Rector/Class_/ConvertStaticToSelfRector.php @@ -4,8 +4,8 @@ namespace Rector\CodeQuality\Rector\Class_; -use PHPStan\Reflection\RealClassClassConstantReflection; use PHPStan\Analyser\Scope; +use PHPStan\Reflection\ClassConstantReflection; use PhpParser\Node; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\StaticCall; @@ -163,7 +163,7 @@ private function shouldSkip( } if (! $isFinal) { - $memberIsFinal = $reflection instanceof RealClassClassConstantReflection + $memberIsFinal = $reflection instanceof ClassConstantReflection ? $reflection->isFinal() : $reflection->isFinalByKeyword()->yes();