From 3aecd9de93e344adf09084ed6702c8bdef29c4f8 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Mon, 5 Jun 2023 15:41:37 +0000 Subject: [PATCH] Updated Rector to commit c567d5d44340e83f62e8599832af4019d7ef37b3 https://github.com/rectorphp/rector-src/commit/c567d5d44340e83f62e8599832af4019d7ef37b3 Remove removeNode() from ClassPropertyAssignToConstructorPromotionRector (#4090) --- .../PromotedPropertyCandidateResolver.php | 19 ++++++-------- ...ertyAssignToConstructorPromotionRector.php | 15 +++++++---- .../PropertyPromotionCandidate.php | 25 ++++++++++--------- src/Application/VersionResolver.php | 4 +-- vendor/autoload.php | 2 +- vendor/composer/autoload_real.php | 10 ++++---- vendor/composer/autoload_static.php | 8 +++--- 7 files changed, 42 insertions(+), 41 deletions(-) diff --git a/rules/Php80/NodeAnalyzer/PromotedPropertyCandidateResolver.php b/rules/Php80/NodeAnalyzer/PromotedPropertyCandidateResolver.php index e8366d18b8e..cde81954eeb 100644 --- a/rules/Php80/NodeAnalyzer/PromotedPropertyCandidateResolver.php +++ b/rules/Php80/NodeAnalyzer/PromotedPropertyCandidateResolver.php @@ -15,7 +15,6 @@ use PhpParser\Node\Stmt\Property; use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\Core\PhpParser\Comparing\NodeComparator; use Rector\Core\PhpParser\Node\BetterNodeFinder; -use Rector\Core\ValueObject\MethodName; use Rector\NodeNameResolver\NodeNameResolver; use Rector\Php80\ValueObject\PropertyPromotionCandidate; final class PromotedPropertyCandidateResolver @@ -50,12 +49,8 @@ final class PromotedPropertyCandidateResolver /** * @return PropertyPromotionCandidate[] */ - public function resolveFromClass(Class_ $class) : array + public function resolveFromClass(Class_ $class, ClassMethod $constructClassMethod) : array { - $constructClassMethod = $class->getMethod(MethodName::CONSTRUCT); - if (!$constructClassMethod instanceof ClassMethod) { - return []; - } $propertyPromotionCandidates = []; foreach ($class->getProperties() as $property) { $propertyCount = \count($property->props); @@ -77,13 +72,13 @@ final class PromotedPropertyCandidateResolver $firstParamAsVariable = $this->resolveFirstParamUses($constructClassMethod); // match property name to assign in constructor foreach ((array) $constructClassMethod->stmts as $stmt) { - if ($stmt instanceof Expression) { - $stmt = $stmt->expr; - } - if (!$stmt instanceof Assign) { + if (!$stmt instanceof Expression) { continue; } - $assign = $stmt; + if (!$stmt->expr instanceof Assign) { + continue; + } + $assign = $stmt->expr; // promoted property must use non-static property only if (!$assign->var instanceof PropertyFetch) { continue; @@ -103,7 +98,7 @@ final class PromotedPropertyCandidateResolver if ($this->shouldSkipParam($matchedParam, $assignedExpr, $firstParamAsVariable)) { continue; } - return new PropertyPromotionCandidate($property, $assign, $matchedParam); + return new PropertyPromotionCandidate($property, $matchedParam, $stmt); } return null; } diff --git a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php index f8c34ee788a..8d78bf94ff7 100644 --- a/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php +++ b/rules/Php80/Rector/Class_/ClassPropertyAssignToConstructorPromotionRector.php @@ -133,12 +133,14 @@ CODE_SAMPLE */ public function refactor(Node $node) : ?Node { - $promotionCandidates = $this->promotedPropertyCandidateResolver->resolveFromClass($node); + $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); + if (!$constructClassMethod instanceof ClassMethod) { + return null; + } + $promotionCandidates = $this->promotedPropertyCandidateResolver->resolveFromClass($node, $constructClassMethod); if ($promotionCandidates === []) { return null; } - /** @var ClassMethod $constructClassMethod */ - $constructClassMethod = $node->getMethod(MethodName::CONSTRUCT); $classMethodPhpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($constructClassMethod); foreach ($promotionCandidates as $promotionCandidate) { // does property have some useful annotations? @@ -150,8 +152,11 @@ CODE_SAMPLE if (!$this->makePropertyPromotionGuard->isLegal($node, $property, $param, $this->inlinePublic)) { continue; } - $this->removeNode($property); - $this->removeNode($promotionCandidate->getAssign()); + $propertyStmtKey = $property->getAttribute(AttributeKey::STMT_KEY); + unset($node->stmts[$propertyStmtKey]); + // remove assign + $assignStmtPosition = $promotionCandidate->getStmtPosition(); + unset($constructClassMethod->stmts[$assignStmtPosition]); $property = $promotionCandidate->getProperty(); $paramName = $this->getName($param); // rename also following calls diff --git a/rules/Php80/ValueObject/PropertyPromotionCandidate.php b/rules/Php80/ValueObject/PropertyPromotionCandidate.php index 3808a79da33..3f95f34e69b 100644 --- a/rules/Php80/ValueObject/PropertyPromotionCandidate.php +++ b/rules/Php80/ValueObject/PropertyPromotionCandidate.php @@ -3,9 +3,10 @@ declare (strict_types=1); namespace Rector\Php80\ValueObject; -use PhpParser\Node\Expr\Assign; use PhpParser\Node\Param; +use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Property; +use Rector\NodeTypeResolver\Node\AttributeKey; final class PropertyPromotionCandidate { /** @@ -13,32 +14,32 @@ final class PropertyPromotionCandidate * @var \PhpParser\Node\Stmt\Property */ private $property; - /** - * @readonly - * @var \PhpParser\Node\Expr\Assign - */ - private $assign; /** * @readonly * @var \PhpParser\Node\Param */ private $param; - public function __construct(Property $property, Assign $assign, Param $param) + /** + * @readonly + * @var \PhpParser\Node\Stmt\Expression + */ + private $expression; + public function __construct(Property $property, Param $param, Expression $expression) { $this->property = $property; - $this->assign = $assign; $this->param = $param; + $this->expression = $expression; } public function getProperty() : Property { return $this->property; } - public function getAssign() : Assign - { - return $this->assign; - } public function getParam() : Param { return $this->param; } + public function getStmtPosition() : int + { + return $this->expression->getAttribute(AttributeKey::STMT_KEY); + } } diff --git a/src/Application/VersionResolver.php b/src/Application/VersionResolver.php index d56a9e2a233..b65629265a7 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 = '2915ab78d47cbbc8c2c09e6154eef83b7f75cbf2'; + public const PACKAGE_VERSION = 'c567d5d44340e83f62e8599832af4019d7ef37b3'; /** * @api * @var string */ - public const RELEASE_DATE = '2023-06-05 15:29:02'; + public const RELEASE_DATE = '2023-06-05 15:37:04'; /** * @var int */ diff --git a/vendor/autoload.php b/vendor/autoload.php index 3e2bad2ee1e..f2778512800 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 ComposerAutoloaderInit4561e810ec3f9c6565d086afba307b5d::getLoader(); +return ComposerAutoloaderInit394d9dd8e972072b638bd44515fa169a::getLoader(); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 14cfbe6b6ea..1eca7bd1cde 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit4561e810ec3f9c6565d086afba307b5d +class ComposerAutoloaderInit394d9dd8e972072b638bd44515fa169a { private static $loader; @@ -22,17 +22,17 @@ class ComposerAutoloaderInit4561e810ec3f9c6565d086afba307b5d return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit4561e810ec3f9c6565d086afba307b5d', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit394d9dd8e972072b638bd44515fa169a', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit4561e810ec3f9c6565d086afba307b5d', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit394d9dd8e972072b638bd44515fa169a', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit4561e810ec3f9c6565d086afba307b5d::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit394d9dd8e972072b638bd44515fa169a::getInitializer($loader)); $loader->setClassMapAuthoritative(true); $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit4561e810ec3f9c6565d086afba307b5d::$files; + $filesToLoad = \Composer\Autoload\ComposerStaticInit394d9dd8e972072b638bd44515fa169a::$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 ba6ed8eb78a..0f581ed5c64 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit4561e810ec3f9c6565d086afba307b5d +class ComposerStaticInit394d9dd8e972072b638bd44515fa169a { public static $files = array ( 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', @@ -3048,9 +3048,9 @@ class ComposerStaticInit4561e810ec3f9c6565d086afba307b5d public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit4561e810ec3f9c6565d086afba307b5d::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit4561e810ec3f9c6565d086afba307b5d::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit4561e810ec3f9c6565d086afba307b5d::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit394d9dd8e972072b638bd44515fa169a::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit394d9dd8e972072b638bd44515fa169a::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit394d9dd8e972072b638bd44515fa169a::$classMap; }, null, ClassLoader::class); }