Skip to content

Commit 93b9c34

Browse files
committed
Decrease usage of TypeTraverser
1 parent f79efb8 commit 93b9c34

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+315
-23
lines changed

src/Reflection/ParametersAcceptorSelector.php

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,17 @@
3131
use PHPStan\Type\CallableType;
3232
use PHPStan\Type\Constant\ConstantArrayTypeBuilder;
3333
use PHPStan\Type\Constant\ConstantIntegerType;
34-
use PHPStan\Type\Generic\TemplateType;
3534
use PHPStan\Type\Generic\TemplateTypeMap;
3635
use PHPStan\Type\Generic\TemplateTypeVarianceMap;
3736
use PHPStan\Type\IntegerType;
3837
use PHPStan\Type\IntersectionType;
39-
use PHPStan\Type\LateResolvableType;
4038
use PHPStan\Type\MixedType;
4139
use PHPStan\Type\NullType;
4240
use PHPStan\Type\ObjectType;
4341
use PHPStan\Type\ResourceType;
4442
use PHPStan\Type\StringType;
4543
use PHPStan\Type\Type;
4644
use PHPStan\Type\TypeCombinator;
47-
use PHPStan\Type\TypeTraverser;
4845
use PHPStan\Type\UnionType;
4946
use function array_is_list;
5047
use function array_key_exists;
@@ -563,28 +560,28 @@ public static function selectFromArgs(
563560

564561
private static function hasAcceptorTemplateOrLateResolvableType(ParametersAcceptor $acceptor): bool
565562
{
566-
if (self::hasTemplateOrLateResolvableType($acceptor->getReturnType())) {
563+
if ($acceptor->getReturnType()->hasTemplateOrLateResolvableType()) {
567564
return true;
568565
}
569566

570567
foreach ($acceptor->getParameters() as $parameter) {
571568
if (
572569
$parameter instanceof ExtendedParameterReflection
573570
&& $parameter->getOutType() !== null
574-
&& self::hasTemplateOrLateResolvableType($parameter->getOutType())
571+
&& $parameter->getOutType()->hasTemplateOrLateResolvableType()
575572
) {
576573
return true;
577574
}
578575

579576
if (
580577
$parameter instanceof ExtendedParameterReflection
581578
&& $parameter->getClosureThisType() !== null
582-
&& self::hasTemplateOrLateResolvableType($parameter->getClosureThisType())
579+
&& $parameter->getClosureThisType()->hasTemplateOrLateResolvableType()
583580
) {
584581
return true;
585582
}
586583

587-
if (!self::hasTemplateOrLateResolvableType($parameter->getType())) {
584+
if (!$parameter->getType()->hasTemplateOrLateResolvableType()) {
588585
continue;
589586
}
590587

@@ -594,20 +591,6 @@ private static function hasAcceptorTemplateOrLateResolvableType(ParametersAccept
594591
return false;
595592
}
596593

597-
private static function hasTemplateOrLateResolvableType(Type $type): bool
598-
{
599-
$has = false;
600-
TypeTraverser::map($type, static function (Type $type, callable $traverse) use (&$has): Type {
601-
if ($type instanceof TemplateType || $type instanceof LateResolvableType) {
602-
$has = true;
603-
}
604-
605-
return $has ? $type : $traverse($type);
606-
});
607-
608-
return $has;
609-
}
610-
611594
/**
612595
* @param array<int|string, Type> $types
613596
* @param ParametersAcceptor[] $parametersAcceptors

src/Type/Accessory/AccessoryArrayListType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,4 +504,9 @@ public function toPhpDocNode(): TypeNode
504504
return new IdentifierTypeNode('list');
505505
}
506506

507+
public function hasTemplateOrLateResolvableType(): bool
508+
{
509+
return false;
510+
}
511+
507512
}

src/Type/Accessory/AccessoryLiteralStringType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,4 +375,9 @@ public function toPhpDocNode(): TypeNode
375375
return new IdentifierTypeNode('literal-string');
376376
}
377377

378+
public function hasTemplateOrLateResolvableType(): bool
379+
{
380+
return false;
381+
}
382+
378383
}

src/Type/Accessory/AccessoryLowercaseStringType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,4 +380,9 @@ public function toPhpDocNode(): TypeNode
380380
return new IdentifierTypeNode('lowercase-string');
381381
}
382382

383+
public function hasTemplateOrLateResolvableType(): bool
384+
{
385+
return false;
386+
}
387+
383388
}

src/Type/Accessory/AccessoryNonEmptyStringType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,4 +387,9 @@ public function toPhpDocNode(): TypeNode
387387
return new IdentifierTypeNode('non-empty-string');
388388
}
389389

390+
public function hasTemplateOrLateResolvableType(): bool
391+
{
392+
return false;
393+
}
394+
390395
}

src/Type/Accessory/AccessoryNonFalsyStringType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,4 +375,9 @@ public function toPhpDocNode(): TypeNode
375375
return new IdentifierTypeNode('non-falsy-string');
376376
}
377377

378+
public function hasTemplateOrLateResolvableType(): bool
379+
{
380+
return false;
381+
}
382+
378383
}

src/Type/Accessory/AccessoryNumericStringType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,4 +392,9 @@ public function toPhpDocNode(): TypeNode
392392
return new IdentifierTypeNode('numeric-string');
393393
}
394394

395+
public function hasTemplateOrLateResolvableType(): bool
396+
{
397+
return false;
398+
}
399+
395400
}

src/Type/Accessory/AccessoryUppercaseStringType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,4 +380,9 @@ public function toPhpDocNode(): TypeNode
380380
return new IdentifierTypeNode('uppercase-string');
381381
}
382382

383+
public function hasTemplateOrLateResolvableType(): bool
384+
{
385+
return false;
386+
}
387+
383388
}

src/Type/Accessory/HasMethodType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,9 @@ public function toPhpDocNode(): TypeNode
191191
return new IdentifierTypeNode(''); // no PHPDoc representation
192192
}
193193

194+
public function hasTemplateOrLateResolvableType(): bool
195+
{
196+
return false;
197+
}
198+
194199
}

src/Type/Accessory/HasOffsetType.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,4 +437,9 @@ public function toPhpDocNode(): TypeNode
437437
return new IdentifierTypeNode(''); // no PHPDoc representation
438438
}
439439

440+
public function hasTemplateOrLateResolvableType(): bool
441+
{
442+
return $this->offsetType->hasTemplateOrLateResolvableType();
443+
}
444+
440445
}

0 commit comments

Comments
 (0)