Skip to content

Commit 2dd1913

Browse files
Introduce method
1 parent 45dad19 commit 2dd1913

File tree

2 files changed

+17
-26
lines changed

2 files changed

+17
-26
lines changed

src/Type/IterableType.php

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,8 @@ public function isSubTypeOf(Type $otherType): IsSuperTypeOfResult
137137
{
138138
if ($otherType instanceof IntersectionType || $otherType instanceof UnionType) {
139139
return $otherType->isSuperTypeOf(new UnionType([
140-
new ArrayType($this->keyType, $this->itemType),
141-
new GenericObjectType(Traversable::class, [
142-
$this->keyType,
143-
$this->itemType,
144-
]),
140+
$this->toArray(),
141+
$this->toTraversable(),
145142
]));
146143
}
147144

@@ -250,10 +247,7 @@ public function toCoercedArgumentType(bool $strictTypes): Type
250247
),
251248
$this->itemType,
252249
),
253-
new GenericObjectType(Traversable::class, [
254-
$this->keyType,
255-
$this->itemType,
256-
]),
250+
$this->toTraversable(),
257251
);
258252
}
259253

@@ -481,15 +475,12 @@ public function tryRemove(Type $typeToRemove): ?Type
481475
{
482476
$arrayType = new ArrayType(new MixedType(), new MixedType());
483477
if ($typeToRemove->isSuperTypeOf($arrayType)->yes()) {
484-
return new GenericObjectType(Traversable::class, [
485-
$this->getIterableKeyType(),
486-
$this->getIterableValueType(),
487-
]);
478+
return $this->toTraversable();
488479
}
489480

490481
$traversableType = new ObjectType(Traversable::class);
491482
if ($typeToRemove->isSuperTypeOf($traversableType)->yes()) {
492-
return new ArrayType($this->getIterableKeyType(), $this->getIterableValueType());
483+
return $this->toArray();
493484
}
494485

495486
return null;
@@ -537,4 +528,12 @@ public function hasTemplateOrLateResolvableType(): bool
537528
return $this->keyType->hasTemplateOrLateResolvableType() || $this->itemType->hasTemplateOrLateResolvableType();
538529
}
539530

531+
public function toTraversable(): Type
532+
{
533+
return new GenericObjectType(Traversable::class, [
534+
$this->keyType,
535+
$this->itemType,
536+
]);
537+
}
538+
540539
}

src/Type/UnionType.php

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
use PHPStan\TrinaryLogic;
2626
use PHPStan\Type\Enum\EnumCaseObjectType;
2727
use PHPStan\Type\Generic\GenericClassStringType;
28-
use PHPStan\Type\Generic\GenericObjectType;
2928
use PHPStan\Type\Generic\TemplateIterableType;
3029
use PHPStan\Type\Generic\TemplateMixedType;
3130
use PHPStan\Type\Generic\TemplateType;
@@ -34,7 +33,6 @@
3433
use PHPStan\Type\Generic\TemplateUnionType;
3534
use PHPStan\Type\Traits\NonGeneralizableTypeTrait;
3635
use Throwable;
37-
use Traversable;
3836
use function array_diff_assoc;
3937
use function array_fill_keys;
4038
use function array_map;
@@ -198,11 +196,8 @@ public function accepts(Type $type, bool $strictTypes): AcceptsResult
198196
{
199197
if ($type instanceof IterableType) {
200198
return $this->accepts(new UnionType([
201-
new ArrayType($type->getIterableKeyType(), $type->getIterableValueType()),
202-
new GenericObjectType(Traversable::class, [
203-
$type->getIterableKeyType(),
204-
$type->getIterableValueType(),
205-
]),
199+
$type->toArray(),
200+
$type->toTraversable(),
206201
]), $strictTypes);
207202
}
208203

@@ -1087,11 +1082,8 @@ public function inferTemplateTypes(Type $receivedType): TemplateTypeMap
10871082
{
10881083
if ($receivedType instanceof IterableType) {
10891084
$receivedType = new UnionType([
1090-
new ArrayType($receivedType->getIterableKeyType(), $receivedType->getIterableValueType()),
1091-
new GenericObjectType(Traversable::class, [
1092-
$receivedType->getIterableKeyType(),
1093-
$receivedType->getIterableValueType(),
1094-
]),
1085+
$receivedType->toArray(),
1086+
$receivedType->toTraversable(),
10951087
]);
10961088
}
10971089

0 commit comments

Comments
 (0)