Skip to content

Commit a5b0d00

Browse files
Use param too
1 parent 5b10196 commit a5b0d00

4 files changed

Lines changed: 15 additions & 5 deletions

File tree

src/Analyser/ExprHandler/ArrayDimFetchHandler.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,11 @@ public function processExpr(NodeScopeResolver $nodeScopeResolver, Stmt $stmt, Ex
100100
if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) {
101101
$throwPoints = array_merge($throwPoints, $nodeScopeResolver->processExprNode(
102102
$stmt,
103-
new MethodCall(new TypeExpr($varType), 'offsetGet'),
103+
new MethodCall(
104+
new TypeExpr($varType),
105+
'offsetGet',
106+
$expr->dim !== null ? [new Arg(new TypeExpr($scope->getType($expr->dim)))] : [],
107+
),
104108
$scope,
105109
$storage,
106110
new NoopNodeCallback(),

src/Analyser/ExprHandler/AssignHandler.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use ArrayAccess;
66
use Closure;
77
use PhpParser\Node;
8+
use PhpParser\Node\Arg;
89
use PhpParser\Node\Expr;
910
use PhpParser\Node\Expr\ArrayDimFetch;
1011
use PhpParser\Node\Expr\Assign;
@@ -478,7 +479,11 @@ public function processAssignVar(
478479
) {
479480
$throwPoints = array_merge($throwPoints, $nodeScopeResolver->processExprNode(
480481
$stmt,
481-
new MethodCall(new TypeExpr($setVarType), 'offsetSet'),
482+
new MethodCall(
483+
new TypeExpr($setVarType),
484+
'offsetSet',
485+
$originalVar->dim !== null ? [new Arg(new TypeExpr($scope->getType($originalVar->dim)))] : []
486+
),
482487
$scope,
483488
$storage,
484489
new NoopNodeCallback(),

src/Analyser/ExprHandler/IssetHandler.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace PHPStan\Analyser\ExprHandler;
44

55
use ArrayAccess;
6+
use PhpParser\Node\Arg;
67
use PhpParser\Node\Expr;
78
use PhpParser\Node\Expr\ArrayDimFetch;
89
use PhpParser\Node\Expr\Isset_;
@@ -91,7 +92,7 @@ public function processExpr(NodeScopeResolver $nodeScopeResolver, Stmt $stmt, Ex
9192
$isAlwaysTerminating = $isAlwaysTerminating || $result->isAlwaysTerminating();
9293
$nonNullabilityResults[] = $nonNullabilityResult;
9394

94-
if (!($var instanceof ArrayDimFetch)) {
95+
if (!($var instanceof ArrayDimFetch) || $var->dim === null) {
9596
continue;
9697
}
9798

@@ -102,7 +103,7 @@ public function processExpr(NodeScopeResolver $nodeScopeResolver, Stmt $stmt, Ex
102103

103104
$throwPoints = array_merge($throwPoints, $nodeScopeResolver->processExprNode(
104105
$stmt,
105-
new MethodCall(new TypeExpr($varType), 'offsetExists'),
106+
new MethodCall(new TypeExpr($varType), 'offsetExists', [new Arg(new TypeExpr($scope->getType($var->dim)))]),
106107
$scope,
107108
$storage,
108109
new NoopNodeCallback(),

src/Analyser/NodeScopeResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2054,7 +2054,7 @@ public function processStmtNode(
20542054
if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) {
20552055
$throwPoints = array_merge($throwPoints, $this->processExprNode(
20562056
$stmt,
2057-
new MethodCall(new TypeExpr($varType), 'offsetUnset'),
2057+
new MethodCall(new TypeExpr($varType), 'offsetUnset', [new Arg(new TypeExpr($scope->getType($var->dim)))]),
20582058
$scope,
20592059
$storage,
20602060
new NoopNodeCallback(),

0 commit comments

Comments
 (0)