mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-08 04:10:51 +00:00
727b9f46f0
bfa1891c50
[cleanup] Remove 73 unused public methods (#3245)
107 lines
4.5 KiB
PHP
107 lines
4.5 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\PhpAttribute\NodeFactory;
|
|
|
|
use PhpParser\Node\Arg;
|
|
use PhpParser\Node\Attribute;
|
|
use PhpParser\Node\AttributeGroup;
|
|
use PhpParser\Node\Expr;
|
|
use PhpParser\Node\Name\FullyQualified;
|
|
use PhpParser\Node\Stmt\Use_;
|
|
use Rector\BetterPhpDocParser\PhpDoc\ArrayItemNode;
|
|
use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode;
|
|
use Rector\NodeTypeResolver\Node\AttributeKey;
|
|
use Rector\Php80\ValueObject\AnnotationToAttribute;
|
|
use Rector\PhpAttribute\AnnotationToAttributeMapper;
|
|
use Rector\PhpAttribute\AttributeArrayNameInliner;
|
|
use Rector\PhpAttribute\NodeAnalyzer\ExprParameterReflectionTypeCorrector;
|
|
/**
|
|
* @see \Rector\Tests\PhpAttribute\Printer\PhpAttributeGroupFactoryTest
|
|
*/
|
|
final class PhpAttributeGroupFactory
|
|
{
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\PhpAttribute\AnnotationToAttributeMapper
|
|
*/
|
|
private $annotationToAttributeMapper;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\PhpAttribute\NodeFactory\AttributeNameFactory
|
|
*/
|
|
private $attributeNameFactory;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\PhpAttribute\NodeFactory\NamedArgsFactory
|
|
*/
|
|
private $namedArgsFactory;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\PhpAttribute\NodeAnalyzer\ExprParameterReflectionTypeCorrector
|
|
*/
|
|
private $exprParameterReflectionTypeCorrector;
|
|
/**
|
|
* @readonly
|
|
* @var \Rector\PhpAttribute\AttributeArrayNameInliner
|
|
*/
|
|
private $attributeArrayNameInliner;
|
|
public function __construct(AnnotationToAttributeMapper $annotationToAttributeMapper, \Rector\PhpAttribute\NodeFactory\AttributeNameFactory $attributeNameFactory, \Rector\PhpAttribute\NodeFactory\NamedArgsFactory $namedArgsFactory, ExprParameterReflectionTypeCorrector $exprParameterReflectionTypeCorrector, AttributeArrayNameInliner $attributeArrayNameInliner)
|
|
{
|
|
$this->annotationToAttributeMapper = $annotationToAttributeMapper;
|
|
$this->attributeNameFactory = $attributeNameFactory;
|
|
$this->namedArgsFactory = $namedArgsFactory;
|
|
$this->exprParameterReflectionTypeCorrector = $exprParameterReflectionTypeCorrector;
|
|
$this->attributeArrayNameInliner = $attributeArrayNameInliner;
|
|
}
|
|
public function createFromSimpleTag(AnnotationToAttribute $annotationToAttribute) : AttributeGroup
|
|
{
|
|
return $this->createFromClass($annotationToAttribute->getAttributeClass());
|
|
}
|
|
public function createFromClass(string $attributeClass) : AttributeGroup
|
|
{
|
|
$fullyQualified = new FullyQualified($attributeClass);
|
|
$attribute = new Attribute($fullyQualified);
|
|
return new AttributeGroup([$attribute]);
|
|
}
|
|
/**
|
|
* @api tests
|
|
* @param mixed[] $items
|
|
*/
|
|
public function createFromClassWithItems(string $attributeClass, array $items) : AttributeGroup
|
|
{
|
|
$fullyQualified = new FullyQualified($attributeClass);
|
|
$args = $this->createArgsFromItems($items, $attributeClass);
|
|
$attribute = new Attribute($fullyQualified, $args);
|
|
return new AttributeGroup([$attribute]);
|
|
}
|
|
/**
|
|
* @param Use_[] $uses
|
|
*/
|
|
public function create(DoctrineAnnotationTagValueNode $doctrineAnnotationTagValueNode, AnnotationToAttribute $annotationToAttribute, array $uses) : AttributeGroup
|
|
{
|
|
$values = $doctrineAnnotationTagValueNode->getValuesWithSilentKey();
|
|
$args = $this->createArgsFromItems($values, $annotationToAttribute->getAttributeClass());
|
|
$args = $this->attributeArrayNameInliner->inlineArrayToArgs($args);
|
|
$attributeName = $this->attributeNameFactory->create($annotationToAttribute, $doctrineAnnotationTagValueNode, $uses);
|
|
// keep FQN in the attribute, so it can be easily detected later
|
|
$attributeName->setAttribute(AttributeKey::PHP_ATTRIBUTE_NAME, $annotationToAttribute->getAttributeClass());
|
|
$attribute = new Attribute($attributeName, $args);
|
|
return new AttributeGroup([$attribute]);
|
|
}
|
|
/**
|
|
* @api tests
|
|
*
|
|
* @param ArrayItemNode[]|mixed[] $items
|
|
* @return Arg[]
|
|
*/
|
|
public function createArgsFromItems(array $items, string $attributeClass) : array
|
|
{
|
|
/** @var Expr[]|Expr\Array_ $mappedItems */
|
|
$mappedItems = $this->annotationToAttributeMapper->map($items);
|
|
$mappedItems = $this->exprParameterReflectionTypeCorrector->correctItemsByAttributeClass($mappedItems, $attributeClass);
|
|
// the key here should contain the named argument
|
|
return $this->namedArgsFactory->createFromValues($mappedItems);
|
|
}
|
|
}
|