rector/packages/BetterPhpDocParser/PhpDocNodeMapper.php
Tomas Votruba b03536c0f5
Improve token iterator usage (#6046)
* use token iterator

* add spaceless tag

* [ci-review] Rector Rectify

Co-authored-by: kaizen-ci <info@kaizen-ci.org>
2021-04-06 20:36:50 +02:00

76 lines
2.6 KiB
PHP

<?php
declare(strict_types=1);
namespace Rector\BetterPhpDocParser;
use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode;
use Rector\BetterPhpDocParser\Contract\BasePhpDocNodeVisitorInterface;
use Rector\BetterPhpDocParser\DataProvider\CurrentTokenIteratorProvider;
use Rector\BetterPhpDocParser\ValueObject\Parser\BetterTokenIterator;
use Symplify\SimplePhpDocParser\Contract\PhpDocNodeVisitorInterface;
use Symplify\SimplePhpDocParser\PhpDocNodeTraverser;
use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\CloningPhpDocNodeVisitor;
use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\ParentConnectingPhpDocNodeVisitor;
/**
* @see \Rector\Tests\BetterPhpDocParser\PhpDocNodeMapperTest
*/
final class PhpDocNodeMapper
{
/**
* @var PhpDocNodeVisitorInterface[]
*/
private $phpDocNodeVisitors = [];
/**
* @var CurrentTokenIteratorProvider
*/
private $currentTokenIteratorProvider;
/**
* @var ParentConnectingPhpDocNodeVisitor
*/
private $parentConnectingPhpDocNodeVisitor;
/**
* @var CloningPhpDocNodeVisitor
*/
private $cloningPhpDocNodeVisitor;
/**
* @param BasePhpDocNodeVisitorInterface[] $phpDocNodeVisitors
*/
public function __construct(
CurrentTokenIteratorProvider $currentTokenIteratorProvider,
ParentConnectingPhpDocNodeVisitor $parentConnectingPhpDocNodeVisitor,
CloningPhpDocNodeVisitor $cloningPhpDocNodeVisitor,
array $phpDocNodeVisitors
) {
$this->phpDocNodeVisitors = $phpDocNodeVisitors;
$this->currentTokenIteratorProvider = $currentTokenIteratorProvider;
$this->parentConnectingPhpDocNodeVisitor = $parentConnectingPhpDocNodeVisitor;
$this->cloningPhpDocNodeVisitor = $cloningPhpDocNodeVisitor;
}
public function transform(PhpDocNode $phpDocNode, BetterTokenIterator $betterTokenIterator): void
{
$this->currentTokenIteratorProvider->setBetterTokenIterator($betterTokenIterator);
$parentPhpDocNodeTraverser = new PhpDocNodeTraverser();
$parentPhpDocNodeTraverser->addPhpDocNodeVisitor($this->parentConnectingPhpDocNodeVisitor);
$parentPhpDocNodeTraverser->traverse($phpDocNode);
$cloningPhpDocNodeTraverser = new PhpDocNodeTraverser();
$cloningPhpDocNodeTraverser->addPhpDocNodeVisitor($this->cloningPhpDocNodeVisitor);
$cloningPhpDocNodeTraverser->traverse($phpDocNode);
$phpDocNodeTraverser = new PhpDocNodeTraverser();
foreach ($this->phpDocNodeVisitors as $phpDocNodeVisitor) {
$phpDocNodeTraverser->addPhpDocNodeVisitor($phpDocNodeVisitor);
}
$phpDocNodeTraverser->traverse($phpDocNode);
}
}