Skip to content

Commit 1dc39d6

Browse files
committed
make RectorNodeTraverser immutable
1 parent 2f89605 commit 1dc39d6

3 files changed

Lines changed: 8 additions & 14 deletions

File tree

phpstan.neon

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -385,15 +385,8 @@ parameters:
385385
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php
386386
-
387387
identifier: offsetAccess.nonArray
388-
<<<<<<< HEAD
389-
path: src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php
390-
391-
=======
392388
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php
393-
-
394-
message: '#Property PhpParser\\Node\\Stmt\\ClassMethod\:\:\$stmts \(array<PhpParser\\Node\\Stmt>\|null\) does not accept array<PhpParser\\Node>#'
395-
path: scripts/create-immutable-node-visitor.php
396-
>>>>>>> bb4e608ca7 ([int] merge AbstractImmutableNodeTraverser and RectorNodeTraverser as sole child and tight design)
389+
397390
-
398391
message: '#Property Rector\\PhpParser\\NodeTraverser\\AbstractImmutableNodeTraverser\:\:\$visitors \(list<PhpParser\\NodeVisitor>\) does not accept array<int\|string, PhpParser\\NodeVisitor>#'
399392
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php

src/PhpParser/NodeTraverser/RectorNodeTraverser.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,14 @@ public function getVisitorsForNode(Node $node): array
7979
{
8080
$nodeClass = $node::class;
8181

82+
if (! $this->areNodeVisitorsPrepared) {
83+
$this->prepareNodeVisitors();
84+
}
85+
8286
if (! isset($this->visitorsPerNodeClass[$nodeClass])) {
8387
$this->visitorsPerNodeClass[$nodeClass] = [];
8488

85-
/** @var RectorInterface $visitor */
86-
foreach ($this->visitors as $visitor) {
89+
foreach ($this->rectors as $visitor) {
8790
foreach ($visitor->getNodeTypes() as $nodeType) {
8891
// BC layer matching
8992
if ($nodeType === FileWithoutNamespace::class && $nodeClass === FileNode::class) {
@@ -102,12 +105,9 @@ public function getVisitorsForNode(Node $node): array
102105
return $this->visitorsPerNodeClass[$nodeClass];
103106
}
104107

105-
/**
106-
* @deprecated @todo remove completely, even in tests to avoid mutable state
107-
*/
108108
public function addVisitor(NodeVisitor $visitor): void
109109
{
110-
$this->visitors[] = $visitor;
110+
throw new ShouldNotHappenException('The immutable node traverser does not support adding visitors.');
111111
}
112112

113113
public function removeVisitor(NodeVisitor $visitor): void

tests/PhpParser/NodeTraverser/RectorNodeTraverserTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public function testGetVisitorsForNodeWhenNoVisitorsMatch(): void
5858
public function testGetVisitorsForNodeWhenSomeVisitorsMatch(): void
5959
{
6060
$class = new Class_('test');
61+
6162
$this->rectorNodeTraverser->refreshPhpRectors([
6263
$this->ruleUsingFunctionRector,
6364
$this->ruleUsingClassRector,

0 commit comments

Comments
 (0)