From b140c862424c9d59de5600b6fe32124d47040613 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 21 Jan 2024 23:15:27 +0000 Subject: [PATCH] Updated Rector to commit 46dd96122bdeb7b893f518bd131c69093b6da752 https://github.com/rectorphp/rector-src/commit/46dd96122bdeb7b893f518bd131c69093b6da752 [Renaming] Remove rename class name (#5488) --- rules/CodingStyle/Naming/ClassNaming.php | 5 - .../Renaming/NodeManipulator/ClassRenamer.php | 130 ++---------------- src/Application/VersionResolver.php | 4 +- 3 files changed, 11 insertions(+), 128 deletions(-) diff --git a/rules/CodingStyle/Naming/ClassNaming.php b/rules/CodingStyle/Naming/ClassNaming.php index 9e5e170e461..1d25dac3576 100644 --- a/rules/CodingStyle/Naming/ClassNaming.php +++ b/rules/CodingStyle/Naming/ClassNaming.php @@ -30,9 +30,4 @@ final class ClassNaming } return $name; } - public function getNamespace(string $fullyQualifiedName) : ?string - { - $fullyQualifiedName = \trim($fullyQualifiedName, '\\'); - return Strings::before($fullyQualifiedName, '\\', -1); - } } diff --git a/rules/Renaming/NodeManipulator/ClassRenamer.php b/rules/Renaming/NodeManipulator/ClassRenamer.php index 61add75c5bb..8308bd80b2a 100644 --- a/rules/Renaming/NodeManipulator/ClassRenamer.php +++ b/rules/Renaming/NodeManipulator/ClassRenamer.php @@ -5,12 +5,9 @@ namespace Rector\Renaming\NodeManipulator; use PhpParser\Node; use PhpParser\Node\AttributeGroup; -use PhpParser\Node\Identifier; -use PhpParser\Node\Name; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassLike; -use PhpParser\Node\Stmt\Namespace_; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ReflectionProvider; @@ -19,39 +16,15 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocClassRenamer; use Rector\BetterPhpDocParser\ValueObject\NodeTypes; -use Rector\CodingStyle\Naming\ClassNaming; use Rector\Comments\NodeDocBlock\DocBlockUpdater; -use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PhpDoc\NodeAnalyzer\DocBlockClassRenamer; use Rector\NodeTypeResolver\ValueObject\OldToNewType; -use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; -use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Renaming\Collector\RenamedNameCollector; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\Util\FileHasher; final class ClassRenamer { - /** - * @readonly - * @var \Rector\PhpParser\Node\BetterNodeFinder - */ - private $betterNodeFinder; - /** - * @readonly - * @var \Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser - */ - private $simpleCallableNodeTraverser; - /** - * @readonly - * @var \Rector\CodingStyle\Naming\ClassNaming - */ - private $classNaming; - /** - * @readonly - * @var \Rector\NodeNameResolver\NodeNameResolver - */ - private $nodeNameResolver; /** * @readonly * @var \Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocClassRenamer @@ -87,20 +60,12 @@ final class ClassRenamer * @var \Rector\Renaming\Collector\RenamedNameCollector */ private $renamedNameCollector; - /** - * @var string[] - */ - private $alreadyProcessedClasses = []; /** * @var array */ private $oldToNewTypesByCacheKey = []; - public function __construct(BetterNodeFinder $betterNodeFinder, SimpleCallableNodeTraverser $simpleCallableNodeTraverser, ClassNaming $classNaming, NodeNameResolver $nodeNameResolver, PhpDocClassRenamer $phpDocClassRenamer, PhpDocInfoFactory $phpDocInfoFactory, DocBlockClassRenamer $docBlockClassRenamer, ReflectionProvider $reflectionProvider, FileHasher $fileHasher, DocBlockUpdater $docBlockUpdater, RenamedNameCollector $renamedNameCollector) + public function __construct(PhpDocClassRenamer $phpDocClassRenamer, PhpDocInfoFactory $phpDocInfoFactory, DocBlockClassRenamer $docBlockClassRenamer, ReflectionProvider $reflectionProvider, FileHasher $fileHasher, DocBlockUpdater $docBlockUpdater, RenamedNameCollector $renamedNameCollector) { - $this->betterNodeFinder = $betterNodeFinder; - $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; - $this->classNaming = $classNaming; - $this->nodeNameResolver = $nodeNameResolver; $this->phpDocClassRenamer = $phpDocClassRenamer; $this->phpDocInfoFactory = $phpDocInfoFactory; $this->docBlockClassRenamer = $docBlockClassRenamer; @@ -125,9 +90,6 @@ final class ClassRenamer return $node; } } - if ($node instanceof Namespace_) { - return $this->refactorNamespace($node, $oldToNewClasses); - } if ($node instanceof ClassLike) { return $this->refactorClassLike($node, $oldToNewClasses, $scope); } @@ -180,65 +142,16 @@ final class ClassRenamer $this->renamedNameCollector->add($stringName); return new FullyQualified($newName); } - /** - * @param array $oldToNewClasses - */ - private function refactorNamespace(Namespace_ $namespace, array $oldToNewClasses) : ?Node - { - $name = $this->nodeNameResolver->getName($namespace); - if ($name === null) { - return null; - } - $classLike = $this->getClassOfNamespaceToRefactor($namespace, $oldToNewClasses); - if (!$classLike instanceof ClassLike) { - return null; - } - $currentName = (string) $this->nodeNameResolver->getName($classLike); - $newClassFullyQualified = $oldToNewClasses[$currentName]; - if ($this->reflectionProvider->hasClass($newClassFullyQualified)) { - return null; - } - $newNamespace = $this->classNaming->getNamespace($newClassFullyQualified); - // Renaming to class without namespace (example MyNamespace\DateTime -> DateTimeImmutable) - if (!\is_string($newNamespace)) { - $classLike->name = new Identifier($newClassFullyQualified); - return $classLike; - } - $namespace->name = new Name($newNamespace); - return $namespace; - } /** * @param array $oldToNewClasses */ private function refactorClassLike(ClassLike $classLike, array $oldToNewClasses, ?Scope $scope) : ?Node { // rename interfaces - $this->renameClassImplements($classLike, $oldToNewClasses, $scope); - $className = (string) $this->nodeNameResolver->getName($classLike); - $newName = $oldToNewClasses[$className] ?? null; - if ($newName === null) { - return null; + if ($this->renameClassImplements($classLike, $oldToNewClasses, $scope)) { + return $classLike; } - // prevents re-iterating same class in endless loop - if (\in_array($className, $this->alreadyProcessedClasses, \true)) { - return null; - } - $this->alreadyProcessedClasses[] = $className; - $newName = $oldToNewClasses[$className]; - $newClassNamePart = $this->nodeNameResolver->getShortName($newName); - $newNamespacePart = $this->classNaming->getNamespace($newName); - if ($this->isClassAboutToBeDuplicated($newName)) { - return null; - } - $classLike->name = new Identifier($newClassNamePart); - $classNamingGetNamespace = $this->classNaming->getNamespace($className); - // Old class did not have any namespace, we need to wrap class with Namespace_ node - if ($newNamespacePart !== null && $classNamingGetNamespace === null) { - $this->changeNameToFullyQualifiedName($classLike); - $name = new Name($newNamespacePart); - return new Namespace_($name, [$classLike]); - } - return $classLike; + return null; } /** * Checks validity: @@ -267,28 +180,15 @@ final class ClassRenamer } return \false; } - /** - * @param array $oldToNewClasses - */ - private function getClassOfNamespaceToRefactor(Namespace_ $namespace, array $oldToNewClasses) : ?ClassLike - { - $foundClass = $this->betterNodeFinder->findFirst($namespace, function (Node $node) use($oldToNewClasses) : bool { - if (!$node instanceof ClassLike) { - return \false; - } - $classLikeName = $this->nodeNameResolver->getName($node); - return isset($oldToNewClasses[$classLikeName]); - }); - return $foundClass instanceof ClassLike ? $foundClass : null; - } /** * @param string[] $oldToNewClasses */ - private function renameClassImplements(ClassLike $classLike, array $oldToNewClasses, ?Scope $scope) : void + private function renameClassImplements(ClassLike $classLike, array $oldToNewClasses, ?Scope $scope) : bool { if (!$classLike instanceof Class_) { - return; + return \false; } + $hasChanged = \false; $classLike->implements = \array_unique($classLike->implements); foreach ($classLike->implements as $key => $implementName) { $virtualNode = (bool) $implementName->getAttribute(AttributeKey::VIRTUAL_NODE); @@ -302,21 +202,9 @@ final class ClassRenamer continue; } $classLike->implements[$key] = new FullyQualified($newName); + $hasChanged = \true; } - } - private function isClassAboutToBeDuplicated(string $newName) : bool - { - return $this->reflectionProvider->hasClass($newName); - } - private function changeNameToFullyQualifiedName(ClassLike $classLike) : void - { - $this->simpleCallableNodeTraverser->traverseNodesWithCallable($classLike, static function (Node $node) { - if (!$node instanceof FullyQualified) { - return null; - } - // invoke override - $node->setAttribute(AttributeKey::ORIGINAL_NODE, null); - }); + return $hasChanged; } private function isValidClassNameChange(FullyQualified $fullyQualified, ClassReflection $classReflection) : bool { diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index ed2d7e43fd8..230e8912cfd 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 = 'be53faca08c2f5c3ebafb636e766788676f54d28'; + public const PACKAGE_VERSION = '46dd96122bdeb7b893f518bd131c69093b6da752'; /** * @api * @var string */ - public const RELEASE_DATE = '2024-01-21 22:10:56'; + public const RELEASE_DATE = '2024-01-22 06:13:21'; /** * @var int */