From c3189b160ec0c9dd094d123574b8302aa9e3deaf Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 10 Jun 2023 17:13:22 +0700 Subject: [PATCH] [Php56] Remove parent lookup on UndefinedVariableResolver (#4155) * [Php56] Remove parent lookup on UndefinedVariableResolver * increase rector kernel cache key --- .../UndefinedVariableResolver.php | 20 ++++++++++++------- src/Kernel/RectorKernel.php | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php b/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php index ef4e5139e5a..312464662d7 100644 --- a/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php +++ b/rules/Php56/NodeAnalyzer/UndefinedVariableResolver.php @@ -28,7 +28,6 @@ use PHPStan\Analyser\Scope; use Rector\Core\NodeAnalyzer\VariableAnalyzer; use Rector\Core\PhpParser\Comparing\NodeComparator; -use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; @@ -39,7 +38,6 @@ public function __construct( private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser, private readonly NodeNameResolver $nodeNameResolver, private readonly NodeComparator $nodeComparator, - private readonly BetterNodeFinder $betterNodeFinder, private readonly VariableAnalyzer $variableAnalyzer ) { } @@ -51,10 +49,12 @@ public function resolve(ClassMethod | Function_ | Closure $node): array { $undefinedVariables = []; $checkedVariables = []; + $currentStmt = null; $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $node->stmts, function (Node $node) use ( &$undefinedVariables, - &$checkedVariables + &$checkedVariables, + &$currentStmt ): ?int { // entering new scope - break! if ($node instanceof FunctionLike && ! $node instanceof ArrowFunction) { @@ -71,6 +71,10 @@ public function resolve(ClassMethod | Function_ | Closure $node): array return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; } + if ($node instanceof Stmt) { + $currentStmt = $node; + } + if (! $node instanceof Variable) { return null; } @@ -89,7 +93,7 @@ public function resolve(ClassMethod | Function_ | Closure $node): array return null; } - if ($this->hasVariableTypeOrCurrentStmtUnreachable($node, $variableName)) { + if ($this->hasVariableTypeOrCurrentStmtUnreachable($node, $variableName, $currentStmt)) { return null; } @@ -179,8 +183,11 @@ private function resolveCheckedVariablesFromArrayOrList(Node $node, array $check return $checkedVariables; } - private function hasVariableTypeOrCurrentStmtUnreachable(Variable $variable, ?string $variableName): bool - { + private function hasVariableTypeOrCurrentStmtUnreachable( + Variable $variable, + ?string $variableName, + ?Stmt $currentStmt + ): bool { if (! is_string($variableName)) { return true; } @@ -192,7 +199,6 @@ private function hasVariableTypeOrCurrentStmtUnreachable(Variable $variable, ?st return true; } - $currentStmt = $this->betterNodeFinder->resolveCurrentStatement($variable); return $currentStmt instanceof Stmt && $currentStmt->getAttribute(AttributeKey::IS_UNREACHABLE) === true; } diff --git a/src/Kernel/RectorKernel.php b/src/Kernel/RectorKernel.php index 2441ebd1464..138f1ac838e 100644 --- a/src/Kernel/RectorKernel.php +++ b/src/Kernel/RectorKernel.php @@ -17,7 +17,7 @@ final class RectorKernel /** * @var string */ - private const CACHE_KEY = 'v85'; + private const CACHE_KEY = 'v86'; private ContainerInterface|null $container = null;