Skip to content

Commit

Permalink
[ci-review] Rector Rectify
Browse files Browse the repository at this point in the history
  • Loading branch information
rector-bot committed Jan 28, 2021
1 parent 9a154b3 commit d3938ff
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 91 deletions.
30 changes: 2 additions & 28 deletions rules/symfony5/src/NodeFactory/BareLogoutClassMethodFactory.php
Expand Up @@ -12,9 +12,6 @@
use Rector\Core\Php\PhpVersionProvider;
use Rector\Core\PhpParser\Node\NodeFactory;
use Rector\Core\ValueObject\PhpVersionFeature;
use Rector\NetteKdyby\NodeManipulator\ListeningClassMethodArgumentManipulator;
use Rector\NodeNameResolver\NodeNameResolver;
use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser;

final class BareLogoutClassMethodFactory
{
Expand All @@ -28,33 +25,10 @@ final class BareLogoutClassMethodFactory
*/
private $phpVersionProvider;

/**
* @var ListeningClassMethodArgumentManipulator
*/
private $listeningClassMethodArgumentManipulator;

/**
* @var NodeNameResolver
*/
private $nodeNameResolver;

/**
* @var SimpleCallableNodeTraverser
*/
private $simpleCallableNodeTraverser;

public function __construct(
NodeFactory $nodeFactory,
PhpVersionProvider $phpVersionProvider,
ListeningClassMethodArgumentManipulator $listeningClassMethodArgumentManipulator,
NodeNameResolver $nodeNameResolver,
SimpleCallableNodeTraverser $simpleCallableNodeTraverser
) {
public function __construct(NodeFactory $nodeFactory, PhpVersionProvider $phpVersionProvider)
{
$this->nodeFactory = $nodeFactory;
$this->phpVersionProvider = $phpVersionProvider;
$this->listeningClassMethodArgumentManipulator = $listeningClassMethodArgumentManipulator;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
}

public function create(): ClassMethod
Expand Down
62 changes: 22 additions & 40 deletions rules/symfony5/src/NodeFactory/OnLogoutClassMethodFactory.php
Expand Up @@ -28,16 +28,6 @@ final class OnLogoutClassMethodFactory
'token' => 'getToken',
];

/**
* @var NodeFactory
*/
private $nodeFactory;

/**
* @var PhpVersionProvider
*/
private $phpVersionProvider;

/**
* @var ListeningClassMethodArgumentManipulator
*/
Expand All @@ -48,11 +38,6 @@ final class OnLogoutClassMethodFactory
*/
private $nodeNameResolver;

/**
* @var SimpleCallableNodeTraverser
*/
private $simpleCallableNodeTraverser;

/**
* @var BareLogoutClassMethodFactory
*/
Expand All @@ -66,11 +51,8 @@ public function __construct(
SimpleCallableNodeTraverser $simpleCallableNodeTraverser,
BareLogoutClassMethodFactory $bareLogoutClassMethodFactory
) {
$this->nodeFactory = $nodeFactory;
$this->phpVersionProvider = $phpVersionProvider;
$this->listeningClassMethodArgumentManipulator = $listeningClassMethodArgumentManipulator;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
$this->bareLogoutClassMethodFactory = $bareLogoutClassMethodFactory;
}

Expand All @@ -85,26 +67,12 @@ public function createFromLogoutClassMethod(ClassMethod $logoutClassMethod): Cla
}

/**
* @param Param[] $params
* @return Expression[]
* @return Stmt[]
*/
private function createAssignStmts(array $params): array
private function createAssignStmtFromOldClassMethod(ClassMethod $onLogoutSuccessClassMethod): array
{
$logoutEventVariable = new Variable('logoutEvent');

$assignStmts = [];
foreach ($params as $param) {
foreach (self::PARAMETER_TO_GETTER_NAMES as $parameterName => $getterName) {
if (! $this->nodeNameResolver->isName($param, $parameterName)) {
continue;
}

$assign = new Assign($param->var, new MethodCall($logoutEventVariable, $getterName));
$assignStmts[] = new Expression($assign);
}
}

return $assignStmts;
$usedParams = $this->resolveUsedParams($onLogoutSuccessClassMethod);
return $this->createAssignStmts($usedParams);
}

/**
Expand All @@ -127,11 +95,25 @@ private function resolveUsedParams(ClassMethod $logoutClassMethod): array
}

/**
* @return Stmt[]
* @param Param[] $params
* @return Expression[]
*/
private function createAssignStmtFromOldClassMethod(ClassMethod $onLogoutSuccessClassMethod): array
private function createAssignStmts(array $params): array
{
$usedParams = $this->resolveUsedParams($onLogoutSuccessClassMethod);
return $this->createAssignStmts($usedParams);
$logoutEventVariable = new Variable('logoutEvent');

$assignStmts = [];
foreach ($params as $param) {
foreach (self::PARAMETER_TO_GETTER_NAMES as $parameterName => $getterName) {
if (! $this->nodeNameResolver->isName($param, $parameterName)) {
continue;
}

$assign = new Assign($param->var, new MethodCall($logoutEventVariable, $getterName));
$assignStmts[] = new Expression($assign);
}
}

return $assignStmts;
}
}
Expand Up @@ -4,35 +4,29 @@

