StandaloneTraverseNodeTraverser: create NodeTraversers just once

This commit is contained in:
TomasVotruba 2017-12-20 02:55:19 +01:00
parent ed5baf3d6e
commit 684b1b933d

View File

@ -3,6 +3,8 @@
namespace Rector\NodeTraverser;
use PhpParser\Node;
use PhpParser\NodeTraverser;
use PhpParser\NodeTraverserInterface;
use PhpParser\NodeVisitor;
/**
@ -21,6 +23,11 @@ final class StandaloneTraverseNodeTraverser
*/
private $nodeTraverserFactory;
/**
* @var NodeTraverserInterface[]
*/
private $nodeTraversers;
public function __construct(NodeTraverserFactory $nodeTraverserFactory)
{
$this->nodeTraverserFactory = $nodeTraverserFactory;
@ -37,11 +44,26 @@ final class StandaloneTraverseNodeTraverser
*/
public function traverse(array $nodes): array
{
foreach ($this->nodeVisitors as $nodeVisitor) {
$nodeTraverser = $this->nodeTraverserFactory->createWithNodeVisitor($nodeVisitor);
foreach ($this->getNodeTraversers() as $nodeTraverser) {
$nodes = $nodeTraverser->traverse($nodes);
}
return $nodes;
}
/**
* @return NodeTraverserInterface[]
*/
private function getNodeTraversers(): array
{
if ($this->nodeTraversers) {
return $this->nodeTraversers;
}
foreach ($this->nodeVisitors as $nodeVisitor) {
$this->nodeTraversers[] = $this->nodeTraverserFactory->createWithNodeVisitor($nodeVisitor);
}
return $this->nodeTraversers;
}
}