The following code raises two ParadoxicalCondition errors:
$isImmutable = substr($typeOfField, -9) === 'immutable';
if (
($isImmutable && $value instanceof DateTimeImmutable)
|| (! $isImmutable && $value instanceof DateTime)
) {
return $value;
} elseif ($isImmutable && $value instanceof DateTime) {
return DateTimeImmutable::createFromMutable($value);
} elseif (! $isImmutable && $value instanceof DateTimeImmutable) {
return DateTime::createFromImmutable($value);
}
ERROR: ParadoxicalCondition - src/DoctrineObject.php:620:23 - Condition (($value is DateTime) && ($isImmutable)) contradicts a previously-established condition ($value is not DateTime) (see https://psalm.dev/089)
} if ($isImmutable && $value instanceof DateTime) {
ERROR: ParadoxicalCondition - src/DoctrineObject.php:622:27 - Condition (($value is DateTimeImmutable) && (!$isImmutable)) contradicts a previously-established condition ($value is not DateTimeImmutable) (see https://psalm.dev/089)
} elseif ((! $isImmutable) && $value instanceof DateTimeImmutable) {
Rewriting the first if condition in two statements makes the error disappear:
$isImmutable = substr($typeOfField, -9) === 'immutable';
if ($isImmutable && $value instanceof DateTimeImmutable) {
return $value;
} elseif (! $isImmutable && $value instanceof DateTime) {
return $value;
} elseif ($isImmutable && $value instanceof DateTime) {
return DateTimeImmutable::createFromMutable($value);
} elseif (! $isImmutable && $value instanceof DateTimeImmutable) {
return DateTime::createFromImmutable($value);
}
Code example: https://psalm.dev/r/d26bab675e
The following code raises two
ParadoxicalConditionerrors:Rewriting the first if condition in two statements makes the error disappear:
Code example: https://psalm.dev/r/d26bab675e