Skip to content

Commit ec53bd2

Browse files
committed
Get rid of $storage passed around to ExprHandler
1 parent f4ef9aa commit ec53bd2

13 files changed

+51
-49
lines changed

src/Analyser/Generator/ExprHandler.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public function analyseExpr(
3131
Stmt $stmt,
3232
Expr $expr,
3333
GeneratorScope $scope,
34-
ExprAnalysisResultStorage $storage,
3534
ExpressionContext $context,
3635
?callable $alternativeNodeCallback,
3736
): Generator;

src/Analyser/Generator/ExprHandler/AssignHandler.php

Lines changed: 50 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
use PHPStan\Analyser\ExpressionTypeHolder;
2525
use PHPStan\Analyser\Generator\ExprAnalysisRequest;
2626
use PHPStan\Analyser\Generator\ExprAnalysisResult;
27-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
2827
use PHPStan\Analyser\Generator\ExprHandler;
2928
use PHPStan\Analyser\Generator\GeneratorScope;
3029
use PHPStan\Analyser\Generator\InternalThrowPoint;
@@ -102,7 +101,6 @@ public function analyseExpr(
102101
Stmt $stmt,
103102
Expr $expr,
104103
GeneratorScope $scope,
105-
ExprAnalysisResultStorage $storage,
106104
ExpressionContext $context,
107105
?callable $alternativeNodeCallback,
108106
): Generator
@@ -112,7 +110,6 @@ public function analyseExpr(
112110
$stmt,
113111
$expr->var,
114112
$expr->expr,
115-
$storage,
116113
$context,
117114
$alternativeNodeCallback,
118115
static function (GeneratorScope $scope) use ($stmt, $expr, $context, $alternativeNodeCallback): Generator {
@@ -376,7 +373,6 @@ private function processAssignVar(
376373
Node\Stmt $stmt,
377374
Expr $var,
378375
Expr $assignedExpr,
379-
ExprAnalysisResultStorage $storage,
380376
ExpressionContext $context,
381377
?callable $alternativeNodeCallback,
382378
Closure $processExprCallback,
@@ -415,10 +411,21 @@ private function processAssignVar(
415411
$truthyResult->type->isSuperTypeOf($falseyResult->type)->no()
416412
&& $falseyResult->type->isSuperTypeOf($truthyResult->type)->no()
417413
) {
418-
$conditionalExpressions = $this->processSureTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $condResult->specifiedTruthyTypes, $truthyResult->type);
419-
$conditionalExpressions = $this->processSureNotTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $condResult->specifiedTruthyTypes, $truthyResult->type);
420-
$conditionalExpressions = $this->processSureTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $condResult->specifiedFalseyTypes, $falseyResult->type);
421-
$conditionalExpressions = $this->processSureNotTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $condResult->specifiedFalseyTypes, $falseyResult->type);
414+
$sureTypesGen = $this->processSureTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $condResult->specifiedTruthyTypes, $truthyResult->type);
415+
yield from $sureTypesGen;
416+
$conditionalExpressions = $sureTypesGen->getReturn();
417+
418+
$sureTypesGen = $this->processSureNotTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $condResult->specifiedTruthyTypes, $truthyResult->type);
419+
yield from $sureTypesGen;
420+
$conditionalExpressions = $sureTypesGen->getReturn();
421+
422+
$sureTypesGen = $this->processSureTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $condResult->specifiedFalseyTypes, $falseyResult->type);
423+
yield from $sureTypesGen;
424+
$conditionalExpressions = $sureTypesGen->getReturn();
425+
426+
$sureTypesGen = $this->processSureNotTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $condResult->specifiedFalseyTypes, $falseyResult->type);
427+
yield from $sureTypesGen;
428+
$conditionalExpressions = $sureTypesGen->getReturn();
422429
}
423430
}
424431

