justReadExprAnalyzer = $justReadExprAnalyzer; $this->propertyFetchFinder = $propertyFetchFinder; $this->nodeNameResolver = $nodeNameResolver; } /** * @param \PhpParser\Node $node */ public function supports($node) : bool { return $node instanceof \PhpParser\Node\Expr\PropertyFetch; } /** * @param \PhpParser\Node $node */ public function isRead($node) : bool { $class = $node->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CLASS_NODE); if (!$class instanceof \PhpParser\Node\Stmt\Class_) { // assume worse to keep node protected return \true; } $propertyName = $this->nodeNameResolver->getName($node->name); if ($propertyName === null) { // assume worse to keep node protected return \true; } $propertyFetches = $this->propertyFetchFinder->findLocalPropertyFetchesByName($class, $propertyName); foreach ($propertyFetches as $propertyFetch) { if ($this->justReadExprAnalyzer->isReadContext($propertyFetch)) { return \true; } } return \false; } }