Skip to content

Commit

Permalink
Merge pull request #7325 from villfa/fix/7322
Browse files Browse the repository at this point in the history
Fix analysis when __invoke() exists
  • Loading branch information
orklah committed Jan 6, 2022
2 parents 46bcb62 + b9d8dd9 commit 760badd
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
Expand Up @@ -52,6 +52,7 @@
use Psalm\Type\Atomic\TMixed;
use Psalm\Type\Atomic\TNamedObject;
use Psalm\Type\Atomic\TNull;
use Psalm\Type\Atomic\TObjectWithProperties;
use Psalm\Type\Atomic\TString;
use Psalm\Type\Atomic\TTemplateParam;
use Psalm\Type\Reconciler;
Expand Down Expand Up @@ -690,12 +691,11 @@ private static function getAnalyzeNamedExpression(
);
} elseif ($var_type_part instanceof TCallableObject
|| $var_type_part instanceof TCallableString
|| ($var_type_part instanceof TNamedObject && $var_type_part->value === 'Closure')
|| ($var_type_part instanceof TObjectWithProperties && isset($var_type_part->methods['__invoke']))
) {
// this is fine
$has_valid_function_call_type = true;
} elseif (($var_type_part instanceof TNamedObject && $var_type_part->value === 'Closure')) {
// this is fine
$has_valid_function_call_type = true;
} elseif ($var_type_part instanceof TString
|| $var_type_part instanceof TArray
|| $var_type_part instanceof TList
Expand Down
9 changes: 9 additions & 0 deletions tests/CallableTest.php
Expand Up @@ -316,6 +316,15 @@ function foo(callable $c): void {
$c2 = new C();
$c2();',
],
'invokeMethodExists' => [
'<?php
function call(object $obj): void {
if (!method_exists($obj, "__invoke")) {
return;
}
$obj();
}',
],
'correctParamType' => [
'<?php
$take_string = function(string $s): string { return $s; };
Expand Down

0 comments on commit 760badd

Please sign in to comment.