mirror of
https://github.com/rectorphp/rector.git
synced 2025-02-19 15:45:43 +01:00
2da49992cc
[Downgrade] [PHP 7.2] Make DowngradeParameterTypeWideningRector always downgrade to phpdoc type (#390)
64 lines
2.2 KiB
PHP
64 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\ReadWrite\ReadNodeAnalyzer;
|
|
|
|
use PhpParser\Node;
|
|
use PhpParser\Node\Expr\PropertyFetch;
|
|
use PhpParser\Node\Stmt\Class_;
|
|
use Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder;
|
|
use Rector\NodeNameResolver\NodeNameResolver;
|
|
use Rector\NodeTypeResolver\Node\AttributeKey;
|
|
use Rector\ReadWrite\Contract\ReadNodeAnalyzerInterface;
|
|
final class LocalPropertyFetchReadNodeAnalyzer implements \Rector\ReadWrite\Contract\ReadNodeAnalyzerInterface
|
|
{
|
|
/**
|
|
* @var \Rector\ReadWrite\ReadNodeAnalyzer\JustReadExprAnalyzer
|
|
*/
|
|
private $justReadExprAnalyzer;
|
|
/**
|
|
* @var \Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder
|
|
*/
|
|
private $propertyFetchFinder;
|
|
/**
|
|
* @var \Rector\NodeNameResolver\NodeNameResolver
|
|
*/
|
|
private $nodeNameResolver;
|
|
public function __construct(\Rector\ReadWrite\ReadNodeAnalyzer\JustReadExprAnalyzer $justReadExprAnalyzer, \Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder $propertyFetchFinder, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
|
|
{
|
|
$this->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;
|
|
}
|
|
}
|