From 0d5169dd77c909421aa1de31aac7bdcd502d66aa Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Thu, 30 Mar 2023 03:28:57 +0700 Subject: [PATCH] [Php70] Remove previous attribute usage on ReduceMultipleDefaultSwitchRector (#3537) --- .../ReduceMultipleDefaultSwitchRector.php | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php b/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php index fb1b372398a..27483386cd3 100644 --- a/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php +++ b/rules/Php70/Rector/Switch_/ReduceMultipleDefaultSwitchRector.php @@ -10,7 +10,6 @@ use PhpParser\Node\Stmt\Switch_; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\PhpVersionFeature; -use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\VersionBonding\Contract\MinPhpVersionInterface; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -72,45 +71,51 @@ public function getNodeTypes(): array public function refactor(Node $node): ?Node { $defaultCases = []; - foreach ($node->cases as $case) { + foreach ($node->cases as $key => $case) { if ($case->cond instanceof Expr) { continue; } - $defaultCases[] = $case; + $defaultCases[$key] = $case; } if (count($defaultCases) < 2) { return null; } - $this->removeExtraDefaultCases($defaultCases); + $this->removeExtraDefaultCases($node->cases, $defaultCases); return $node; } /** + * @param Case_[] $cases * @param Case_[] $defaultCases */ - private function removeExtraDefaultCases(array $defaultCases): void + private function removeExtraDefaultCases(array $cases, array $defaultCases): void { // keep only last array_pop($defaultCases); - foreach ($defaultCases as $defaultCase) { - $this->keepStatementsToParentCase($defaultCase); + + foreach ($defaultCases as $key => $defaultCase) { + $this->keepStatementsToParentCase($cases, $defaultCase, $key); $this->removeNode($defaultCase); } } - private function keepStatementsToParentCase(Case_ $case): void + /** + * @param Case_[] $cases + */ + private function keepStatementsToParentCase(array $cases, Case_ $case, int $key): void { - $previousNode = $case->getAttribute(AttributeKey::PREVIOUS_NODE); - if (! $previousNode instanceof Case_) { + if (! isset($cases[$key - 1])) { return; } - if ($previousNode->stmts === []) { - $previousNode->stmts = $case->stmts; + $previousCase = $cases[$key - 1]; + + if ($previousCase->stmts === []) { + $previousCase->stmts = $case->stmts; $case->stmts = []; } }