Skip to content

Commit 07486f5

Browse files
committed
Fix fixing nodes in used traits
1 parent afe5d85 commit 07486f5

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

src/Analyser/FileAnalyser.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public function analyseFile(
107107
if ($node instanceof InTraitNode) {
108108
$traitNode = $node->getOriginalNode();
109109
$linesToIgnore[$scope->getFileDescription()] = $this->getLinesToIgnoreFromTokens([$traitNode]);
110+
$parserNodes = $node->getParserNodes();
110111
}
111112
if ($outerNodeCallback !== null) {
112113
$outerNodeCallback($node, $scope);

src/Analyser/NodeScopeResolver.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6291,16 +6291,17 @@ private function processTraitUse(Node\Stmt\TraitUse $node, MutatingScope $classS
62916291
$adaptations[] = $adaptation;
62926292
}
62936293
$parserNodes = $this->parser->parseFile($fileName);
6294-
$this->processNodesForTraitUse($parserNodes, $traitReflection, $classScope, $adaptations, $nodeCallback);
6294+
$this->processNodesForTraitUse($parserNodes, $parserNodes, $traitReflection, $classScope, $adaptations, $nodeCallback);
62956295
}
62966296
}
62976297

62986298
/**
6299+
* @param Node\Stmt[] $parserNodes
62996300
* @param Node[]|Node|scalar|null $node
63006301
* @param Node\Stmt\TraitUseAdaptation[] $adaptations
63016302
* @param callable(Node $node, Scope $scope): void $nodeCallback
63026303
*/
6303-
private function processNodesForTraitUse($node, ClassReflection $traitReflection, MutatingScope $scope, array $adaptations, callable $nodeCallback): void
6304+
private function processNodesForTraitUse(array $parserNodes, $node, ClassReflection $traitReflection, MutatingScope $scope, array $adaptations, callable $nodeCallback): void
63046305
{
63056306
if ($node instanceof Node) {
63066307
if ($node instanceof Node\Stmt\Trait_ && $traitReflection->getName() === (string) $node->namespacedName && $traitReflection->getNativeReflection()->getStartLine() === $node->getStartLine()) {
@@ -6347,7 +6348,7 @@ private function processNodesForTraitUse($node, ClassReflection $traitReflection
63476348
throw new ShouldNotHappenException();
63486349
}
63496350
$traitScope = $scope->enterTrait($traitReflection);
6350-
$nodeCallback(new InTraitNode($node, $traitReflection, $scope->getClassReflection()), $traitScope);
6351+
$nodeCallback(new InTraitNode($node, $parserNodes, $traitReflection, $scope->getClassReflection()), $traitScope);
63516352
$this->processStmtNodes($node, $stmts, $traitScope, $nodeCallback, StatementContext::createTopLevel());
63526353
return;
63536354
}
@@ -6359,11 +6360,11 @@ private function processNodesForTraitUse($node, ClassReflection $traitReflection
63596360
}
63606361
foreach ($node->getSubNodeNames() as $subNodeName) {
63616362
$subNode = $node->{$subNodeName};
6362-
$this->processNodesForTraitUse($subNode, $traitReflection, $scope, $adaptations, $nodeCallback);
6363+
$this->processNodesForTraitUse($parserNodes, $subNode, $traitReflection, $scope, $adaptations, $nodeCallback);
63636364
}
63646365
} elseif (is_array($node)) {
63656366
foreach ($node as $subNode) {
6366-
$this->processNodesForTraitUse($subNode, $traitReflection, $scope, $adaptations, $nodeCallback);
6367+
$this->processNodesForTraitUse($parserNodes, $subNode, $traitReflection, $scope, $adaptations, $nodeCallback);
63676368
}
63686369
}
63696370
}

src/Node/InTraitNode.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
final class InTraitNode extends Node\Stmt implements VirtualNode
1212
{
1313

14-
public function __construct(private Node\Stmt\Trait_ $originalNode, private ClassReflection $traitReflection, private ClassReflection $implementingClassReflection)
14+
/**
15+
* @param Node\Stmt[] $parserNodes
16+
*/
17+
public function __construct(private Node\Stmt\Trait_ $originalNode, private array $parserNodes, private ClassReflection $traitReflection, private ClassReflection $implementingClassReflection)
1518
{
1619
parent::__construct($originalNode->getAttributes());
1720
}
@@ -21,6 +24,14 @@ public function getOriginalNode(): Node\Stmt\Trait_
2124
return $this->originalNode;
2225
}
2326

27+
/**
28+
* @return Node\Stmt[]
29+
*/
30+
public function getParserNodes(): array
31+
{
32+
return $this->parserNodes;
33+
}
34+
2435
public function getTraitReflection(): ClassReflection
2536
{
2637
return $this->traitReflection;

0 commit comments

Comments
 (0)