Updated Rector to commit 9f6e80e2901da6caf3c77c4b7cb06cb384042238

9f6e80e290 [StaticTypeMapper] Remove parent attribute usage on FullyQualifiedNodeMapper (#4395)
This commit is contained in:
Tomas Votruba 2023-07-01 13:47:28 +00:00
parent 4ac2f7ee3a
commit 872db0f1a4
7 changed files with 14 additions and 127 deletions

View File

@ -5,12 +5,7 @@ namespace Rector\StaticTypeMapper\PhpParser;
use PhpParser\Node;
use PhpParser\Node\Name\FullyQualified;
use PhpParser\Node\NullableType;
use PhpParser\Node\Param;
use PHPStan\Type\Type;
use Rector\CodingStyle\ClassNameImport\UsedImportsResolver;
use Rector\Core\Provider\CurrentFileProvider;
use Rector\Core\ValueObject\Application\File;
use Rector\NodeTypeResolver\Node\AttributeKey;
use Rector\StaticTypeMapper\Contract\PhpParser\PhpParserNodeMapperInterface;
use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType;
@ -20,21 +15,6 @@ use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
*/
final class FullyQualifiedNodeMapper implements PhpParserNodeMapperInterface
{
/**
* @readonly
* @var \Rector\Core\Provider\CurrentFileProvider
*/
private $currentFileProvider;
/**
* @readonly
* @var \Rector\CodingStyle\ClassNameImport\UsedImportsResolver
*/
private $usedImportsResolver;
public function __construct(CurrentFileProvider $currentFileProvider, UsedImportsResolver $usedImportsResolver)
{
$this->currentFileProvider = $currentFileProvider;
$this->usedImportsResolver = $usedImportsResolver;
}
public function getNodeType() : string
{
return FullyQualified::class;
@ -44,13 +24,6 @@ final class FullyQualifiedNodeMapper implements PhpParserNodeMapperInterface
*/
public function mapToPHPStan(Node $node) : Type
{
$parentNode = $node->getAttribute(AttributeKey::PARENT_NODE);
if ($this->isParamTyped($node, $parentNode)) {
$possibleAliasedObjectType = $this->resolvePossibleAliasedObjectType($node);
if ($possibleAliasedObjectType instanceof AliasedObjectType) {
return $possibleAliasedObjectType;
}
}
$originalName = (string) $node->getAttribute(AttributeKey::ORIGINAL_NAME);
$fullyQualifiedName = $node->toString();
// is aliased?
@ -59,46 +32,6 @@ final class FullyQualifiedNodeMapper implements PhpParserNodeMapperInterface
}
return new FullyQualifiedObjectType($fullyQualifiedName);
}
private function isParamTyped(FullyQualified $fullyQualified, ?Node $node) : bool
{
if ($node instanceof Param && $node->type === $fullyQualified) {
return \true;
}
if (!$node instanceof NullableType) {
return \false;
}
if ($node->getAttribute(AttributeKey::IS_PARAM_TYPE) === \true) {
return $node->type === $fullyQualified;
}
return \false;
}
private function resolvePossibleAliasedObjectType(FullyQualified $fullyQualified) : ?AliasedObjectType
{
$file = $this->currentFileProvider->getFile();
if (!$file instanceof File) {
return null;
}
$oldTokens = $file->getOldTokens();
$startTokenPos = $fullyQualified->getStartTokenPos();
if (!isset($oldTokens[$startTokenPos][1])) {
return null;
}
$type = $oldTokens[$startTokenPos][1];
if (\strpos((string) $type, '\\') !== \false) {
return null;
}
$objectTypes = $this->usedImportsResolver->resolveForNode($fullyQualified);
foreach ($objectTypes as $objectType) {
if (!$objectType instanceof AliasedObjectType) {
continue;
}
if ($objectType->getClassName() !== $type) {
continue;
}
return $objectType;
}
return null;
}
private function isAliasedName(string $originalName, string $fullyQualifiedName) : bool
{
if ($originalName === '') {

View File

@ -79,7 +79,7 @@ final class UseImportsAdder
public function addImportsToNamespace(Namespace_ $namespace, array $useImportTypes, array $functionUseImportTypes) : void
{
$namespaceName = $this->getNamespaceName($namespace);
$existingUseImportTypes = $this->usedImportsResolver->resolveForNode($namespace);
$existingUseImportTypes = $this->usedImportsResolver->resolveForStmts($namespace->stmts);
$existingFunctionUseImportTypes = $this->usedImportsResolver->resolveFunctionImportsForStmts($namespace->stmts);
$existingUseImportTypes = $this->typeFactory->uniquateTypes($existingUseImportTypes);
$useImportTypes = $this->diffFullyQualifiedObjectTypes($useImportTypes, $existingUseImportTypes);

View File

@ -3,15 +3,11 @@
declare (strict_types=1);
namespace Rector\CodingStyle\ClassNameImport;
use PhpParser\Node;
use PhpParser\Node\Identifier;
use PhpParser\Node\Stmt;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Namespace_;
use PhpParser\Node\Stmt\UseUse;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\Provider\CurrentFileProvider;
use Rector\Core\ValueObject\Application\File;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType;
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
@ -32,28 +28,11 @@ final class UsedImportsResolver
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
/**
* @readonly
* @var \Rector\Core\Provider\CurrentFileProvider
*/
private $currentFileProvider;
public function __construct(BetterNodeFinder $betterNodeFinder, \Rector\CodingStyle\ClassNameImport\UseImportsTraverser $useImportsTraverser, NodeNameResolver $nodeNameResolver, CurrentFileProvider $currentFileProvider)
public function __construct(BetterNodeFinder $betterNodeFinder, \Rector\CodingStyle\ClassNameImport\UseImportsTraverser $useImportsTraverser, NodeNameResolver $nodeNameResolver)
{
$this->betterNodeFinder = $betterNodeFinder;
$this->useImportsTraverser = $useImportsTraverser;
$this->nodeNameResolver = $nodeNameResolver;
$this->currentFileProvider = $currentFileProvider;
}
/**
* @return array<FullyQualifiedObjectType|AliasedObjectType>
*/
public function resolveForNode(Node $node) : array
{
$namespace = $this->resolveCurrentNamespaceForNode($node);
if ($namespace instanceof Namespace_) {
return $this->resolveForNamespace($namespace);
}
return [];
}
/**
* @param Stmt[] $stmts
@ -91,29 +70,4 @@ final class UsedImportsResolver
});
return $usedFunctionImports;
}
private function resolveCurrentNamespaceForNode(Node $node) : ?Namespace_
{
if ($node instanceof Namespace_) {
return $node;
}
$file = $this->currentFileProvider->getFile();
if (!$file instanceof File) {
return null;
}
$stmts = $file->getNewStmts();
$namespaces = \array_filter($stmts, static function (Stmt $stmt) : bool {
return $stmt instanceof Namespace_;
});
if (\count($namespaces) !== 1) {
return null;
}
return \current($namespaces);
}
/**
* @return array<FullyQualifiedObjectType|AliasedObjectType>
*/
private function resolveForNamespace(Namespace_ $namespace) : array
{
return $this->resolveForStmts($namespace->stmts);
}
}

View File

@ -19,12 +19,12 @@ final class VersionResolver
* @api
* @var string
*/
public const PACKAGE_VERSION = '51cc0678a8da0b27b7dcc33706fc32d192e565ca';
public const PACKAGE_VERSION = '9f6e80e2901da6caf3c77c4b7cb06cb384042238';
/**
* @api
* @var string
*/
public const RELEASE_DATE = '2023-07-01 20:06:19';
public const RELEASE_DATE = '2023-07-01 20:43:34';
/**
* @var int
*/

2
vendor/autoload.php vendored
View File

@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit8aa6cd5ae3793931ee76a9c95f6cdaac::getLoader();
return ComposerAutoloaderInita592e24fce7d7558263560d96473a054::getLoader();

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit8aa6cd5ae3793931ee76a9c95f6cdaac
class ComposerAutoloaderInita592e24fce7d7558263560d96473a054
{
private static $loader;
@ -22,17 +22,17 @@ class ComposerAutoloaderInit8aa6cd5ae3793931ee76a9c95f6cdaac
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit8aa6cd5ae3793931ee76a9c95f6cdaac', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInita592e24fce7d7558263560d96473a054', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit8aa6cd5ae3793931ee76a9c95f6cdaac', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInita592e24fce7d7558263560d96473a054', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit8aa6cd5ae3793931ee76a9c95f6cdaac::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInita592e24fce7d7558263560d96473a054::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInit8aa6cd5ae3793931ee76a9c95f6cdaac::$files;
$filesToLoad = \Composer\Autoload\ComposerStaticInita592e24fce7d7558263560d96473a054::$files;
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInit8aa6cd5ae3793931ee76a9c95f6cdaac
class ComposerStaticInita592e24fce7d7558263560d96473a054
{
public static $files = array (
'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php',
@ -3099,9 +3099,9 @@ class ComposerStaticInit8aa6cd5ae3793931ee76a9c95f6cdaac
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit8aa6cd5ae3793931ee76a9c95f6cdaac::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit8aa6cd5ae3793931ee76a9c95f6cdaac::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit8aa6cd5ae3793931ee76a9c95f6cdaac::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInita592e24fce7d7558263560d96473a054::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInita592e24fce7d7558263560d96473a054::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInita592e24fce7d7558263560d96473a054::$classMap;
}, null, ClassLoader::class);
}