diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php index 3df7c83597e..ae9715db15d 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/IntersectionTypeMapper.php @@ -4,12 +4,10 @@ declare (strict_types=1); namespace Rector\PHPStanStaticTypeMapper\TypeMapper; use PhpParser\Node; -use PhpParser\Node\Identifier; -use PhpParser\Node\Name; +use PhpParser\Node\Name\FullyQualified; use PHPStan\PhpDocParser\Ast\Node as AstNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use PHPStan\PhpDocParser\Ast\Type\TypeNode; -use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\IntersectionType; use PHPStan\Type\ObjectType; use PHPStan\Type\ObjectWithoutClassType; @@ -18,8 +16,6 @@ use Rector\Core\Php\PhpVersionProvider; use Rector\Core\ValueObject\PhpVersionFeature; use Rector\PhpDocParser\PhpDocParser\PhpDocNodeTraverser; use Rector\PHPStanStaticTypeMapper\Contract\TypeMapperInterface; -use Rector\PHPStanStaticTypeMapper\PHPStanStaticTypeMapper; -use RectorPrefix202308\Symfony\Contracts\Service\Attribute\Required; /** * @implements TypeMapperInterface */ @@ -32,24 +28,19 @@ final class IntersectionTypeMapper implements TypeMapperInterface private $phpVersionProvider; /** * @readonly - * @var \PHPStan\Reflection\ReflectionProvider + * @var \Rector\PHPStanStaticTypeMapper\TypeMapper\ObjectWithoutClassTypeMapper */ - private $reflectionProvider; + private $objectWithoutClassTypeMapper; /** - * @var \Rector\PHPStanStaticTypeMapper\PHPStanStaticTypeMapper + * @readonly + * @var \Rector\PHPStanStaticTypeMapper\TypeMapper\ObjectTypeMapper */ - private $phpStanStaticTypeMapper; - public function __construct(PhpVersionProvider $phpVersionProvider, ReflectionProvider $reflectionProvider) + private $objectTypeMapper; + public function __construct(PhpVersionProvider $phpVersionProvider, \Rector\PHPStanStaticTypeMapper\TypeMapper\ObjectWithoutClassTypeMapper $objectWithoutClassTypeMapper, \Rector\PHPStanStaticTypeMapper\TypeMapper\ObjectTypeMapper $objectTypeMapper) { $this->phpVersionProvider = $phpVersionProvider; - $this->reflectionProvider = $reflectionProvider; - } - /** - * @required - */ - public function autowire(PHPStanStaticTypeMapper $phpStanStaticTypeMapper) : void - { - $this->phpStanStaticTypeMapper = $phpStanStaticTypeMapper; + $this->objectWithoutClassTypeMapper = $objectWithoutClassTypeMapper; + $this->objectTypeMapper = $objectTypeMapper; } /** * @return class-string @@ -83,23 +74,15 @@ final class IntersectionTypeMapper implements TypeMapperInterface return null; } $intersectionedTypeNodes = []; - foreach ($type->getTypes() as $intersectionedType) { - $resolvedType = $this->phpStanStaticTypeMapper->mapToPhpParserNode($intersectionedType, $typeKind); - if (!$resolvedType instanceof Name && !$resolvedType instanceof Identifier) { + foreach ($type->getTypes() as $type) { + if ($type instanceof ObjectWithoutClassType) { + return $this->objectWithoutClassTypeMapper->mapToPhpParserNode($type, $typeKind); + } + if (!$type instanceof ObjectType) { return null; } - $resolvedTypeName = (string) $resolvedType; - /** - * ObjectWithoutClassType can happen when use along with \PHPStan\Type\Accessory\HasMethodType - * Use "object" as returned type - */ - if ($intersectionedType instanceof ObjectWithoutClassType) { - return $resolvedType; - } - if (!$intersectionedType instanceof ObjectType) { - return null; - } - if (!$this->reflectionProvider->hasClass($resolvedTypeName)) { + $resolvedType = $this->objectTypeMapper->mapToPhpParserNode($type, $typeKind); + if (!$resolvedType instanceof FullyQualified) { return null; } $intersectionedTypeNodes[] = $resolvedType; diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php index 3dea4b7702f..d68f7463baa 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/ObjectTypeMapper.php @@ -4,7 +4,6 @@ declare (strict_types=1); namespace Rector\PHPStanStaticTypeMapper\TypeMapper; use RectorPrefix202308\Nette\Utils\Strings; -use PhpParser\Node; use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; use PHPStan\PhpDocParser\Ast\Type\TypeNode; @@ -56,8 +55,9 @@ final class ObjectTypeMapper implements TypeMapperInterface } /** * @param ObjectType $type + * @return null|\PhpParser\Node\Name|\PhpParser\Node\Name\FullyQualified */ - public function mapToPhpParserNode(Type $type, string $typeKind) : ?Node + public function mapToPhpParserNode(Type $type, string $typeKind) { if ($type instanceof SelfObjectType) { return new Name('self'); diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index 21214cd0dd8..f8fcdbf6932 100644 --- a/src/Application/VersionResolver.php +++ b/src/Application/VersionResolver.php @@ -19,12 +19,12 @@ final class VersionResolver * @api * @var string */ - public const PACKAGE_VERSION = '92b6e3a6d1e9a4289b5347e52f1cf379a68d74b4'; + public const PACKAGE_VERSION = '734233107cae347d5987f3f2e9d1c5c69a4db3fa'; /** * @api * @var string */ - public const RELEASE_DATE = '2023-08-07 13:16:17'; + public const RELEASE_DATE = '2023-08-07 23:18:55'; /** * @var int */ diff --git a/vendor/autoload.php b/vendor/autoload.php index 17703bfd154..7c0de97ef3c 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) { require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit07f692a9b7f057489054a15eec63fa36::getLoader(); +return ComposerAutoloaderInite74185382e1a6c8e187dd0afe1ceba0c::getLoader(); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index a5f5073fded..5aa7ea8e343 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit07f692a9b7f057489054a15eec63fa36 +class ComposerAutoloaderInite74185382e1a6c8e187dd0afe1ceba0c { private static $loader; @@ -22,17 +22,17 @@ class ComposerAutoloaderInit07f692a9b7f057489054a15eec63fa36 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit07f692a9b7f057489054a15eec63fa36', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInite74185382e1a6c8e187dd0afe1ceba0c', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit07f692a9b7f057489054a15eec63fa36', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInite74185382e1a6c8e187dd0afe1ceba0c', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit07f692a9b7f057489054a15eec63fa36::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInite74185382e1a6c8e187dd0afe1ceba0c::getInitializer($loader)); $loader->setClassMapAuthoritative(true); $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit07f692a9b7f057489054a15eec63fa36::$files; + $filesToLoad = \Composer\Autoload\ComposerStaticInite74185382e1a6c8e187dd0afe1ceba0c::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 7b38300b53f..95035a7a0fd 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit07f692a9b7f057489054a15eec63fa36 +class ComposerStaticInite74185382e1a6c8e187dd0afe1ceba0c { public static $files = array ( 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', @@ -3012,9 +3012,9 @@ class ComposerStaticInit07f692a9b7f057489054a15eec63fa36 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit07f692a9b7f057489054a15eec63fa36::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit07f692a9b7f057489054a15eec63fa36::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit07f692a9b7f057489054a15eec63fa36::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInite74185382e1a6c8e187dd0afe1ceba0c::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInite74185382e1a6c8e187dd0afe1ceba0c::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInite74185382e1a6c8e187dd0afe1ceba0c::$classMap; }, null, ClassLoader::class); }