![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/rector/rector/packages/NodeTypeResolver/ |
<?php declare (strict_types=1); namespace Rector\NodeTypeResolver; use PhpParser\Node\Stmt; use PhpParser\NodeTraverser; use PhpParser\NodeVisitor\CloningVisitor; use Rector\Core\PhpParser\NodeTraverser\FileWithoutNamespaceNodeTraverser; use Rector\Core\PHPStan\NodeVisitor\UnreachableStatementNodeVisitor; use Rector\Core\ValueObject\Application\File; use Rector\NodeTypeResolver\NodeVisitor\FunctionLikeParamArgPositionNodeVisitor; use Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver; use Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory; final class NodeScopeAndMetadataDecorator { /** * @readonly * @var \Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver */ private $phpStanNodeScopeResolver; /** * @readonly * @var \Rector\NodeTypeResolver\PHPStan\Scope\ScopeFactory */ private $scopeFactory; /** * @readonly * @var \Rector\Core\PhpParser\NodeTraverser\FileWithoutNamespaceNodeTraverser */ private $fileWithoutNamespaceNodeTraverser; /** * @readonly * @var \PhpParser\NodeTraverser */ private $nodeTraverser; public function __construct(CloningVisitor $cloningVisitor, PHPStanNodeScopeResolver $phpStanNodeScopeResolver, FunctionLikeParamArgPositionNodeVisitor $functionLikeParamArgPositionNodeVisitor, ScopeFactory $scopeFactory, FileWithoutNamespaceNodeTraverser $fileWithoutNamespaceNodeTraverser) { $this->phpStanNodeScopeResolver = $phpStanNodeScopeResolver; $this->scopeFactory = $scopeFactory; $this->fileWithoutNamespaceNodeTraverser = $fileWithoutNamespaceNodeTraverser; $this->nodeTraverser = new NodeTraverser(); // needed for format preserving printing $this->nodeTraverser->addVisitor($cloningVisitor); $this->nodeTraverser->addVisitor($functionLikeParamArgPositionNodeVisitor); } /** * @param Stmt[] $stmts * @return Stmt[] * @param \Rector\Core\ValueObject\Application\File|string $file */ public function decorateNodesFromFile($file, array $stmts) : array { $filePath = $file instanceof File ? $file->getFilePath() : $file; $stmts = $this->fileWithoutNamespaceNodeTraverser->traverse($stmts); $stmts = $this->phpStanNodeScopeResolver->processNodes($stmts, $filePath); if ($this->phpStanNodeScopeResolver->hasUnreachableStatementNode()) { $unreachableStatementNodeVisitor = new UnreachableStatementNodeVisitor($this->phpStanNodeScopeResolver, $filePath, $this->scopeFactory); $this->nodeTraverser->addVisitor($unreachableStatementNodeVisitor); $stmts = $this->nodeTraverser->traverse($stmts); /** * immediate remove UnreachableStatementNodeVisitor after traverse to avoid * re-used in nodeTraverser property in next file */ $this->nodeTraverser->removeVisitor($unreachableStatementNodeVisitor); // next file must be init hasUnreachableStatementNode to be false again $this->phpStanNodeScopeResolver->resetHasUnreachableStatementNode(); return $stmts; } return $this->nodeTraverser->traverse($stmts); } }