mirror of
https://github.com/danog/psalm.git
synced 2024-11-27 04:45:20 +01:00
Fix bug asserting array emptiness
This commit is contained in:
parent
d8855282c6
commit
549aee47f1
@ -199,6 +199,18 @@ class ArrayAssignmentAnalyzer
|
|||||||
&& is_string($child_stmt->dim->name)
|
&& is_string($child_stmt->dim->name)
|
||||||
) {
|
) {
|
||||||
$var_id_additions[] = '[$' . $child_stmt->dim->name . ']';
|
$var_id_additions[] = '[$' . $child_stmt->dim->name . ']';
|
||||||
|
} elseif ($child_stmt->dim instanceof PhpParser\Node\Expr\PropertyFetch
|
||||||
|
&& $child_stmt->dim->name instanceof PhpParser\Node\Identifier
|
||||||
|
) {
|
||||||
|
$object_id = ExpressionAnalyzer::getArrayVarId(
|
||||||
|
$child_stmt->dim->var,
|
||||||
|
$statements_analyzer->getFQCLN(),
|
||||||
|
$statements_analyzer
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($object_id) {
|
||||||
|
$var_id_additions[] = '[' . $object_id . '->' . $child_stmt->dim->name->name . ']';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
$var_id_additions[] = '[' . $child_stmt->dim->inferredType . ']';
|
$var_id_additions[] = '[' . $child_stmt->dim->inferredType . ']';
|
||||||
$full_var_id = false;
|
$full_var_id = false;
|
||||||
|
@ -271,7 +271,7 @@ class AssertTest extends TestCase
|
|||||||
}
|
}
|
||||||
}',
|
}',
|
||||||
],
|
],
|
||||||
'SKIPPED-bug' => [
|
'assertArrayWithPropertyOffset' => [
|
||||||
'<?php
|
'<?php
|
||||||
class A {
|
class A {
|
||||||
public int $id = 0;
|
public int $id = 0;
|
||||||
@ -280,20 +280,10 @@ class AssertTest extends TestCase
|
|||||||
public function foo() : void {}
|
public function foo() : void {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param A[] $a_of_a */
|
/**
|
||||||
function foo(array $a_of_a): void {
|
* @param array<int, B> $arr
|
||||||
$arr = [];
|
*/
|
||||||
|
function foo(A $a, array $arr): void {
|
||||||
$a = array_pop($a_of_a);
|
|
||||||
|
|
||||||
if (!isset($arr[$a->id])) {
|
|
||||||
$arr[$a->id] = new B();
|
|
||||||
}
|
|
||||||
$arr[$a->id]->foo();
|
|
||||||
|
|
||||||
/** @var A */
|
|
||||||
$a = array_pop($a_of_a);
|
|
||||||
|
|
||||||
if (!isset($arr[$a->id])) {
|
if (!isset($arr[$a->id])) {
|
||||||
$arr[$a->id] = new B();
|
$arr[$a->id] = new B();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user