mirror of
https://github.com/rectorphp/rector.git
synced 2025-02-21 01:41:00 +01:00
50 lines
1.8 KiB
PHP
50 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\PhpAttribute\Printer;
|
|
|
|
use PhpParser\Node\Arg;
|
|
use PhpParser\Node\Attribute;
|
|
use PhpParser\Node\Scalar\String_;
|
|
use Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode;
|
|
use Rector\Core\PhpParser\Printer\BetterStandardPrinter;
|
|
use Rector\NodeTypeResolver\Node\AttributeKey;
|
|
final class DoctrineAnnotationFactory
|
|
{
|
|
/**
|
|
* @var \Rector\Core\PhpParser\Printer\BetterStandardPrinter
|
|
*/
|
|
private $betterStandardPrinter;
|
|
public function __construct(\Rector\Core\PhpParser\Printer\BetterStandardPrinter $betterStandardPrinter)
|
|
{
|
|
$this->betterStandardPrinter = $betterStandardPrinter;
|
|
}
|
|
public function createFromAttribute(\PhpParser\Node\Attribute $attribute, string $className) : \Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode
|
|
{
|
|
$items = $this->createItemsFromArgs($attribute->args);
|
|
return new \Rector\BetterPhpDocParser\PhpDoc\DoctrineAnnotationTagValueNode($className, null, $items);
|
|
}
|
|
/**
|
|
* @param Arg[] $args
|
|
* @return mixed[]
|
|
*/
|
|
private function createItemsFromArgs(array $args) : array
|
|
{
|
|
$items = [];
|
|
foreach ($args as $arg) {
|
|
if ($arg->value instanceof \PhpParser\Node\Scalar\String_) {
|
|
// standardize double quotes for annotations
|
|
$arg->value->setAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::KIND, \PhpParser\Node\Scalar\String_::KIND_DOUBLE_QUOTED);
|
|
}
|
|
$itemValue = $this->betterStandardPrinter->print($arg->value);
|
|
if ($arg->name !== null) {
|
|
$name = $this->betterStandardPrinter->print($arg->name);
|
|
$items[$name] = $itemValue;
|
|
} else {
|
|
$items[] = $itemValue;
|
|
}
|
|
}
|
|
return $items;
|
|
}
|
|
}
|