rector/rules/DowngradePhp72/NodeAnalyzer/ClassLikeParentResolver.php
Tomas Votruba cdc3b7adef Updated Rector to commit f451b0b8e1e6761ec7f50809745d44d01caba66d
f451b0b8e1 [PHP 8.0] Bump to promoted properties (#4)
2021-05-10 23:39:21 +00:00

39 lines
1.3 KiB
PHP

<?php
declare (strict_types=1);
namespace Rector\DowngradePhp72\NodeAnalyzer;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Interface_;
use PHPStan\Reflection\ClassReflection;
use Rector\NodeCollector\NodeCollector\NodeRepository;
final class ClassLikeParentResolver
{
/**
* @var \Rector\NodeCollector\NodeCollector\NodeRepository
*/
private $nodeRepository;
public function __construct(\Rector\NodeCollector\NodeCollector\NodeRepository $nodeRepository)
{
$this->nodeRepository = $nodeRepository;
}
/**
* @return array<Class_|Interface_>
*/
public function resolveFromClassReflection(\PHPStan\Reflection\ClassReflection $classReflection) : array
{
$parentClassLikes = [];
foreach ($classReflection->getAncestors() as $ancestorClassReflectoin) {
$parentClass = $this->nodeRepository->findClass($ancestorClassReflectoin->getName());
if ($parentClass instanceof \PhpParser\Node\Stmt\Class_) {
$parentClassLikes[] = $parentClass;
}
$parentInterface = $this->nodeRepository->findInterface($ancestorClassReflectoin->getName());
if ($parentInterface instanceof \PhpParser\Node\Stmt\Interface_) {
$parentClassLikes[] = $parentInterface;
}
}
return $parentClassLikes;
}
}