From a43321f493fe7772a427402c8bb15959fc24ca8b Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 7 Jun 2023 14:58:12 +0700 Subject: [PATCH] [NodeTraverser] Traverse fill stmt_key after FileWithoutNamespaceNodeTraverser on PHPStanNodeScopeResolver (#4103) --- .../PHPStan/Scope/PHPStanNodeScopeResolver.php | 9 ++++++++- src/Rector/AbstractRector.php | 4 ---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php b/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php index 3d74bcb90d4..1836e10f94f 100644 --- a/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php +++ b/packages/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php @@ -108,17 +108,24 @@ public function processNodes( */ Assert::allIsInstanceOf($stmts, Stmt::class); - $this->nodeTraverser->traverse($stmts); + $isInitFileWithoutNamespace = false; if (! $isScopeRefreshing && ! current($stmts) instanceof FileWithoutNamespace) { $stmts = $this->fileWithoutNamespaceNodeTraverser->traverse($stmts); $currentStmt = current($stmts); if ($currentStmt instanceof FileWithoutNamespace) { + $this->nodeTraverser->traverse($stmts); $stmts = $currentStmt->stmts; + + $isInitFileWithoutNamespace = true; } } + if (! $isInitFileWithoutNamespace) { + $this->nodeTraverser->traverse($stmts); + } + $scope = $formerMutatingScope ?? $this->scopeFactory->createFromFile($filePath); // skip chain method calls, performance issue: https://github.com/phpstan/phpstan/issues/254 diff --git a/src/Rector/AbstractRector.php b/src/Rector/AbstractRector.php index 6f4b8bf9383..dedecab4894 100644 --- a/src/Rector/AbstractRector.php +++ b/src/Rector/AbstractRector.php @@ -176,10 +176,6 @@ public function beforeTraverse(array $nodes): ?array $childStmt->setAttribute(AttributeKey::STMT_KEY, $key); continue; } - - foreach ($childStmt->stmts as $keyChildStmt => $childStmtStmt) { - $childStmtStmt->setAttribute(AttributeKey::STMT_KEY, $keyChildStmt); - } } return parent::beforeTraverse($nodes);