-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAttributeBuilder.php
65 lines (52 loc) · 1.54 KB
/
AttributeBuilder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
/**
* @see https://github.com/open-code-modeling/php-code-ast for the canonical source repository
* @copyright https://github.com/open-code-modeling/php-code-ast/blob/master/COPYRIGHT.md
* @license https://github.com/open-code-modeling/php-code-ast/blob/master/LICENSE.md MIT License
*/
declare(strict_types=1);
namespace OpenCodeModeling\CodeAst\Builder;
use PhpParser\Node\Arg;
use PhpParser\Node\Attribute;
use PhpParser\PrettyPrinter\Standard;
use PhpParser\PrettyPrinterAbstract;
final class AttributeBuilder
{
/**
* @var string
*/
private string $name;
private array $args;
private function __construct(string $name, ...$args)
{
$this->name = $name;
$this->args = $args;
}
public static function fromScratch(string $name, ...$args): self
{
return new self($name, ...$args);
}
public static function fromNode(Attribute $attribute, PrettyPrinterAbstract $printer = null): self
{
if (null === $printer) {
$printer = new Standard(['shortArraySyntax' => true]);
}
return new self($attribute->name->toString(), ...\array_map(static fn (Arg $arg) => $printer->prettyPrint([$arg]), $attribute->args));
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): void
{
$this->name = $name;
}
public function getArgs(): array
{
return $this->args;
}
public function setArgs(...$args): void
{
$this->args = $args;
}
}