Skip to content

Commit

Permalink
Fix #8806
Browse files Browse the repository at this point in the history
  • Loading branch information
danog committed Dec 1, 2022
1 parent 870f581 commit 3150ad2
Showing 1 changed file with 17 additions and 2 deletions.
Expand Up @@ -38,7 +38,6 @@
use function array_shift;
use function array_slice;
use function array_values;
use function assert;
use function count;
use function explode;
use function in_array;
Expand Down Expand Up @@ -79,6 +78,7 @@ public static function getFunctionReturnType(FunctionReturnTypeProviderEvent $ev
array_shift($call_args);

$array_arg_types = [];
$orig_types = [];

foreach ($call_args as $call_arg) {
$call_arg_type = $statements_source->node_data->getType($call_arg->value);
Expand All @@ -89,11 +89,23 @@ public static function getFunctionReturnType(FunctionReturnTypeProviderEvent $ev
&& $call_arg_atomic->fallback_params === null
) {
$array_arg_types []= array_values($call_arg_atomic->properties);
$orig_types []= $call_arg_type;
} elseif ($call_arg_type
&& $call_arg_type->isSingle()
&& ($call_arg_atomic = $call_arg_type->getSingleAtomic()) instanceof TArray
&& $call_arg_atomic->isEmptyArray()
) {
$array_arg_types []= [];
$orig_types []= $call_arg_type;
} else {
return Type::getArray();
}
}

if (count($array_arg_types) === 1) {
return $orig_types[0];
}

$null = Type::getNull();
$array_arg_types = array_map(null, ...$array_arg_types);
$array_arg_types = array_map(
Expand All @@ -107,7 +119,10 @@ function (array $sub) use ($null) {
},
$array_arg_types
);
assert(count($array_arg_types));

if (!$array_arg_types) {
return Type::getEmptyArray();
}

return new Union([new TKeyedArray($array_arg_types, null, null, true)]);
}
Expand Down

0 comments on commit 3150ad2

Please sign in to comment.