mirror of
https://github.com/rectorphp/rector.git
synced 2025-04-16 13:33:13 +02:00
Updated Rector to commit 9f6e80e2901da6caf3c77c4b7cb06cb384042238
9f6e80e290
[StaticTypeMapper] Remove parent attribute usage on FullyQualifiedNodeMapper (#4395)
This commit is contained in:
parent
4ac2f7ee3a
commit
872db0f1a4
@ -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 === '') {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
2
vendor/autoload.php
vendored
@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit8aa6cd5ae3793931ee76a9c95f6cdaac::getLoader();
|
||||
return ComposerAutoloaderInita592e24fce7d7558263560d96473a054::getLoader();
|
||||
|
10
vendor/composer/autoload_real.php
vendored
10
vendor/composer/autoload_real.php
vendored
@ -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;
|
||||
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user