betterNodeFinder = $betterNodeFinder; $this->nodeNameResolver = $nodeNameResolver; $this->nodeComparator = $nodeComparator; } public function find(Assign $assign): ?Node { $currentAssign = $assign; $variableName = $this->nodeNameResolver->getName($assign->var); return $this->betterNodeFinder->findFirstPrevious($assign, function (Node $node) use ( $variableName, $currentAssign ): bool { if (! $node instanceof Assign) { return false; } // skip self if ($this->nodeComparator->areSameNode($node, $currentAssign)) { return false; } return $this->nodeNameResolver->isName($node->var, $variableName); }); } }