rector/rules/TypeDeclaration/NodeAnalyzer/ClassMethodAndPropertyAnalyzer.php
Tomas Votruba 7e46eb8267 Updated Rector to commit a2d6da8b4e
a2d6da8b4e Back to php-scoper 0.14 with scoping from php 8.0 (#2370)
2022-05-27 11:51:31 +00:00

39 lines
1.2 KiB
PHP

<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer;
use PhpParser\Node\Expr\PropertyFetch;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Return_;
use Rector\NodeNameResolver\NodeNameResolver;
final class ClassMethodAndPropertyAnalyzer
{
/**
* @readonly
* @var \Rector\NodeNameResolver\NodeNameResolver
*/
private $nodeNameResolver;
public function __construct(\Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver)
{
$this->nodeNameResolver = $nodeNameResolver;
}
public function hasClassMethodOnlyStatementReturnOfPropertyFetch(\PhpParser\Node\Stmt\ClassMethod $classMethod, string $propertyName) : bool
{
$stmts = (array) $classMethod->stmts;
if (\count($stmts) !== 1) {
return \false;
}
$onlyClassMethodStmt = $stmts[0] ?? null;
if (!$onlyClassMethodStmt instanceof \PhpParser\Node\Stmt\Return_) {
return \false;
}
/** @var Return_ $return */
$return = $onlyClassMethodStmt;
if (!$return->expr instanceof \PhpParser\Node\Expr\PropertyFetch) {
return \false;
}
return $this->nodeNameResolver->isName($return->expr, $propertyName);
}
}