mirror of https://github.com/rectorphp/rector.git
Updated Rector to commit c567d5d44340e83f62e8599832af4019d7ef37b3
c567d5d443
Remove removeNode() from ClassPropertyAssignToConstructorPromotionRector (#4090)
This commit is contained in:
parent
35c3aab2b4
commit
3aecd9de93
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
|||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit4561e810ec3f9c6565d086afba307b5d::getLoader();
|
||||
return ComposerAutoloaderInit394d9dd8e972072b638bd44515fa169a::getLoader();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue