diff --git a/src/Analyser/TypeSpecifier.php b/src/Analyser/TypeSpecifier.php index 126f057953..3d4475d593 100644 --- a/src/Analyser/TypeSpecifier.php +++ b/src/Analyser/TypeSpecifier.php @@ -1939,9 +1939,15 @@ private function processBooleanSureConditionalTypes(Scope $scope, SpecifiedTypes continue; } + $scopeType = $scope->getType($expr); + $conditionType = TypeCombinator::remove($scopeType, $type); + if ($scopeType->equals($conditionType)) { + continue; + } + $conditionExpressionTypes[$exprString] = ExpressionTypeHolder::createYes( $expr, - TypeCombinator::remove($scope->getType($expr), $type), + $conditionType, ); } diff --git a/tests/PHPStan/Analyser/nsrt/pr-5445.php b/tests/PHPStan/Analyser/nsrt/pr-5445.php new file mode 100644 index 0000000000..e5b7c2b122 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/pr-5445.php @@ -0,0 +1,25 @@ + $aggregation + * @param non-falsy-string $type + */ +function testTriviallyTrueConditionSkipped(array $aggregation, string $type): void +{ + if (empty($aggregation['field']) && $type !== 'filter') { + return; + } + + assertType("array", $aggregation); + assertType('non-falsy-string', $type); + + if ($type !== 'filter') { + assertType("array", $aggregation); + } + + assertType('non-falsy-string', $type); +}