Skip to content

Commit b3fa71d

Browse files
committed
make addVisitor() immutable
1 parent b7ca849 commit b3fa71d

4 files changed

Lines changed: 12 additions & 18 deletions

File tree

phpstan.neon

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -385,15 +385,8 @@ parameters:
385385
path: src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php
386386
-
387387
identifier: offsetAccess.nonArray
388-
<<<<<<< HEAD
389388
path: src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php
390-
-
391-
message: '#Property PhpParser\\Node\\Stmt\\ClassMethod\:\:\$stmts \(array<PhpParser\\Node\\Stmt>\|null\) does not accept array<PhpParser\\Node>#'
392-
path: scripts/create-immutable-node-visitor.php
393-
=======
394-
path: src/PhpParser/NodeTraverser/RectorNodeTraverser.php
395389

396-
>>>>>>> e44afd95ee (remove not needed script)
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/AbstractImmutableNodeTraverser.php

src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,9 @@ public function __construct(NodeVisitor ...$visitors)
3434
$this->visitors = $visitors;
3535
}
3636

37-
/**
38-
* Adds a visitor.
39-
*
40-
* @param NodeVisitor $visitor Visitor to add
41-
*/
4237
public function addVisitor(NodeVisitor $visitor): void
4338
{
44-
$this->visitors[] = $visitor;
39+
throw new ShouldNotHappenException('The immutable node traverser does not support adding visitors.');
4540
}
4641

4742
public function removeVisitor(NodeVisitor $visitor): void

src/PhpParser/NodeTraverser/RectorNodeTraverser.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public function refreshPhpRectors(array $rectors): void
6363
$this->visitorsPerNodeClass = [];
6464

6565
$this->areNodeVisitorsPrepared = false;
66+
67+
$this->prepareNodeVisitors();
6668
}
6769

6870
/**

tests/PhpParser/NodeTraverser/RectorNodeTraverserTest.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function testGetVisitorsForNodeWhenNoVisitorsAvailable(): void
4848
public function testGetVisitorsForNodeWhenNoVisitorsMatch(): void
4949
{
5050
$class = new Class_('test');
51-
$this->rectorNodeTraverser->addVisitor($this->ruleUsingFunctionRector);
51+
$this->rectorNodeTraverser->refreshPhpRectors([$this->ruleUsingFunctionRector]);
5252

5353
$visitors = $this->rectorNodeTraverser->getVisitorsForNode($class);
5454

@@ -58,8 +58,10 @@ public function testGetVisitorsForNodeWhenNoVisitorsMatch(): void
5858
public function testGetVisitorsForNodeWhenSomeVisitorsMatch(): void
5959
{
6060
$class = new Class_('test');
61-
$this->rectorNodeTraverser->addVisitor($this->ruleUsingFunctionRector);
62-
$this->rectorNodeTraverser->addVisitor($this->ruleUsingClassRector);
61+
$this->rectorNodeTraverser->refreshPhpRectors([
62+
$this->ruleUsingFunctionRector,
63+
$this->ruleUsingClassRector,
64+
]);
6365

6466
$visitors = $this->rectorNodeTraverser->getVisitorsForNode($class);
6567

@@ -69,8 +71,10 @@ public function testGetVisitorsForNodeWhenSomeVisitorsMatch(): void
6971
public function testGetVisitorsForNodeWhenAllVisitorsMatch(): void
7072
{
7173
$class = new Class_('test');
72-
$this->rectorNodeTraverser->addVisitor($this->ruleUsingClassRector);
73-
$this->rectorNodeTraverser->addVisitor($this->ruleUsingClassLikeRector);
74+
$this->rectorNodeTraverser->refreshPhpRectors([
75+
$this->ruleUsingClassRector,
76+
$this->ruleUsingClassLikeRector,
77+
]);
7478

7579
$visitors = $this->rectorNodeTraverser->getVisitorsForNode($class);
7680

0 commit comments

Comments
 (0)