@@ -428,10 +435,21 @@ private function processAssignVar(
428435
$truthyType = TypeCombinator::removeFalsey($type);
429436
$falseyType = TypeCombinator::intersect($type, StaticTypeFactory::falsey());
430437

431-
$conditionalExpressions = $this->processSureTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $result->specifiedTruthyTypes, $truthyType);
432-
$conditionalExpressions = $this->processSureNotTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $result->specifiedTruthyTypes, $truthyType);
433-
$conditionalExpressions = $this->processSureTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $result->specifiedFalseyTypes, $falseyType);
434-
$conditionalExpressions = $this->processSureNotTypesForConditionalExpressionsAfterAssign($storage, $var->name, $conditionalExpressions, $result->specifiedFalseyTypes, $falseyType);
438+
$sureTypesGen = $this->processSureTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $result->specifiedTruthyTypes, $truthyType);
439+
yield from $sureTypesGen;
440+
$conditionalExpressions = $sureTypesGen->getReturn();
441+
442+
$sureTypesGen = $this->processSureNotTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $result->specifiedTruthyTypes, $truthyType);
443+
yield from $sureTypesGen;
444+
$conditionalExpressions = $sureTypesGen->getReturn();
445+
446+
$sureTypesGen = $this->processSureTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $result->specifiedFalseyTypes, $falseyType);
447+
yield from $sureTypesGen;
448+
$conditionalExpressions = $sureTypesGen->getReturn();
449+
450+
$sureTypesGen = $this->processSureNotTypesForConditionalExpressionsAfterAssign($var->name, $conditionalExpressions, $result->specifiedFalseyTypes, $falseyType);
451+
yield from $sureTypesGen;
452+
$conditionalExpressions = $sureTypesGen->getReturn();
435453

436454
yield new NodeCallbackRequest(new VariableAssignNode($var, $assignedExpr), $scopeBeforeAssignEval);
437455

