EVOLUTION-NINJA
Edit File: UnionTypeMapper.php
<?php declare (strict_types=1); namespace Rector\StaticTypeMapper\PhpDocParser; use PhpParser\Node; use PHPStan\Analyser\NameScope; use PHPStan\PhpDocParser\Ast\Type\TypeNode; use PHPStan\PhpDocParser\Ast\Type\UnionTypeNode; use PHPStan\Type\Type; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface; use Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper; use RectorPrefix20211231\Symfony\Contracts\Service\Attribute\Required; /** * @implements PhpDocTypeMapperInterface<UnionTypeNode> */ final class UnionTypeMapper implements \Rector\StaticTypeMapper\Contract\PhpDocParser\PhpDocTypeMapperInterface { /** * @var \Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper */ private $phpDocTypeMapper; /** * @readonly * @var \Rector\NodeTypeResolver\PHPStan\Type\TypeFactory */ private $typeFactory; public function __construct(\Rector\NodeTypeResolver\PHPStan\Type\TypeFactory $typeFactory) { $this->typeFactory = $typeFactory; } public function getNodeType() : string { return \PHPStan\PhpDocParser\Ast\Type\UnionTypeNode::class; } /** * @required */ public function autowire(\Rector\StaticTypeMapper\PhpDoc\PhpDocTypeMapper $phpDocTypeMapper) : void { $this->phpDocTypeMapper = $phpDocTypeMapper; } /** * @param UnionTypeNode $typeNode */ public function mapToPHPStanType(\PHPStan\PhpDocParser\Ast\Type\TypeNode $typeNode, \PhpParser\Node $node, \PHPStan\Analyser\NameScope $nameScope) : \PHPStan\Type\Type { $unionedTypes = []; foreach ($typeNode->types as $unionedTypeNode) { $unionedTypes[] = $this->phpDocTypeMapper->mapToPHPStanType($unionedTypeNode, $node, $nameScope); } // to prevent missing class error, e.g. in tests return $this->typeFactory->createMixedPassedOrUnionTypeAndKeepConstant($unionedTypes); } }