diff --git a/fixtures/d8/rector_examples/user_password.php b/fixtures/d8/rector_examples/user_password.php new file mode 100644 index 00000000..0e9fc8c9 --- /dev/null +++ b/fixtures/d8/rector_examples/user_password.php @@ -0,0 +1,10 @@ +getVersion(), '<')) { + return null; + } + + $result = $this->doRefactor($node); + + if ($result === null) { + return $result; + } + + if($node instanceof Node\Expr\CallLike && $result instanceof Node\Expr\CallLike) { + return $this->createBcCallOnCallLike($node, $result); + } + + return $result; + } + + /** + * Process Node of matched type + * @return Node|Node[]|null + */ + abstract protected function doRefactor(Node $node); + + private function createBcCallOnCallLike(Node\Expr\CallLike $node, Node\Expr\CallLike $result): Node\Expr\StaticCall + { + $clonedNode = clone $node; + return $this->nodeFactory->createStaticCall(DeprecationHelper::class, 'backwardsCompatibleCall', [ + $this->nodeFactory->createClassConstFetch(\Drupal::class, 'VERSION'), + $this->getVersion(), + new ArrowFunction(['expr' => $clonedNode]), + new ArrowFunction(['expr' => $result]), + ]); + } + +} diff --git a/src/Rector/Deprecation/Base/AbstractDrupalRector.php b/src/Rector/Deprecation/Base/AbstractDrupalRector.php new file mode 100644 index 00000000..e69de29b diff --git a/src/Rector/Deprecation/UserPasswordRector.php b/src/Rector/Deprecation/UserPasswordRector.php index c698d882..e13763f9 100644 --- a/src/Rector/Deprecation/UserPasswordRector.php +++ b/src/Rector/Deprecation/UserPasswordRector.php @@ -2,12 +2,12 @@ namespace DrupalRector\Rector\Deprecation; +use DrupalRector\Rector\AbstractDrupalCoreRector; use PhpParser\Node; -use Rector\Core\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; -final class UserPasswordRector extends AbstractRector +final class UserPasswordRector extends AbstractDrupalCoreRector { /** * @inheritdoc @@ -39,10 +39,15 @@ public function getNodeTypes(): array ]; } + public function getVersion(): string + { + return '9.1.0'; + } + /** * @inheritdoc */ - public function refactor(Node $node): ?Node + public function doRefactor(Node $node): ?Node { assert($node instanceof Node\Expr\FuncCall); if ($this->getName($node->name) !== 'user_password') { diff --git a/stubs/Drupal/Core/Component/Utility/DeprecationHelper.php b/stubs/Drupal/Core/Component/Utility/DeprecationHelper.php new file mode 100644 index 00000000..fe81241f --- /dev/null +++ b/stubs/Drupal/Core/Component/Utility/DeprecationHelper.php @@ -0,0 +1,43 @@ +=') ? $current() : $deprecated(); + } + +} diff --git a/stubs/Drupal/Drupal.php b/stubs/Drupal/Drupal.php new file mode 100644 index 00000000..4751c67f --- /dev/null +++ b/stubs/Drupal/Drupal.php @@ -0,0 +1,9 @@ + ----- generate(); - $other_password = \Drupal::service('password_generator')->generate(8); +function simple_example() +{ + $password = \Drupal\Component\Utility\DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '9.1.0', fn() => user_password(), fn() => \Drupal::service('password_generator')->generate()); + $other_password = \Drupal\Component\Utility\DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '9.1.0', fn() => user_password(8), fn() => \Drupal::service('password_generator')->generate(8)); $password_length = 12; - $last_password = \Drupal::service('password_generator')->generate($password_length); + $last_password = \Drupal\Component\Utility\DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '9.1.0', fn() => user_password($password_length), fn() => \Drupal::service('password_generator')->generate($password_length)); } + ?>