Skip to content

Consider ArrayAccess side effects for dead catch analysis #26422

Consider ArrayAccess side effects for dead catch analysis

Consider ArrayAccess side effects for dead catch analysis #26422

Triggered via pull request March 6, 2026 15:39
Status Failure
Total duration 23m 36s
Artifacts

tests.yml

on: pull_request
Matrix: Tests PHPUnit 12.x
Determine levels tests matrix
42s
Determine levels tests matrix
Matrix: Integration tests
Matrix: Tests PHPUnit 11.x
Matrix: Tests with old PHPUnit
Matrix: Mutation Testing
Matrix: Levels tests
Fit to window
Zoom out
Zoom in

Annotations

2 errors and 20 warnings
Mutation Testing (8.4, ubuntu-latest)
Process completed with exit code 1.
Mutation Testing (8.3, ubuntu-latest)
Process completed with exit code 1.
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L6480
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $setVarType = $scope->getType($originalVar->var); if ( !$setVarType instanceof ErrorType - && !$setVarType->isArray()->yes() + && $setVarType->isArray()->no() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($setVarType)->no() ) { $throwPoints = array_merge($throwPoints, $this->processExprNode(
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3995
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ } $varType = $scope->getType($var->var); - if ($varType->isArray()->yes() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->yes() || !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->yes()) { continue; }
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3995
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator": @@ @@ } $varType = $scope->getType($var->var); - if ($varType->isArray()->yes() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->yes() || $varType->isSuperTypeOf(new ObjectType(ArrayAccess::class))->no()) { continue; }
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3995
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ } $varType = $scope->getType($var->var); - if ($varType->isArray()->yes() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->no() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { continue; }
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3682
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $scope = $result->getScope(); $varType = $scope->getType($expr->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->yes()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($expr->var, 'offsetGet'),
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3682
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator": @@ @@ $scope = $result->getScope(); $varType = $scope->getType($expr->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && !$varType->isSuperTypeOf(new ObjectType(ArrayAccess::class))->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($expr->var, 'offsetGet'),
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3682
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $scope = $result->getScope(); $varType = $scope->getType($expr->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->no() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($expr->var, 'offsetGet'),
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L2113
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $impurePoints = array_merge($impurePoints, $exprResult->getImpurePoints()); if ($var instanceof ArrayDimFetch && $var->dim !== null) { $varType = $scope->getType($var->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->yes()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($var->var, 'offsetUnset'),
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L2113
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator": @@ @@ $impurePoints = array_merge($impurePoints, $exprResult->getImpurePoints()); if ($var instanceof ArrayDimFetch && $var->dim !== null) { $varType = $scope->getType($var->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && !$varType->isSuperTypeOf(new ObjectType(ArrayAccess::class))->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($var->var, 'offsetUnset'),
Mutation Testing (8.4, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L2113
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $impurePoints = array_merge($impurePoints, $exprResult->getImpurePoints()); if ($var instanceof ArrayDimFetch && $var->dim !== null) { $varType = $scope->getType($var->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->no() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($var->var, 'offsetUnset'),
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L6480
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $setVarType = $scope->getType($originalVar->var); if ( !$setVarType instanceof ErrorType - && !$setVarType->isArray()->yes() + && $setVarType->isArray()->no() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($setVarType)->no() ) { $throwPoints = array_merge($throwPoints, $this->processExprNode(
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3995
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ } $varType = $scope->getType($var->var); - if ($varType->isArray()->yes() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->yes() || !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->yes()) { continue; }
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3995
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator": @@ @@ } $varType = $scope->getType($var->var); - if ($varType->isArray()->yes() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->yes() || $varType->isSuperTypeOf(new ObjectType(ArrayAccess::class))->no()) { continue; }
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3995
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ } $varType = $scope->getType($var->var); - if ($varType->isArray()->yes() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->no() || (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { continue; }
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3682
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $scope = $result->getScope(); $varType = $scope->getType($expr->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->yes()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($expr->var, 'offsetGet'),
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3682
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator": @@ @@ $scope = $result->getScope(); $varType = $scope->getType($expr->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && !$varType->isSuperTypeOf(new ObjectType(ArrayAccess::class))->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($expr->var, 'offsetGet'),
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L3682
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $scope = $result->getScope(); $varType = $scope->getType($expr->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->no() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($expr->var, 'offsetGet'),
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L2113
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $impurePoints = array_merge($impurePoints, $exprResult->getImpurePoints()); if ($var instanceof ArrayDimFetch && $var->dim !== null) { $varType = $scope->getType($var->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && (new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->yes()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($var->var, 'offsetUnset'),
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L2113
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator": @@ @@ $impurePoints = array_merge($impurePoints, $exprResult->getImpurePoints()); if ($var instanceof ArrayDimFetch && $var->dim !== null) { $varType = $scope->getType($var->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if (!$varType->isArray()->yes() && !$varType->isSuperTypeOf(new ObjectType(ArrayAccess::class))->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($var->var, 'offsetUnset'),
Mutation Testing (8.3, ubuntu-latest): src/Analyser/NodeScopeResolver.php#L2113
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator": @@ @@ $impurePoints = array_merge($impurePoints, $exprResult->getImpurePoints()); if ($var instanceof ArrayDimFetch && $var->dim !== null) { $varType = $scope->getType($var->var); - if (!$varType->isArray()->yes() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { + if ($varType->isArray()->no() && !(new ObjectType(ArrayAccess::class))->isSuperTypeOf($varType)->no()) { $throwPoints = array_merge($throwPoints, $this->processExprNode( $stmt, new MethodCall($var->var, 'offsetUnset'),