diff --git a/rules/Renaming/Rector/Name/RenameClassRector.php b/rules/Renaming/Rector/Name/RenameClassRector.php index e98cbd736ca..a09de4ae8c0 100644 --- a/rules/Renaming/Rector/Name/RenameClassRector.php +++ b/rules/Renaming/Rector/Name/RenameClassRector.php @@ -15,6 +15,7 @@ use PHPStan\Reflection\ReflectionProvider; use Rector\Configuration\RenamedClassesDataCollector; use Rector\Contract\Rector\ConfigurableRectorInterface; +use Rector\Exception\Configuration\InvalidConfigurationException; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; use Rector\Renaming\NodeManipulator\ClassRenamer; @@ -119,6 +120,15 @@ public function configure(array $configuration): void Assert::allString($configuration); Assert::allString(array_keys($configuration)); + foreach ($configuration as $oldClass => $newClass) { + if ($oldClass === $newClass) { + throw new InvalidConfigurationException(sprintf( + 'Rename "%s" class to a different one, as the old and new class name are the same', + $oldClass + )); + } + } + $this->renamedClassesDataCollector->addOldToNewClasses($configuration); } diff --git a/tests/Renaming/Rector/Name/RenameClassRector/SameOldToNewClassTest.php b/tests/Renaming/Rector/Name/RenameClassRector/SameOldToNewClassTest.php new file mode 100644 index 00000000000..0a595021233 --- /dev/null +++ b/tests/Renaming/Rector/Name/RenameClassRector/SameOldToNewClassTest.php @@ -0,0 +1,23 @@ +make(RenameClassRector::class); + + $this->expectException(InvalidConfigurationException::class); + + $renameClassRector->configure([ + 'App\SomeClass' => 'App\SomeClass', + ]); + } +}