EVOLUTION-NINJA
Edit File: PropertyFetchAssignManipulator.php
<?php declare (strict_types=1); namespace Rector\Core\NodeManipulator; use PhpParser\Node; use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\Variable; use Rector\NodeNameResolver\NodeNameResolver; use RectorPrefix20211231\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser; final class PropertyFetchAssignManipulator { /** * @readonly * @var \Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser */ private $simpleCallableNodeTraverser; /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; public function __construct(\RectorPrefix20211231\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver) { $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->nodeNameResolver = $nodeNameResolver; } /** * @return string[] */ public function getPropertyNamesOfAssignOfVariable(\PhpParser\Node $node, string $paramName) : array { $propertyNames = []; $this->simpleCallableNodeTraverser->traverseNodesWithCallable($node, function (\PhpParser\Node $node) use($paramName, &$propertyNames) { if (!$node instanceof \PhpParser\Node\Expr\Assign) { return null; } if (!$this->isVariableAssignToThisPropertyFetch($node, $paramName)) { return null; } /** @var Assign $node */ $propertyName = $this->nodeNameResolver->getName($node->expr); if (\is_string($propertyName)) { $propertyNames[] = $propertyName; } return null; }); return $propertyNames; } /** * Matches: * "$this->someValue = $<variableName>;" */ private function isVariableAssignToThisPropertyFetch(\PhpParser\Node\Expr\Assign $assign, string $variableName) : bool { if (!$assign->expr instanceof \PhpParser\Node\Expr\Variable) { return \false; } if (!$this->nodeNameResolver->isName($assign->expr, $variableName)) { return \false; } if (!$assign->var instanceof \PhpParser\Node\Expr\PropertyFetch) { return \false; } $propertyFetch = $assign->var; // must be local property return $this->nodeNameResolver->isName($propertyFetch->var, 'this'); } }