Skip to content

Commit a8d25a3

Browse files
committed
[DowngradePhp80] Handle short circuit on DowngradeNullsafeToTernaryOperatorRector
1 parent 8470519 commit a8d25a3

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

rules/DowngradePhp80/Rector/NullsafeMethodCall/DowngradeNullsafeToTernaryOperatorRector.php

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,33 @@ public function getRuleDefinition(): RuleDefinition
5555
*/
5656
public function getNodeTypes(): array
5757
{
58-
return [NullsafeMethodCall::class, NullsafePropertyFetch::class];
58+
return [MethodCall::class, PropertyFetch::class, NullsafeMethodCall::class, NullsafePropertyFetch::class];
5959
}
6060

6161
/**
62-
* @param NullsafeMethodCall|NullsafePropertyFetch $node
62+
* @param MethodCall|NullsafeMethodCall|NullsafePropertyFetch $node
6363
*/
64-
public function refactor(Node $node): Ternary
64+
public function refactor(Node $node): ?Ternary
6565
{
66+
if ($node instanceof MethodCall || $node instanceof PropertyFetch) {
67+
if ($node->var instanceof NullsafeMethodCall || $node->var instanceof NullsafePropertyFetch) {
68+
$nullsafeVariable = $this->createNullsafeVariable();
69+
70+
$assign = new Assign($nullsafeVariable, $node->var->var);
71+
$methodCallOrPropertyFetch = $node->var instanceof NullsafeMethodCall
72+
? new MethodCall(new MethodCall($nullsafeVariable, $node->var->name, $node->var->args), $node->name, $node->args)
73+
: new PropertyFetch(new PropertyFetch($nullsafeVariable, $node->var->name), $node->name);
74+
75+
return new Ternary($assign, $methodCallOrPropertyFetch, $this->nodeFactory->createNull());
76+
}
77+
78+
return null;
79+
}
80+
6681
$nullsafeVariable = $this->createNullsafeVariable();
6782

6883
$methodCallOrPropertyFetch = $node instanceof NullsafeMethodCall
69-
? new MethodCall($nullsafeVariable, $node->name, $node->getArgs())
84+
? new MethodCall($nullsafeVariable, $node->name, $node->args)
7085
: new PropertyFetch($nullsafeVariable, $node->name);
7186

7287
$assign = new Assign($nullsafeVariable, $node->var);

0 commit comments

Comments
 (0)