diff --git a/src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php b/src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php index a5867471c4d..4c471c7229e 100644 --- a/src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php +++ b/src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php @@ -203,7 +203,7 @@ function (\Psalm\Storage\FunctionLikeParameter $param) { $changed_var_ids, ['$inner_type' => true], $statements_source, - [], + $statements_source->getTemplateTypeMap(), false, new CodeLocation($statements_source, $stmt) ); diff --git a/tests/Template/FunctionClassStringTemplateTest.php b/tests/Template/FunctionClassStringTemplateTest.php index 6d9502fd31e..3ca1fddf6ec 100644 --- a/tests/Template/FunctionClassStringTemplateTest.php +++ b/tests/Template/FunctionClassStringTemplateTest.php @@ -649,6 +649,26 @@ function bar(string $e, string $expected) : void { if ($e !== $expected) {} }', ], + 'refineByArrayFilterIntersection' => [ + ' $bars + * @psalm-param class-string $class + * @return array + */ + function getBarsThatAreInstancesOf(array $bars, string $class): array + { + return \array_filter( + $bars, + function (Bar $bar) use ($class): bool { + return $bar instanceof $class; + } + ); + } + + interface Bar {}' + ], ]; }