Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6844437

Browse files
committedOct 6, 2024··
Get rid of unnecessary instanceof self in ConstantArrayType
1 parent c77064a commit 6844437

File tree

2 files changed

+17
-40
lines changed

2 files changed

+17
-40
lines changed
 

‎phpstan-baseline.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,7 @@ parameters:
882882
-
883883
message: '#^Doing instanceof PHPStan\\Type\\Constant\\ConstantArrayType is error\-prone and deprecated\. Use Type\:\:getConstantArrays\(\) instead\.$#'
884884
identifier: phpstanApi.instanceofType
885-
count: 7
885+
count: 5
886886
path: src/Type/Constant/ConstantArrayType.php
887887

888888
-

‎src/Type/Constant/ConstantArrayType.php

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
use function array_merge;
5252
use function array_pop;
5353
use function array_push;
54-
use function array_reverse;
5554
use function array_slice;
5655
use function array_unique;
5756
use function array_values;
@@ -241,7 +240,7 @@ public function getAllArrays(): array
241240
}
242241

243242
$array = $builder->getArray();
244-
if (!$array instanceof ConstantArrayType) {
243+
if (!$array instanceof self) {
245244
throw new ShouldNotHappenException();
246245
}
247246

@@ -857,14 +856,16 @@ public function popArray(): Type
857856

858857
public function reverseArray(TrinaryLogic $preserveKeys): Type
859858
{
860-
$keyTypesReversed = array_reverse($this->keyTypes, true);
861-
$keyTypes = array_values($keyTypesReversed);
862-
$keyTypesReversedKeys = array_keys($keyTypesReversed);
863-
$optionalKeys = array_map(static fn (int $optionalKey): int => $keyTypesReversedKeys[$optionalKey], $this->optionalKeys);
859+
$builder = ConstantArrayTypeBuilder::createEmpty();
864860

865-
$reversed = new self($keyTypes, array_reverse($this->valueTypes), $this->nextAutoIndexes, $optionalKeys, TrinaryLogic::createNo());
861+
for ($i = count($this->keyTypes) - 1; $i >= 0; $i--) {
862+
$offsetType = $preserveKeys->yes() || $this->keyTypes[$i]->isInteger()->no()
863+
? $this->keyTypes[$i]
864+
: null;
865+
$builder->setOffsetValueType($offsetType, $this->valueTypes[$i], $this->isOptionalKey($i));
866+
}
866867

867-
return $preserveKeys->yes() ? $reversed : $reversed->reindex();
868+
return $builder->getArray();
868869
}
869870

870871
public function searchArray(Type $needleType): Type
@@ -993,15 +994,14 @@ public function sliceArray(Type $offsetType, Type $lengthType, TrinaryLogic $pre
993994
$isOptional = true;
994995
}
995996

996-
$builder->setOffsetValueType($this->keyTypes[$i], $this->valueTypes[$i], $isOptional);
997-
}
997+
$offsetType = $preserveKeys->yes() || $this->keyTypes[$i]->isInteger()->no()
998+
? $this->keyTypes[$i]
999+
: null;
9981000

999-
$slice = $builder->getArray();
1000-
if (!$slice instanceof self) {
1001-
throw new ShouldNotHappenException();
1001+
$builder->setOffsetValueType($offsetType, $this->valueTypes[$i], $isOptional);
10021002
}
10031003

1004-
return $preserveKeys->yes() ? $slice : $slice->reindex();
1004+
return $builder->getArray();
10051005
}
10061006

10071007
public function isIterableAtLeastOnce(): TrinaryLogic
@@ -1147,7 +1147,7 @@ private function removeLastElements(int $length): self
11471147
}
11481148

11491149
/** @param positive-int $length */
1150-
private function removeFirstElements(int $length, bool $reindex = true): self
1150+
private function removeFirstElements(int $length, bool $reindex = true): Type
11511151
{
11521152
$builder = ConstantArrayTypeBuilder::createEmpty();
11531153

@@ -1174,30 +1174,7 @@ private function removeFirstElements(int $length, bool $reindex = true): self
11741174
$builder->setOffsetValueType($keyType, $valueType, $isOptional);
11751175
}
11761176

1177-
$array = $builder->getArray();
1178-
if (!$array instanceof self) {
1179-
throw new ShouldNotHappenException();
1180-
}
1181-
1182-
return $array;
1183-
}
1184-
1185-
private function reindex(): self
1186-
{
1187-
$keyTypes = [];
1188-
$autoIndex = 0;
1189-
1190-
foreach ($this->keyTypes as $keyType) {
1191-
if (!$keyType instanceof ConstantIntegerType) {
1192-
$keyTypes[] = $keyType;
1193-
continue;
1194-
}
1195-
1196-
$keyTypes[] = new ConstantIntegerType($autoIndex);
1197-
$autoIndex++;
1198-
}
1199-
1200-
return new self($keyTypes, $this->valueTypes, [$autoIndex], $this->optionalKeys, TrinaryLogic::createYes());
1177+
return $builder->getArray();
12011178
}
12021179

12031180
public function toBoolean(): BooleanType

0 commit comments

Comments
 (0)
Please sign in to comment.