mirror of https://github.com/rectorphp/rector.git
72 lines
2.3 KiB
PHP
72 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\TypeDeclaration\NodeAnalyzer;
|
|
|
|
use PhpParser\Node\Expr\Assign;
|
|
use PhpParser\Node\Expr\PropertyFetch;
|
|
use PhpParser\Node\Expr\Variable;
|
|
use PhpParser\Node\Stmt\ClassMethod;
|
|
use PhpParser\Node\Stmt\Expression;
|
|
use PhpParser\Node\Stmt\Return_;
|
|
use Rector\NodeNameResolver\NodeNameResolver;
|
|
final class ClassMethodAndPropertyAnalyzer
|
|
{
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\NodeNameResolver\NodeNameResolver
|
|
*/
|
|
private $nodeNameResolver;
|
|
public function __construct(NodeNameResolver $nodeNameResolver)
|
|
{
|
|
$this->nodeNameResolver = $nodeNameResolver;
|
|
}
|
|
public function hasPropertyFetchReturn(ClassMethod $classMethod, string $propertyName) : bool
|
|
{
|
|
$stmts = (array) $classMethod->stmts;
|
|
if (\count($stmts) !== 1) {
|
|
return \false;
|
|
}
|
|
$onlyClassMethodStmt = $stmts[0] ?? null;
|
|
if (!$onlyClassMethodStmt instanceof Return_) {
|
|
return \false;
|
|
}
|
|
/** @var Return_ $return */
|
|
$return = $onlyClassMethodStmt;
|
|
if (!$return->expr instanceof PropertyFetch) {
|
|
return \false;
|
|
}
|
|
return $this->nodeNameResolver->isName($return->expr, $propertyName);
|
|
}
|
|
public function hasOnlyPropertyAssign(ClassMethod $classMethod, string $propertyName) : bool
|
|
{
|
|
$stmts = (array) $classMethod->stmts;
|
|
if (\count($stmts) !== 1) {
|
|
return \false;
|
|
}
|
|
$onlyClassMethodStmt = $stmts[0] ?? null;
|
|
if (!$onlyClassMethodStmt instanceof Expression) {
|
|
return \false;
|
|
}
|
|
if (!$onlyClassMethodStmt->expr instanceof Assign) {
|
|
return \false;
|
|
}
|
|
$assign = $onlyClassMethodStmt->expr;
|
|
if (!$assign->expr instanceof Variable) {
|
|
return \false;
|
|
}
|
|
if (!$this->nodeNameResolver->isName($assign->expr, $propertyName)) {
|
|
return \false;
|
|
}
|
|
$assignVar = $assign->var;
|
|
if (!$assignVar instanceof PropertyFetch) {
|
|
return \false;
|
|
}
|
|
$propertyFetch = $assignVar;
|
|
if (!$this->nodeNameResolver->isName($propertyFetch->var, 'this')) {
|
|
return \false;
|
|
}
|
|
return $this->nodeNameResolver->isName($propertyFetch->name, $propertyName);
|
|
}
|
|
}
|