diff --git a/src/Psalm/Internal/Analyzer/ClassAnalyzer.php b/src/Psalm/Internal/Analyzer/ClassAnalyzer.php index 48576a0d79b..433419b6346 100644 --- a/src/Psalm/Internal/Analyzer/ClassAnalyzer.php +++ b/src/Psalm/Internal/Analyzer/ClassAnalyzer.php @@ -1912,7 +1912,8 @@ public static function analyzeClassMethodReturnType( $codebase, null, null, - null + null, + $original_fq_classlike_name ); } diff --git a/tests/Template/ClassTemplateExtendsTest.php b/tests/Template/ClassTemplateExtendsTest.php index 0fb3aed5583..0bf93a7774d 100644 --- a/tests/Template/ClassTemplateExtendsTest.php +++ b/tests/Template/ClassTemplateExtendsTest.php @@ -1694,6 +1694,9 @@ public function __construct(array $elements = []) $this->elements = $elements; } + /** + * @psalm-suppress InvalidReturnType + */ public function getIterator() { /** @@ -4181,6 +4184,38 @@ public function foo($crudNew): void { } }' ], + 'extendTemplateTypeInParamAsType' => [ + ' + */ + final class Apply implements Operation + { + /** + * @return \Closure(array): void + */ + public function i(): Closure + { + return + /** + * @psalm-param array $collection + */ + static function (array $collection): void{}; + } + } + + /** + * @template TKey as object + */ + interface Operation + { + /** + * @psalm-return \Closure(array): void + */ + public function i(): Closure; + }' + ], ]; }