diff --git a/packages/NodeRemoval/NodeRemover.php b/packages/NodeRemoval/NodeRemover.php index aa15c3d0c65..741ee2ed86f 100644 --- a/packages/NodeRemoval/NodeRemover.php +++ b/packages/NodeRemoval/NodeRemover.php @@ -38,13 +38,4 @@ final class NodeRemover $this->nodesToRemoveCollector->addNodeToRemove($node); $this->rectorChangeCollector->notifyNodeFileInfo($node); } - /** - * @param Node[] $nodes - */ - public function removeNodes(array $nodes) : void - { - foreach ($nodes as $node) { - $this->removeNode($node); - } - } } diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php index a45aed75b15..11ff8c48618 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedConstructorParamRector.php @@ -9,7 +9,6 @@ use PhpParser\Node\Stmt\ClassMethod; use Rector\Core\NodeAnalyzer\ParamAnalyzer; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\MethodName; -use Rector\Removing\NodeManipulator\ComplexNodeRemover; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** @@ -22,15 +21,9 @@ final class RemoveUnusedConstructorParamRector extends AbstractRector * @var \Rector\Core\NodeAnalyzer\ParamAnalyzer */ private $paramAnalyzer; - /** - * @readonly - * @var \Rector\Removing\NodeManipulator\ComplexNodeRemover - */ - private $complexNodeRemover; - public function __construct(ParamAnalyzer $paramAnalyzer, ComplexNodeRemover $complexNodeRemover) + public function __construct(ParamAnalyzer $paramAnalyzer) { $this->paramAnalyzer = $paramAnalyzer; - $this->complexNodeRemover = $complexNodeRemover; } public function getRuleDefinition() : RuleDefinition { @@ -63,44 +56,45 @@ CODE_SAMPLE */ public function getNodeTypes() : array { - return [ClassMethod::class]; + return [Class_::class]; } /** - * @param ClassMethod $node + * @param Class_ $node */ public function refactor(Node $node) : ?Node { - if (!$this->isName($node, MethodName::CONSTRUCT)) { + $constructorClassMethod = $node->getMethod(MethodName::CONSTRUCT); + if (!$constructorClassMethod instanceof ClassMethod) { return null; } - if ($node->params === []) { + if ($constructorClassMethod->params === []) { return null; } - if ($this->paramAnalyzer->hasPropertyPromotion($node->params)) { + if ($this->paramAnalyzer->hasPropertyPromotion($constructorClassMethod->params)) { return null; } - $class = $this->betterNodeFinder->findParentType($node, Class_::class); - if (!$class instanceof Class_) { + if ($constructorClassMethod->isAbstract()) { return null; } - if ($node->isAbstract()) { + $changedConstructorClassMethod = $this->processRemoveParams($constructorClassMethod); + if (!$changedConstructorClassMethod instanceof ClassMethod) { return null; } - return $this->processRemoveParams($node); + return $node; } private function processRemoveParams(ClassMethod $classMethod) : ?ClassMethod { - $paramKeysToBeRemoved = []; + $hasChanged = \false; foreach ($classMethod->params as $key => $param) { if ($this->paramAnalyzer->isParamUsedInClassMethod($classMethod, $param)) { continue; } - $paramKeysToBeRemoved[] = $key; + unset($classMethod->params[$key]); + $hasChanged = \true; } - $removedParamKeys = $this->complexNodeRemover->processRemoveParamWithKeys($classMethod->params, $paramKeysToBeRemoved); - if ($removedParamKeys === []) { - return null; + if ($hasChanged) { + return $classMethod; } - return $classMethod; + return null; } } diff --git a/rules/Privatization/Rector/Property/ChangeReadOnlyPropertyWithDefaultValueToConstantRector.php b/rules/Privatization/Rector/Property/ChangeReadOnlyPropertyWithDefaultValueToConstantRector.php index ee92edd5da5..f2541f37cba 100644 --- a/rules/Privatization/Rector/Property/ChangeReadOnlyPropertyWithDefaultValueToConstantRector.php +++ b/rules/Privatization/Rector/Property/ChangeReadOnlyPropertyWithDefaultValueToConstantRector.php @@ -116,9 +116,7 @@ CODE_SAMPLE if ($this->propertyManipulator->isPropertyChangeable($class, $node, $scope)) { return null; } - /** @var Class_ $classLike */ - $classLike = $this->betterNodeFinder->findParentType($node, Class_::class); - $this->propertyFetchWithConstFetchReplacer->replace($classLike, $node); + $this->propertyFetchWithConstFetchReplacer->replace($class, $node); return $this->classConstantFactory->createFromProperty($node); } private function shouldSkip(Property $property) : bool diff --git a/rules/Removing/NodeManipulator/ComplexNodeRemover.php b/rules/Removing/NodeManipulator/ComplexNodeRemover.php index 1caab82f18b..1f8f9ac62a8 100644 --- a/rules/Removing/NodeManipulator/ComplexNodeRemover.php +++ b/rules/Removing/NodeManipulator/ComplexNodeRemover.php @@ -10,7 +10,6 @@ use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Expr\Variable; -use PhpParser\Node\Param; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; @@ -119,37 +118,12 @@ final class ComplexNodeRemover return \false; } $this->removeConstructorDependency($class, $propertyName); - $this->nodeRemover->removeNodes($expressions); + foreach ($expressions as $expression) { + $this->nodeRemover->removeNode($expression); + } $this->nodeRemover->removeNode($property); return \true; } - /** - * @param Param[] $params - * @param int[] $paramKeysToBeRemoved - * @return int[] - */ - public function processRemoveParamWithKeys(array $params, array $paramKeysToBeRemoved) : array - { - $totalKeys = \count($params) - 1; - $removedParamKeys = []; - foreach ($paramKeysToBeRemoved as $paramKeyToBeRemoved) { - $startNextKey = $paramKeyToBeRemoved + 1; - for ($nextKey = $startNextKey; $nextKey <= $totalKeys; ++$nextKey) { - if (!isset($params[$nextKey])) { - // no next param, break the inner loop, remove the param - break; - } - if (\in_array($nextKey, $paramKeysToBeRemoved, \true)) { - // keep searching next key not in $paramKeysToBeRemoved - continue; - } - return []; - } - $this->nodeRemover->removeNode($params[$paramKeyToBeRemoved]); - $removedParamKeys[] = $paramKeyToBeRemoved; - } - return $removedParamKeys; - } private function removeConstructorDependency(Class_ $class, string $propertyName) : void { $classMethod = $class->getMethod(MethodName::CONSTRUCT); @@ -186,7 +160,12 @@ final class ComplexNodeRemover if ($paramKeysToBeRemoved === []) { return; } - $this->processRemoveParamWithKeys($classMethod->getParams(), $paramKeysToBeRemoved); + foreach (\array_keys($classMethod->params) as $key) { + if (!\in_array($key, $paramKeysToBeRemoved, \true)) { + continue; + } + unset($classMethod->params[$key]); + } } /** * @return StaticPropertyFetch[]|PropertyFetch[] diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index 7eecb2b380b..7b0f862fcf0 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 = '32510e0dc7ee63d5a38c7d088aaf82eee605c516'; + public const PACKAGE_VERSION = 'f15cbd7a7d1913287cf67fa9ee2311ebee11cae3'; /** * @api * @var string */ - public const RELEASE_DATE = '2023-05-29 09:12:48'; + public const RELEASE_DATE = '2023-05-29 09:34:48'; /** * @var int */ diff --git a/vendor/autoload.php b/vendor/autoload.php index 8afcb75d2f1..eb7f95dc48a 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) { require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit308338dff866dd8edbacc93b1ecfa91f::getLoader(); +return ComposerAutoloaderInit084ddcd2feb1a3ca5d184f7bc0409be6::getLoader(); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 160c2ce998a..5a5f8cde651 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit308338dff866dd8edbacc93b1ecfa91f +class ComposerAutoloaderInit084ddcd2feb1a3ca5d184f7bc0409be6 { private static $loader; @@ -22,17 +22,17 @@ class ComposerAutoloaderInit308338dff866dd8edbacc93b1ecfa91f return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit308338dff866dd8edbacc93b1ecfa91f', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit084ddcd2feb1a3ca5d184f7bc0409be6', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit308338dff866dd8edbacc93b1ecfa91f', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit084ddcd2feb1a3ca5d184f7bc0409be6', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit308338dff866dd8edbacc93b1ecfa91f::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit084ddcd2feb1a3ca5d184f7bc0409be6::getInitializer($loader)); $loader->setClassMapAuthoritative(true); $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit308338dff866dd8edbacc93b1ecfa91f::$files; + $filesToLoad = \Composer\Autoload\ComposerStaticInit084ddcd2feb1a3ca5d184f7bc0409be6::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index f86e85d784f..01bed6ea16a 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit308338dff866dd8edbacc93b1ecfa91f +class ComposerStaticInit084ddcd2feb1a3ca5d184f7bc0409be6 { public static $files = array ( 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', @@ -3083,9 +3083,9 @@ class ComposerStaticInit308338dff866dd8edbacc93b1ecfa91f public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit308338dff866dd8edbacc93b1ecfa91f::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit308338dff866dd8edbacc93b1ecfa91f::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit308338dff866dd8edbacc93b1ecfa91f::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit084ddcd2feb1a3ca5d184f7bc0409be6::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit084ddcd2feb1a3ca5d184f7bc0409be6::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit084ddcd2feb1a3ca5d184f7bc0409be6::$classMap; }, null, ClassLoader::class); }