diff --git a/src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.php b/src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.php index 1c055466eb3..fd269a3c29d 100644 --- a/src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.php +++ b/src/Psalm/Internal/PhpVisitor/Reflector/ClassLikeNodeScanner.php @@ -622,9 +622,9 @@ public function start(PhpParser\Node\Stmt\ClassLike $node): ?bool $lc_method_name, ); $storage->inheritable_method_ids[$lc_method_name] = $method_identifier; - if (!isset($storage->overridden_method_ids[$lc_method_name])) { - $storage->overridden_method_ids[$lc_method_name] = []; - } + $storage->declaring_method_ids[$lc_method_name] ??= $method_identifier; + $storage->appearing_method_ids[$lc_method_name] ??= $method_identifier; + $storage->overridden_method_ids[$lc_method_name] ??= []; $storage->declaring_pseudo_method_ids[$lc_method_name] = $method_identifier; } diff --git a/tests/MethodCallTest.php b/tests/MethodCallTest.php index f0ae5b7db77..096c8c05802 100644 --- a/tests/MethodCallTest.php +++ b/tests/MethodCallTest.php @@ -282,6 +282,20 @@ public function __call(string $method_name, array $args) : string { '$s' => 'string', ], ], + 'magicCallOnAbstract' => [ + 'code' => 'getConfirmationUrl(); + }' + ], 'canBeCalledOnMagic' => [ 'code' => '