@@ -462,7 +462,7 @@ public function specifyTypesInCondition(
462
462
$ parametersAcceptor instanceof ParametersAcceptorWithPhpDocs ? $ parametersAcceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
463
463
TemplateTypeVariance::createInvariant (),
464
464
));
465
- $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ expr , $ asserts , $ parametersAcceptor , $ scope );
465
+ $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ rootExpr , $ expr , $ asserts , $ parametersAcceptor , $ scope );
466
466
if ($ specifiedTypes !== null ) {
467
467
return $ specifiedTypes ;
468
468
}
@@ -510,7 +510,7 @@ public function specifyTypesInCondition(
510
510
$ parametersAcceptor instanceof ParametersAcceptorWithPhpDocs ? $ parametersAcceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
511
511
TemplateTypeVariance::createInvariant (),
512
512
));
513
- $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ expr , $ asserts , $ parametersAcceptor , $ scope );
513
+ $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ rootExpr , $ expr , $ asserts , $ parametersAcceptor , $ scope );
514
514
if ($ specifiedTypes !== null ) {
515
515
return $ specifiedTypes ;
516
516
}
@@ -563,7 +563,7 @@ public function specifyTypesInCondition(
563
563
$ parametersAcceptor instanceof ParametersAcceptorWithPhpDocs ? $ parametersAcceptor ->getCallSiteVarianceMap () : TemplateTypeVarianceMap::createEmpty (),
564
564
TemplateTypeVariance::createInvariant (),
565
565
));
566
- $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ expr , $ asserts , $ parametersAcceptor , $ scope );
566
+ $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ rootExpr , $ expr , $ asserts , $ parametersAcceptor , $ scope );
567
567
if ($ specifiedTypes !== null ) {
568
568
return $ specifiedTypes ;
569
569
}
@@ -922,7 +922,7 @@ public function specifyTypesInCondition(
922
922
TemplateTypeVariance::createInvariant (),
923
923
));
924
924
925
- $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ expr , $ asserts , $ parametersAcceptor , $ scope );
925
+ $ specifiedTypes = $ this ->specifyTypesFromAsserts ($ context , $ rootExpr , $ expr , $ asserts , $ parametersAcceptor , $ scope );
926
926
927
927
if ($ specifiedTypes !== null ) {
928
928
return $ specifiedTypes ;
@@ -1293,7 +1293,7 @@ public function getConditionalSpecifiedTypes(
1293
1293
return $ specifiedTypes ;
1294
1294
}
1295
1295
1296
- private function specifyTypesFromAsserts (TypeSpecifierContext $ context , Expr \CallLike $ call , Assertions $ assertions , ParametersAcceptor $ parametersAcceptor , Scope $ scope ): ?SpecifiedTypes
1296
+ private function specifyTypesFromAsserts (TypeSpecifierContext $ context , ? Expr $ rootExpr , Expr \CallLike $ call , Assertions $ assertions , ParametersAcceptor $ parametersAcceptor , Scope $ scope ): ?SpecifiedTypes
1297
1297
{
1298
1298
if ($ context ->null ()) {
1299
1299
$ asserts = $ assertions ->getAsserts ();
@@ -1334,8 +1334,7 @@ private function specifyTypesFromAsserts(TypeSpecifierContext $context, Expr\Cal
1334
1334
$ argsMap ['this ' ] = [$ call ->var ];
1335
1335
}
1336
1336
1337
- /** @var SpecifiedTypes|null $types */
1338
- $ types = null ;
1337
+ $ types = $ this ->handleDefaultTruthyOrFalseyContext ($ context , $ rootExpr , $ call , $ scope );
1339
1338
1340
1339
foreach ($ asserts as $ assert ) {
1341
1340
foreach ($ argsMap [substr ($ assert ->getParameter ()->getParameterName (), 1 )] ?? [] as $ parameterExpr ) {
@@ -1378,7 +1377,7 @@ static function (Type $type, callable $traverse) use ($templateTypeMap, &$contai
1378
1377
$ scope ,
1379
1378
$ containsUnresolvedTemplate || $ assert ->isEquality () ? $ call : null ,
1380
1379
);
1381
- $ types = $ types !== null ? $ types ->unionWith ($ newTypes ) : $ newTypes ;
1380
+ $ types = $ types ->unionWith ($ newTypes );
1382
1381
1383
1382
if (!$ context ->null () || !$ assertedType instanceof ConstantBooleanType) {
1384
1383
continue ;
0 commit comments