namespace Rector\Symfony5\NodeFactory;

use PhpParser\Node;
use PhpParser\Node\Expr\BinaryOp\NotIdentical;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\If_;
use PhpParser\Node\Stmt\Return_;
use Rector\Core\Php\PhpVersionProvider;
use Rector\Core\PhpParser\Node\NodeFactory;
use Rector\NetteKdyby\NodeManipulator\ListeningClassMethodArgumentManipulator;
use Rector\NodeNameResolver\NodeNameResolver;
use Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser;

final class OnSuccessLogoutClassMethodFactory
{
/**
* @var NodeFactory
* @var string
*/
private $nodeFactory;
private const LOGOUT_EVENT = 'logoutEvent';

/**
* @var PhpVersionProvider
*/
private $phpVersionProvider;

/**
* @var ListeningClassMethodArgumentManipulator
* @var NodeFactory
*/
private $listeningClassMethodArgumentManipulator;
private $nodeFactory;

/**
* @var NodeNameResolver
Expand All @@ -51,15 +45,11 @@ final class OnSuccessLogoutClassMethodFactory

public function __construct(
NodeFactory $nodeFactory,
PhpVersionProvider $phpVersionProvider,
ListeningClassMethodArgumentManipulator $listeningClassMethodArgumentManipulator,
NodeNameResolver $nodeNameResolver,
SimpleCallableNodeTraverser $simpleCallableNodeTraverser,
BareLogoutClassMethodFactory $bareLogoutClassMethodFactory
) {
$this->nodeFactory = $nodeFactory;
$this->phpVersionProvider = $phpVersionProvider;
$this->listeningClassMethodArgumentManipulator = $listeningClassMethodArgumentManipulator;
$this->nodeNameResolver = $nodeNameResolver;
$this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser;
$this->bareLogoutClassMethodFactory = $bareLogoutClassMethodFactory;
Expand All @@ -69,7 +59,7 @@ public function createFromOnLogoutSuccessClassMethod(ClassMethod $onLogoutSucces
{
$classMethod = $this->bareLogoutClassMethodFactory->create();

$getResponseMethodCall = new MethodCall(new Variable('logoutEvent'), 'getResponse');
$getResponseMethodCall = new MethodCall(new Variable(self::LOGOUT_EVENT), 'getResponse');
$notIdentical = new NotIdentical($getResponseMethodCall, $this->nodeFactory->createNull());

$if = new If_($notIdentical);
Expand All @@ -88,7 +78,7 @@ public function createFromOnLogoutSuccessClassMethod(ClassMethod $onLogoutSucces

private function replaceReturnResponseWithSetResponse(ClassMethod $classMethod): void
{
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (\PhpParser\Node $node) {
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (Node $node): ?Expression {
if (! $node instanceof Return_) {
return null;
}
Expand All @@ -98,15 +88,15 @@ private function replaceReturnResponseWithSetResponse(ClassMethod $classMethod):
}

$args = $this->nodeFactory->createArgs([$node->expr]);
$methodCall = new MethodCall(new Variable('logoutEvent'), 'setResponse', $args);
$methodCall = new MethodCall(new Variable(self::LOGOUT_EVENT), 'setResponse', $args);

return new Expression($methodCall);
});
}

private function replaceRequestWithGetRequest(ClassMethod $classMethod): void
{
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (\PhpParser\Node $node) {
$this->simpleCallableNodeTraverser->traverseNodesWithCallable($classMethod, function (Node $node): ?MethodCall {
if (! $node instanceof Variable) {
return null;
}
Expand All @@ -115,7 +105,7 @@ private function replaceRequestWithGetRequest(ClassMethod $classMethod): void
return null;
}

return new MethodCall(new Variable('logoutEvent'), 'getRequest');
return new MethodCall(new Variable(self::LOGOUT_EVENT), 'getRequest');
});
}
}
Expand Up @@ -4,25 +4,28 @@

namespace Rector\Symfony5\Tests\Rector\Class_\LogoutSuccessHandlerToLogoutEventSubscriberRector;

use Iterator;
use Rector\Symfony5\Rector\Class_\LogoutSuccessHandlerToLogoutEventSubscriberRector;
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
use Symplify\SmartFileSystem\SmartFileInfo;

final class LogoutSuccessHandlerToLogoutEventSubscriberRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
*/
public function test(\Symplify\SmartFileSystem\SmartFileInfo $fileInfo): void
public function test(SmartFileInfo $fileInfo): void
{
$this->doTestFileInfo($fileInfo);
}

public function provideData(): \Iterator
public function provideData(): Iterator
{
return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture');
}

protected function getRectorClass(): string
{
return \Rector\Symfony5\Rector\Class_\LogoutSuccessHandlerToLogoutEventSubscriberRector::class;
return LogoutSuccessHandlerToLogoutEventSubscriberRector::class;
}
}

0 comments on commit d3938ff

Please sign in to comment.