1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-30 04:39:00 +01:00

Prevent empty array workaround to #2308

This commit is contained in:
Brown 2019-11-06 16:59:08 -05:00
parent 06b64a4a01
commit 64996f464e
3 changed files with 37 additions and 5 deletions

View File

@ -814,7 +814,10 @@ class TypeAnalyzer
$allow_float_int_equality,
$atomic_comparison_result
)) {
if ($allow_interface_equality || $input_type_part instanceof TArray) {
if ($allow_interface_equality
|| ($input_type_part instanceof TArray
&& !$input_type_part->type_params[1]->isEmpty())
) {
return true;
}
}

View File

@ -677,9 +677,21 @@ class ClassTemplateExtendsTest extends TestCase
class Collection3 extends Collection2{}
$a = new Collection1(["a" => "b"]);
$a = new Collection2(["a" => "b"]);
$a = new Collection3(["a" => "b"]);',
foreach ((new Collection1(["a" => "b"])) as $a) {}
/** @psalm-suppress MixedAssignment */
foreach ((new Collection2(["a" => "b"])) as $a) {}
/** @psalm-suppress MixedAssignment */
foreach ((new Collection3(["a" => "b"])) as $a) {}
foreach ((new Collection1([])) as $i) {}
/** @psalm-suppress MixedAssignment */
foreach ((new Collection2([])) as $i) {}
/** @psalm-suppress MixedAssignment */
foreach ((new Collection3([])) as $i) {}',
],
'iterateOverExtendedArrayObjectWithoutParam' => [
'<?php

View File

@ -2397,7 +2397,7 @@ class ClassTemplateTest extends TestCase
function expectsShape($_): void {}',
'error_message' => 'MixedArgumentTypeCoercion'
],
'preventUseWithMoreSpecificParam' => [
'preventUseWithMoreSpecificParamInt' => [
'<?php
/** @template T */
abstract class Collection {
@ -2414,6 +2414,23 @@ class ClassTemplateTest extends TestCase
}',
'error_message' => 'InvalidArgument'
],
'preventUseWithMoreSpecificParamEmptyArray' => [
'<?php
/** @template T */
abstract class Collection {
/** @param T $elem */
public function add($elem): void {}
}
/**
* @template T
* @param Collection<T> $col
*/
function usesCollection(Collection $col): void {
$col->add([]);
}',
'error_message' => 'InvalidArgument'
],
];
}
}