Skip to content

Commit

Permalink
Merge pull request #10455 from nicelocal/small_assertion_fix
Browse files Browse the repository at this point in the history
Small assertion fix
  • Loading branch information
orklah committed Dec 7, 2023
2 parents ea06da7 + 6650bd8 commit 0c6d9d3
Showing 1 changed file with 21 additions and 5 deletions.
26 changes: 21 additions & 5 deletions src/Psalm/Type/Reconciler.php
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ public static function reconcileKeyedTypes(
$has_negation = false;
$has_isset = false;
$has_inverted_isset = false;
$has_inverted_key_exists = false;
$has_truthy_or_falsy_or_empty = false;
$has_empty = false;
$has_count_check = false;
Expand Down Expand Up @@ -201,7 +202,9 @@ public static function reconcileKeyedTypes(
&& $new_type_part_part instanceof IsIdentical;

$has_inverted_isset = $has_inverted_isset
|| $new_type_part_part instanceof IsNotIsset
|| $new_type_part_part instanceof IsNotIsset;

$has_inverted_key_exists = $has_inverted_key_exists
|| $new_type_part_part instanceof ArrayKeyDoesNotExist;

$has_count_check = $has_count_check
Expand All @@ -221,6 +224,7 @@ public static function reconcileKeyedTypes(
$code_location,
$has_isset,
$has_inverted_isset,
$has_inverted_key_exists,
$has_empty,
$inside_loop,
$has_object_array_access,
Expand Down Expand Up @@ -334,7 +338,12 @@ public static function reconcileKeyedTypes(
if ($type_changed || $failed_reconciliation) {
$changed_var_ids[$key] = true;

if (substr($key, -1) === ']' && !$has_inverted_isset && !$has_empty && !$is_equality) {
if (substr($key, -1) === ']'
&& !$has_inverted_isset
&& !$has_inverted_key_exists
&& !$has_empty
&& !$is_equality
) {
self::adjustTKeyedArrayType(
$key_parts,
$existing_types,
Expand Down Expand Up @@ -648,6 +657,7 @@ private static function getValueForKey(
?CodeLocation $code_location,
bool $has_isset,
bool $has_inverted_isset,
bool $has_inverted_key_exists,
bool $has_empty,
bool $inside_loop,
bool &$has_object_array_access
Expand Down Expand Up @@ -723,11 +733,17 @@ private static function getValueForKey(

$new_base_type_candidate = $existing_key_type_part->type_params[1];

if ($new_base_type_candidate->isMixed() && !$has_isset && !$has_inverted_isset) {
if ($new_base_type_candidate->isMixed()
&& !$has_isset
&& !$has_inverted_isset
&& !$has_inverted_key_exists
) {
return $new_base_type_candidate;
}

if (($has_isset || $has_inverted_isset) && isset($new_assertions[$new_base_key])) {
if (($has_isset || $has_inverted_isset || $has_inverted_key_exists)
&& isset($new_assertions[$new_base_key])
) {
if ($has_inverted_isset && $new_base_key === $key) {
$new_base_type_candidate = $new_base_type_candidate->getBuilder();
$new_base_type_candidate->addType(new TNull);
Expand Down Expand Up @@ -756,7 +772,7 @@ private static function getValueForKey(
} elseif ($existing_key_type_part instanceof TString) {
$new_base_type_candidate = Type::getString();
} elseif ($existing_key_type_part instanceof TNamedObject
&& ($has_isset || $has_inverted_isset)
&& ($has_isset || $has_inverted_isset || $has_inverted_key_exists)
) {
$has_object_array_access = true;

Expand Down

0 comments on commit 0c6d9d3

Please sign in to comment.