simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->nodeNameResolver = $nodeNameResolver; } /** * @param array $methodsByPropertyName */ public function replacePropertyFetchesByVariable(\PhpParser\Node\Stmt\Class_ $class, array $methodsByPropertyName) : void { foreach ($methodsByPropertyName as $propertyName => $methodNames) { $methodName = $methodNames[0]; $classMethod = $class->getMethod($methodName); if (!$classMethod instanceof \PhpParser\Node\Stmt\ClassMethod) { continue; } $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $classMethod->getStmts(), function (\PhpParser\Node $node) use($propertyName) : ?Variable { if (!$node instanceof \PhpParser\Node\Expr\PropertyFetch) { return null; } if (!$this->nodeNameResolver->isName($node, $propertyName)) { return null; } return new \PhpParser\Node\Expr\Variable($propertyName); }); } } }