mirror of https://github.com/rectorphp/rector.git
Updated Rector to commit 478b257792be25a6f32e1a7bf672d33d2832a574
478b257792
[Performance][AutoImport] Reduce double loop on NameImportingPostRector (#5105)
This commit is contained in:
parent
9cbcd589af
commit
1425f0b38c
|
@ -129,9 +129,6 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
$currentUses = $this->useImportsResolver->resolve();
|
||||
if ($this->classNameImportSkipper->shouldImportName($name, $currentUses)) {
|
||||
$nameInUse = $this->resolveNameInUse($name, $currentUses);
|
||||
if ($nameInUse instanceof FullyQualified) {
|
||||
return null;
|
||||
}
|
||||
if ($nameInUse instanceof Name) {
|
||||
return $nameInUse;
|
||||
}
|
||||
|
@ -141,9 +138,8 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
}
|
||||
/**
|
||||
* @param Use_[]|GroupUse[] $currentUses
|
||||
* @return null|\PhpParser\Node\Name|\PhpParser\Node\Name\FullyQualified
|
||||
*/
|
||||
private function resolveNameInUse(Name $name, array $currentUses)
|
||||
private function resolveNameInUse(Name $name, array $currentUses) : ?\PhpParser\Node\Name
|
||||
{
|
||||
$originalName = $name->getAttribute(AttributeKey::ORIGINAL_NAME);
|
||||
if (!$originalName instanceof FullyQualified) {
|
||||
|
@ -153,17 +149,16 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
if (\is_string($aliasName)) {
|
||||
return new Name($aliasName);
|
||||
}
|
||||
$isShortFullyQualifiedName = \substr_count($name->toCodeString(), '\\') === 1;
|
||||
if (!$isShortFullyQualifiedName) {
|
||||
return $this->resolveLongNameInUseName($name, $currentUses);
|
||||
}
|
||||
return $this->resolveConflictedShortNameInUse($name, $currentUses);
|
||||
return $this->resolveLongNameInUseName($name, $currentUses);
|
||||
}
|
||||
/**
|
||||
* @param Use_[]|GroupUse[] $currentUses
|
||||
*/
|
||||
private function resolveLongNameInUseName(Name $name, array $currentUses) : ?Name
|
||||
{
|
||||
if (\substr_count($name->toCodeString(), '\\') === 1) {
|
||||
return null;
|
||||
}
|
||||
$lastName = $name->getLast();
|
||||
foreach ($currentUses as $currentUse) {
|
||||
foreach ($currentUse->uses as $useUse) {
|
||||
|
@ -177,25 +172,4 @@ final class NameImportingPostRector extends \Rector\PostRector\Rector\AbstractPo
|
|||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* @param Use_[]|GroupUse[] $currentUses
|
||||
*/
|
||||
private function resolveConflictedShortNameInUse(Name $name, array $currentUses) : ?FullyQualified
|
||||
{
|
||||
$currentName = $name->toString();
|
||||
foreach ($currentUses as $currentUse) {
|
||||
$prefix = $this->useImportsResolver->resolvePrefix($currentUse);
|
||||
foreach ($currentUse->uses as $useUse) {
|
||||
$useName = $prefix . $name->toString();
|
||||
$lastUseName = $name->getLast();
|
||||
if (!$useUse->alias instanceof Identifier && $useName !== $currentName && $lastUseName === $currentName) {
|
||||
return new FullyQualified($currentName);
|
||||
}
|
||||
if ($useUse->alias instanceof Identifier && $useUse->alias->toString() === $currentName) {
|
||||
return new FullyQualified($currentName);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ declare (strict_types=1);
|
|||
namespace Rector\CodingStyle\ClassNameImport;
|
||||
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Identifier;
|
||||
use PhpParser\Node\Name;
|
||||
use PhpParser\Node\Stmt\GroupUse;
|
||||
use PhpParser\Node\Stmt\Use_;
|
||||
|
@ -57,9 +58,11 @@ final class ClassNameImportSkipper
|
|||
return \true;
|
||||
}
|
||||
$stringName = $name->toString();
|
||||
$nameLastName = \strtolower($name->getLast());
|
||||
$lastUseName = $name->getLast();
|
||||
$nameLastName = \strtolower($lastUseName);
|
||||
foreach ($uses as $use) {
|
||||
$prefix = $this->useImportsResolver->resolvePrefix($use);
|
||||
$useName = $prefix . $stringName;
|
||||
foreach ($use->uses as $useUse) {
|
||||
$useUseLastName = \strtolower($useUse->name->getLast());
|
||||
if ($useUseLastName !== $nameLastName) {
|
||||
|
@ -68,11 +71,21 @@ final class ClassNameImportSkipper
|
|||
if ($this->isJustRenamedClass($stringName, $prefix, $useUse)) {
|
||||
continue;
|
||||
}
|
||||
if ($this->isConflictedShortNameInUse($useUse, $useName, $lastUseName, $stringName)) {
|
||||
return \false;
|
||||
}
|
||||
return $prefix . $useUse->name->toString() === $stringName;
|
||||
}
|
||||
}
|
||||
return \true;
|
||||
}
|
||||
private function isConflictedShortNameInUse(UseUse $useUse, string $useName, string $lastUseName, string $stringName) : bool
|
||||
{
|
||||
if (!$useUse->alias instanceof Identifier && $useName !== $stringName && $lastUseName === $stringName) {
|
||||
return \true;
|
||||
}
|
||||
return $useUse->alias instanceof Identifier && $useUse->alias->toString() === $stringName;
|
||||
}
|
||||
private function isJustRenamedClass(string $stringName, string $prefix, UseUse $useUse) : bool
|
||||
{
|
||||
$useUseNameString = $prefix . $useUse->name->toString();
|
||||
|
|
|
@ -19,12 +19,12 @@ final class VersionResolver
|
|||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const PACKAGE_VERSION = 'c9e0823ef35b56b8cc78005c90d7462688d44c09';
|
||||
public const PACKAGE_VERSION = '478b257792be25a6f32e1a7bf672d33d2832a574';
|
||||
/**
|
||||
* @api
|
||||
* @var string
|
||||
*/
|
||||
public const RELEASE_DATE = '2023-10-02 18:07:50';
|
||||
public const RELEASE_DATE = '2023-10-02 22:38:10';
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue