From 944e7fefabbb826bd31df6f0aa14f6f4a286c530 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 29 Jul 2026 18:30:45 +0200 Subject: [PATCH] [DeadCode] Remove unreachable class-like checks in Class_ only rules Trait_, Interface_ and Enum_ are separate php-parser node classes, not subclasses of Class_. A rule whose getNodeTypes() returns [Class_::class] can therefore never see one, so isTrait(), isInterface() and isClass() checks on the node own class reflection are constant. --- .../RemoveArgumentFromDefaultParentCallRector.php | 2 +- .../ClassMethod/RemoveUnusedPrivateMethodRector.php | 10 +--------- .../ClassMethod/ParamTypeByParentCallTypeRector.php | 6 +----- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveArgumentFromDefaultParentCallRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveArgumentFromDefaultParentCallRector.php index f58411325e4..95cc4ed1915 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveArgumentFromDefaultParentCallRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveArgumentFromDefaultParentCallRector.php @@ -104,7 +104,7 @@ public function refactor(Node $node): ?Class_ $ancestors = array_filter( $classReflection->getAncestors(), - fn (ClassReflection $ancestorClassReflection): bool => $classReflection->isClass() && $ancestorClassReflection->getName() !== $classReflection->getName() + fn (ClassReflection $ancestorClassReflection): bool => $ancestorClassReflection->getName() !== $classReflection->getName() ); $hasChanged = false; diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php index 784b9730507..c7f59c78d97 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php @@ -143,15 +143,7 @@ public function refactor(Node $node): ?Node private function shouldSkip(ClassMethod $classMethod, ClassReflection $classReflection): bool { - // unreliable to detect trait, interface, anonymous class: doesn't make sense - if ($classReflection->isTrait()) { - return true; - } - - if ($classReflection->isInterface()) { - return true; - } - + // unreliable to detect anonymous class: doesn't make sense if ($classReflection->isAnonymous()) { return true; } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php index 3641552ac02..c8fe8801dac 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php @@ -181,11 +181,7 @@ private function shouldSkip(ClassMethod $classMethod): bool } $classReflection = $this->reflectionResolver->resolveClassReflection($classMethod); - if (! $classReflection instanceof ClassReflection) { - return true; - } - - return ! $classReflection->isClass(); + return ! $classReflection instanceof ClassReflection; } private function isParamUsedInSpreadArg(ClassMethod $classMethod, Param $param): bool