diff --git a/src/Rules/Methods/CallStaticMethodsRule.php b/src/Rules/Methods/CallStaticMethodsRule.php index ff2c5bcfe1..2fff7b6955 100644 --- a/src/Rules/Methods/CallStaticMethodsRule.php +++ b/src/Rules/Methods/CallStaticMethodsRule.php @@ -143,7 +143,7 @@ public function processNode(Node $node, Scope $scope): array $className = $classReflection->getName(); $classType = new ObjectType($className); - if ($classReflection->hasNativeMethod($methodName)) { + if ($classReflection->hasNativeMethod($methodName) && $lowercasedClassName !== 'static') { $nativeMethodReflection = $classReflection->getNativeMethod($methodName); if ($nativeMethodReflection instanceof PhpMethodReflection || $nativeMethodReflection instanceof NativeMethodReflection) { $isAbstract = $nativeMethodReflection->isAbstract(); diff --git a/tests/PHPStan/Rules/Methods/data/call-parent-abstract-method.php b/tests/PHPStan/Rules/Methods/data/call-parent-abstract-method.php index 96fc775081..10286a419b 100644 --- a/tests/PHPStan/Rules/Methods/data/call-parent-abstract-method.php +++ b/tests/PHPStan/Rules/Methods/data/call-parent-abstract-method.php @@ -60,3 +60,15 @@ abstract static function doFoo(): void; function (): void { SitAmet::doFoo(); }; + +abstract class Consecteur +{ + + public function doFoo() + { + static::doBar(); + } + + abstract public function doBar(): void; + +}