Passed
Push — master ( ffdaaa...2bd757 )
by butschster
20:14 queued 13:13
created

PhpNamespace::addClass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Spiral\Reactor\Partial;
6
7
use Nette\PhpGenerator\ClassLike;
8
use Nette\PhpGenerator\ClassType;
9
use Nette\PhpGenerator\EnumType;
10
use Nette\PhpGenerator\InterfaceType;
11
use Nette\PhpGenerator\PhpNamespace as NettePhpNamespace;
12
use Nette\PhpGenerator\TraitType;
13
use Spiral\Reactor\AggregableInterface;
14
use Spiral\Reactor\Aggregator\Elements;
15
use Spiral\Reactor\ClassDeclaration;
16
use Spiral\Reactor\EnumDeclaration;
17
use Spiral\Reactor\InterfaceDeclaration;
18
use Spiral\Reactor\NamedInterface;
19
use Spiral\Reactor\TraitDeclaration;
20
use Spiral\Reactor\Traits;
21
22
final class PhpNamespace implements NamedInterface, AggregableInterface, \Stringable
23
{
24
    use Traits\ClassAware;
25
    use Traits\EnumAware;
26
    use Traits\InterfaceAware;
27
    use Traits\NameAware;
28
    use Traits\TraitAware;
29
30
    private NettePhpNamespace $element;
31
32 34
    public function __construct(string $name)
33
    {
34 34
        $this->element = new NettePhpNamespace($name);
35
    }
36
37 4
    public function __toString(): string
38
    {
39 4
        return $this->element->__toString();
40
    }
41
42 1
    public function hasBracketedSyntax(): bool
43
    {
44 1
        return $this->element->hasBracketedSyntax();
45
    }
46
47 14
    public function addUse(string $name, ?string $alias = null, string $of = NettePhpNamespace::NameNormal): self
48
    {
49 14
        $this->element->addUse($name, $alias, $of);
50
51 14
        return $this;
52
    }
53
54 3
    public function removeUse(string $name, string $of = NettePhpNamespace::NameNormal): void
55
    {
56 3
        $this->element->removeUse($name, $of);
57
    }
58
59 1
    public function addUseFunction(string $name, ?string $alias = null): self
60
    {
61 1
        $this->element->addUseFunction($name, $alias);
62
63 1
        return $this;
64
    }
65
66 1
    public function addUseConstant(string $name, ?string $alias = null): self
67
    {
68 1
        $this->element->addUseConstant($name, $alias);
69
70 1
        return $this;
71
    }
72
73
    /** @return string[] */
74 3
    public function getUses(string $of = NettePhpNamespace::NameNormal): array
75
    {
76 3
        return $this->element->getUses($of);
77
    }
78
79
    public function resolveName(string $name, string $of = NettePhpNamespace::NameNormal): string
80
    {
81
        return $this->element->resolveName($name, $of);
82
    }
83
84
    public function simplifyType(string $type, string $of = NettePhpNamespace::NameNormal): string
85
    {
86
        return $this->element->simplifyType($type, $of);
87
    }
88
89
    public function simplifyName(string $name, string $of = NettePhpNamespace::NameNormal): string
90
    {
91
        return $this->element->simplifyName($name, $of);
92
    }
93
94 6
    public function getElements(): Elements
95
    {
96 6
        return new Elements(\array_map(
97 6
            static fn (ClassLike $element) => match (true) {
98 6
                $element instanceof ClassType => ClassDeclaration::fromElement($element),
99 6
                $element instanceof InterfaceType => InterfaceDeclaration::fromElement($element),
100 6
                $element instanceof TraitType => TraitDeclaration::fromElement($element),
101 6
                $element instanceof EnumType => EnumDeclaration::fromElement($element)
102 6
            },
103 6
            $this->element->getClasses()
104 6
        ));
105
    }
106
107
    /**
108
     * @deprecated since v3.5.
109
     * @see PhpNamespace::removeElement
110
     */
111
    public function removeClass(string $name): self
112
    {
113
        return $this->removeElement($name);
114
    }
115
116 1
    public function removeElement(string $name): self
117
    {
118 1
        $this->element->removeClass($name);
119
120 1
        return $this;
121
    }
122
123
    /**
124
     * @internal
125
     */
126 3
    public static function fromElement(NettePhpNamespace $element): self
127
    {
128 3
        $namespace = new self($element->getName());
129
130 3
        $namespace->element = $element;
131
132 3
        return $namespace;
133
    }
134
135
    /**
136
     * @internal
137
     */
138 17
    public function getElement(): NettePhpNamespace
139
    {
140 17
        return $this->element;
141
    }
142
}
143