mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-01 00:40:52 +00:00
11b9220a05
b4eb883e91
[DeadCode] Skip isset() from property fetch from docblock on RemoveAlwaysTrueIfConditionRector (#5754)
71 lines
2.6 KiB
PHP
71 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\Doctrine\NodeAnalyzer;
|
|
|
|
use PhpParser\Node\Attribute;
|
|
use PhpParser\Node\Param;
|
|
use PhpParser\Node\Stmt\Class_;
|
|
use PhpParser\Node\Stmt\ClassMethod;
|
|
use PhpParser\Node\Stmt\Property;
|
|
use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode;
|
|
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
|
|
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
|
|
/**
|
|
* @api
|
|
*/
|
|
final class AttrinationFinder
|
|
{
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory
|
|
*/
|
|
private $phpDocInfoFactory;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\Doctrine\NodeAnalyzer\AttributeFinder
|
|
*/
|
|
private $attributeFinder;
|
|
public function __construct(PhpDocInfoFactory $phpDocInfoFactory, \Rector\Doctrine\NodeAnalyzer\AttributeFinder $attributeFinder)
|
|
{
|
|
$this->phpDocInfoFactory = $phpDocInfoFactory;
|
|
$this->attributeFinder = $attributeFinder;
|
|
}
|
|
/**
|
|
* @param \PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Param $node
|
|
* @return \Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode|\PhpParser\Node\Attribute|null
|
|
*/
|
|
public function getByOne($node, string $name)
|
|
{
|
|
$phpDocInfo = $this->phpDocInfoFactory->createFromNode($node);
|
|
if ($phpDocInfo instanceof PhpDocInfo && $phpDocInfo->hasByAnnotationClass($name)) {
|
|
return $phpDocInfo->getByAnnotationClass($name);
|
|
}
|
|
return $this->attributeFinder->findAttributeByClass($node, $name);
|
|
}
|
|
/**
|
|
* @param \PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Param $node
|
|
*/
|
|
public function hasByOne($node, string $name) : bool
|
|
{
|
|
$phpDocInfo = $this->phpDocInfoFactory->createFromNode($node);
|
|
if ($phpDocInfo instanceof PhpDocInfo && $phpDocInfo->hasByAnnotationClass($name)) {
|
|
return \true;
|
|
}
|
|
$attribute = $this->attributeFinder->findAttributeByClass($node, $name);
|
|
return $attribute instanceof Attribute;
|
|
}
|
|
/**
|
|
* @param string[] $classNames
|
|
*/
|
|
public function hasByMany(Property $property, array $classNames) : bool
|
|
{
|
|
$phpDocInfo = $this->phpDocInfoFactory->createFromNode($property);
|
|
if ($phpDocInfo instanceof PhpDocInfo && $phpDocInfo->hasByAnnotationClasses($classNames)) {
|
|
return \true;
|
|
}
|
|
$attribute = $this->attributeFinder->findAttributeByClasses($property, $classNames);
|
|
return $attribute instanceof Attribute;
|
|
}
|
|
}
|