@@ -562,10 +580,14 @@ private function processAssignVar(
562580
$offsetValueType = $varType;
563581
$offsetNativeValueType = $varNativeType;
564582

565-
[$valueToWrite, $additionalExpressions] = $this->produceArrayDimFetchAssignValueToWrite($dimFetchStack, $offsetTypes, $offsetValueType, $valueToWrite, $scope, $storage, false);
583+
$produceArrayDimFetchAssignValueToWriteGen = $this->produceArrayDimFetchAssignValueToWrite($dimFetchStack, $offsetTypes, $offsetValueType, $valueToWrite, $scope, false);
584+
yield from $produceArrayDimFetchAssignValueToWriteGen;
585+
[$valueToWrite, $additionalExpressions] = $produceArrayDimFetchAssignValueToWriteGen->getReturn();
566586

567587
if (!$offsetValueType->equals($offsetNativeValueType) || !$valueToWrite->equals($nativeValueToWrite)) {
568-
[$nativeValueToWrite, $additionalNativeExpressions] = $this->produceArrayDimFetchAssignValueToWrite($dimFetchStack, $offsetNativeTypes, $offsetNativeValueType, $nativeValueToWrite, $scope, $storage, true);
588+
$produceArrayDimFetchAssignNativeValueToWriteGen = $this->produceArrayDimFetchAssignValueToWrite($dimFetchStack, $offsetNativeTypes, $offsetNativeValueType, $nativeValueToWrite, $scope, true);
589+
yield from $produceArrayDimFetchAssignNativeValueToWriteGen;
590+
[$nativeValueToWrite, $additionalNativeExpressions] = $produceArrayDimFetchAssignNativeValueToWriteGen->getReturn();
569591
} else {
570592
$rewritten = false;
571593
foreach ($offsetTypes as $i => [$offsetType]) {
@@ -584,7 +606,9 @@ private function processAssignVar(
584606
continue;
585607
}
586608

587-
[$nativeValueToWrite] = $this->produceArrayDimFetchAssignValueToWrite($dimFetchStack, $offsetNativeTypes, $offsetNativeValueType, $nativeValueToWrite, $scope, $storage, true);
609+
$produceArrayDimFetchAssignNativeValueToWriteGen = $this->produceArrayDimFetchAssignValueToWrite($dimFetchStack, $offsetNativeTypes, $offsetNativeValueType, $nativeValueToWrite, $scope, true);
610+
yield from $produceArrayDimFetchAssignNativeValueToWriteGen;
611+
[$nativeValueToWrite] = $produceArrayDimFetchAssignNativeValueToWriteGen->getReturn();
588612
$rewritten = true;
589613
break;
590614
}
@@ -604,7 +628,7 @@ private function processAssignVar(
604628
if ($var instanceof PropertyFetch || $var instanceof StaticPropertyFetch) {
605629
yield new NodeCallbackRequest(new PropertyAssignNode($var, $assignedPropertyExpr, $isAssignOp), $scopeBeforeAssignEval);
606630
if ($var instanceof PropertyFetch && $var->name instanceof Node\Identifier && !$isAssignOp) {
607-
$scope = $scope->assignInitializedProperty($storage->getExprAnalysisResult($var->var)->type, $var->name->toString());
631+
$scope = $scope->assignInitializedProperty((yield new TypeExprRequest($var->var))->type, $var->name->toString());
608632
}
609633
}
610634
$assignExprGen = $scope->assignExpression(
@@ -621,7 +645,7 @@ private function processAssignVar(
621645
} elseif ($var instanceof PropertyFetch || $var instanceof StaticPropertyFetch) {
622646
yield new NodeCallbackRequest(new PropertyAssignNode($var, $assignedPropertyExpr, $isAssignOp), $scopeBeforeAssignEval);
623647
if ($var instanceof PropertyFetch && $var->name instanceof Node\Identifier && !$isAssignOp) {
624-
$scope = $scope->assignInitializedProperty($storage->getExprAnalysisResult($var->var)->type, $var->name->toString());
648+
$scope = $scope->assignInitializedProperty((yield new TypeExprRequest($var->var))->type, $var->name->toString());
625649
}
626650
}
627651
}
@@ -913,7 +937,6 @@ private function processAssignVar(
913937
$stmt,
914938
$arrayItem->value,
915939
new GetOffsetValueTypeExpr($assignedExpr, $dimExpr),
916-
$storage,
917940
$context,
918941
$alternativeNodeCallback,
919942
static function (GeneratorScope $scope): Generator {
@@ -1077,9 +1100,9 @@ static function (GeneratorScope $scope): Generator {
10771100

10781101
/**
10791102
* @param array<string, ConditionalExpressionHolder[]> $conditionalExpressions
1080-
* @return array<string, ConditionalExpressionHolder[]>
1103+
* @return Generator<int, ExprAnalysisRequest|TypeExprRequest, ExprAnalysisResult|TypeExprResult, array<string, ConditionalExpressionHolder[]>>
10811104
*/
1082-
private function processSureTypesForConditionalExpressionsAfterAssign(ExprAnalysisResultStorage $storage, string $variableName, array $conditionalExpressions, SpecifiedTypes $specifiedTypes, Type $variableType): array
1105+
private function processSureTypesForConditionalExpressionsAfterAssign(string $variableName, array $conditionalExpressions, SpecifiedTypes $specifiedTypes, Type $variableType): Generator
10831106
{
10841107
foreach ($specifiedTypes->getSureTypes() as $exprString => [$expr, $exprType]) {
10851108
if (!$expr instanceof Variable) {
@@ -1101,7 +1124,7 @@ private function processSureTypesForConditionalExpressionsAfterAssign(ExprAnalys
11011124
'$' . $variableName => ExpressionTypeHolder::createYes(new Variable($variableName), $variableType),
11021125
], ExpressionTypeHolder::createYes(
11031126
$expr,
1104-
TypeCombinator::intersect($storage->getExprAnalysisResult($expr)->type, $exprType),
1127+
TypeCombinator::intersect((yield new TypeExprRequest($expr))->type, $exprType),
11051128
));
11061129
$conditionalExpressions[$exprString][$holder->getKey()] = $holder;
11071130
}
@@ -1111,9 +1134,9 @@ private function processSureTypesForConditionalExpressionsAfterAssign(ExprAnalys
11111134

11121135
/**
11131136
* @param array<string, ConditionalExpressionHolder[]> $conditionalExpressions
1114-
* @return array<string, ConditionalExpressionHolder[]>
1137+
* @return Generator<int, ExprAnalysisRequest|TypeExprRequest, ExprAnalysisResult|TypeExprResult, array<string, ConditionalExpressionHolder[]>>
11151138
*/
1116-
private function processSureNotTypesForConditionalExpressionsAfterAssign(ExprAnalysisResultStorage $storage, string $variableName, array $conditionalExpressions, SpecifiedTypes $specifiedTypes, Type $variableType): array
1139+
private function processSureNotTypesForConditionalExpressionsAfterAssign(string $variableName, array $conditionalExpressions, SpecifiedTypes $specifiedTypes, Type $variableType): Generator
11171140
{
11181141
foreach ($specifiedTypes->getSureNotTypes() as $exprString => [$expr, $exprType]) {
11191142
if (!$expr instanceof Variable) {
@@ -1135,7 +1158,7 @@ private function processSureNotTypesForConditionalExpressionsAfterAssign(ExprAna
11351158
'$' . $variableName => ExpressionTypeHolder::createYes(new Variable($variableName), $variableType),
11361159
], ExpressionTypeHolder::createYes(
11371160
$expr,
1138-
TypeCombinator::remove($storage->getExprAnalysisResult($expr)->type, $exprType),
1161+
TypeCombinator::remove((yield new TypeExprRequest($expr))->type, $exprType),
11391162
));
11401163
$conditionalExpressions[$exprString][$holder->getKey()] = $holder;
11411164
}
@@ -1210,9 +1233,9 @@ private function isImplicitArrayCreation(array $dimFetchStack, GeneratorScope $s
12101233
* @param list<ArrayDimFetch> $dimFetchStack
12111234
* @param list<array{Type|null, ArrayDimFetch}> $offsetTypes
12121235
*
1213-
* @return array{Type, list<array{Expr, Type}>}
1236+
* @return Generator<int, ExprAnalysisRequest|TypeExprRequest, ExprAnalysisResult|TypeExprResult, array{Type, list<array{Expr, Type}>}>
12141237
*/
1215-
private function produceArrayDimFetchAssignValueToWrite(array $dimFetchStack, array $offsetTypes, Type $offsetValueType, Type $valueToWrite, GeneratorScope $scope, ExprAnalysisResultStorage $storage, bool $native): array
1238+
private function produceArrayDimFetchAssignValueToWrite(array $dimFetchStack, array $offsetTypes, Type $offsetValueType, Type $valueToWrite, GeneratorScope $scope, bool $native): Generator
12161239
{
12171240
$originalValueToWrite = $valueToWrite;
12181241

@@ -1323,7 +1346,7 @@ private function produceArrayDimFetchAssignValueToWrite(array $dimFetchStack, ar
13231346
if ($key === $lastDimKey) {
13241347
$offsetValueType = $originalValueToWrite;
13251348
} else {
1326-
$dimExprAnalysisResult = $storage->getExprAnalysisResult($dimFetch->dim);
1349+
$dimExprAnalysisResult = yield new TypeExprRequest($dimFetch->dim);
13271350
$offsetType = $native ? $dimExprAnalysisResult->nativeType : $dimExprAnalysisResult->type;
13281351
$offsetValueType = $offsetValueType->getOffsetValueType($offsetType);
13291352
}

src/Analyser/Generator/ExprHandler/CastIntHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use PHPStan\Analyser\ExpressionContext;
1010
use PHPStan\Analyser\Generator\ExprAnalysisRequest;
1111
use PHPStan\Analyser\Generator\ExprAnalysisResult;
12-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1312
use PHPStan\Analyser\Generator\ExprHandler;
1413
use PHPStan\Analyser\Generator\GeneratorScope;
1514
use PHPStan\Analyser\SpecifiedTypes;
@@ -31,7 +30,6 @@ public function analyseExpr(
3130
Stmt $stmt,
3231
Expr $expr,
3332
GeneratorScope $scope,
34-
ExprAnalysisResultStorage $storage,
3533
ExpressionContext $context,
3634
?callable $alternativeNodeCallback,
3735
): Generator

src/Analyser/Generator/ExprHandler/ClassConstFetchHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use PhpParser\Node\Stmt;
1111
use PHPStan\Analyser\ExpressionContext;
1212
use PHPStan\Analyser\Generator\ExprAnalysisResult;
13-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1413
use PHPStan\Analyser\Generator\ExprHandler;
1514
use PHPStan\Analyser\Generator\GeneratorScope;
1615
use PHPStan\Analyser\SpecifiedTypes;
@@ -34,7 +33,6 @@ public function analyseExpr(
3433
Stmt $stmt,
3534
Expr $expr,
3635
GeneratorScope $scope,
37-
ExprAnalysisResultStorage $storage,
3836
ExpressionContext $context,
3937
?callable $alternativeNodeCallback,
4038
): Generator

src/Analyser/Generator/ExprHandler/ClosureHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use PhpParser\Node\Stmt;
99
use PHPStan\Analyser\ExpressionContext;
1010
use PHPStan\Analyser\Generator\ExprAnalysisResult;
11-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1211
use PHPStan\Analyser\Generator\ExprHandler;
1312
use PHPStan\Analyser\Generator\GeneratorScope;
1413
use PHPStan\Analyser\Generator\StmtsAnalysisRequest;
@@ -33,7 +32,6 @@ public function analyseExpr(
3332
Stmt $stmt,
3433
Expr $expr,
3534
GeneratorScope $scope,
36-
ExprAnalysisResultStorage $storage,
3735
ExpressionContext $context,
3836
?callable $alternativeNodeCallback,
3937
): Generator

src/Analyser/Generator/ExprHandler/FuncCallHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use PHPStan\Analyser\ExpressionContext;
1111
use PHPStan\Analyser\Generator\ExprAnalysisRequest;
1212
use PHPStan\Analyser\Generator\ExprAnalysisResult;
13-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1413
use PHPStan\Analyser\Generator\ExprHandler;
1514
use PHPStan\Analyser\Generator\GeneratorScope;
1615
use PHPStan\Analyser\SpecifiedTypes;
@@ -39,7 +38,6 @@ public function analyseExpr(
3938
Stmt $stmt,
4039
Expr $expr,
4140
GeneratorScope $scope,
42-
ExprAnalysisResultStorage $storage,
4341
ExpressionContext $context,
4442
?callable $alternativeNodeCallback,
4543
): Generator

src/Analyser/Generator/ExprHandler/LiteralArrayHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use PHPStan\Analyser\ExpressionContext;
1010
use PHPStan\Analyser\Generator\ExprAnalysisRequest;
1111
use PHPStan\Analyser\Generator\ExprAnalysisResult;
12-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1312
use PHPStan\Analyser\Generator\ExprHandler;
1413
use PHPStan\Analyser\Generator\GeneratorScope;
1514
use PHPStan\Analyser\Generator\NodeCallbackRequest;
@@ -44,7 +43,6 @@ public function analyseExpr(
4443
Stmt $stmt,
4544
Expr $expr,
4645
GeneratorScope $scope,
47-
ExprAnalysisResultStorage $storage,
4846
ExpressionContext $context,
4947
?callable $alternativeNodeCallback,
5048
): Generator

src/Analyser/Generator/ExprHandler/MethodCallHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use PHPStan\Analyser\ExpressionContext;
1111
use PHPStan\Analyser\Generator\ExprAnalysisRequest;
1212
use PHPStan\Analyser\Generator\ExprAnalysisResult;
13-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1413
use PHPStan\Analyser\Generator\ExprHandler;
1514
use PHPStan\Analyser\Generator\GeneratorScope;
1615
use PHPStan\Analyser\SpecifiedTypes;
@@ -34,7 +33,6 @@ public function analyseExpr(
3433
Stmt $stmt,
3534
Expr $expr,
3635
GeneratorScope $scope,
37-
ExprAnalysisResultStorage $storage,
3836
ExpressionContext $context,
3937
?callable $alternativeNodeCallback,
4038
): Generator

src/Analyser/Generator/ExprHandler/NewHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use PhpParser\Node\Stmt;
1010
use PHPStan\Analyser\ExpressionContext;
1111
use PHPStan\Analyser\Generator\ExprAnalysisResult;
12-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1312
use PHPStan\Analyser\Generator\ExprHandler;
1413
use PHPStan\Analyser\Generator\GeneratorScope;
1514
use PHPStan\Analyser\SpecifiedTypes;
@@ -33,7 +32,6 @@ public function analyseExpr(
3332
Stmt $stmt,
3433
Expr $expr,
3534
GeneratorScope $scope,
36-
ExprAnalysisResultStorage $storage,
3735
ExpressionContext $context,
3836
?callable $alternativeNodeCallback,
3937
): Generator

src/Analyser/Generator/ExprHandler/ScalarIntHandler.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use PhpParser\Node\Stmt;
99
use PHPStan\Analyser\ExpressionContext;
1010
use PHPStan\Analyser\Generator\ExprAnalysisResult;
11-
use PHPStan\Analyser\Generator\ExprAnalysisResultStorage;
1211
use PHPStan\Analyser\Generator\ExprHandler;
1312
use PHPStan\Analyser\Generator\GeneratorScope;
1413
use PHPStan\Analyser\SpecifiedTypes;
@@ -31,7 +30,6 @@ public function analyseExpr(
3130
Stmt $stmt,
3231
Expr $expr,
3332
GeneratorScope $scope,
34-
ExprAnalysisResultStorage $storage,
3533
ExpressionContext $context,
3634
?callable $alternativeNodeCallback,
3735
): Generator

0 commit comments

Comments
 (0)