File tree Expand file tree Collapse file tree 3 files changed +48
-4
lines changed Expand file tree Collapse file tree 3 files changed +48
-4
lines changed Original file line number Diff line number Diff line change @@ -85,6 +85,15 @@ public function __toString(): string
85
85
}
86
86
87
87
88
+ /**
89
+ * @internal use PhpNamespace::add()
90
+ */
91
+ public function setNamespace (?PhpNamespace $ val ): void
92
+ {
93
+ $ this ->namespace = $ val ;
94
+ }
95
+
96
+
88
97
public function getNamespace (): ?PhpNamespace
89
98
{
90
99
return $ this ->namespace ;
Original file line number Diff line number Diff line change @@ -144,13 +144,26 @@ public function unresolveName(string $name): string
144
144
}
145
145
146
146
147
- public function addClass (string $ name ): ClassType
147
+ /**
148
+ * @return static
149
+ */
150
+ public function add (ClassType $ class ): self
148
151
{
149
- if (isset ($ this ->classes [$ name ])) {
150
- throw new Nette \InvalidArgumentException ("Class $ name was already added. " );
152
+ $ name = $ class ->getName ();
153
+ if (!$ name ) {
154
+ throw new Nette \InvalidArgumentException ('Class does not have a name. ' );
151
155
}
152
156
$ this ->addUse ($ this ->name . '\\' . $ name );
153
- return $ this ->classes [$ name ] = new ClassType ($ name , $ this );
157
+ $ class ->setNamespace ($ this );
158
+ $ this ->classes [$ name ] = $ class ;
159
+ return $ this ;
160
+ }
161
+
162
+
163
+ public function addClass (string $ name ): ClassType
164
+ {
165
+ $ this ->add ($ class = new ClassType ($ name ));
166
+ return $ class ;
154
167
}
155
168
156
169
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ use Nette \PhpGenerator \ClassType ;
6
+ use Nette \PhpGenerator \PhpNamespace ;
7
+ use Tester \Assert ;
8
+
9
+ require __DIR__ . '/../bootstrap.php ' ;
10
+
11
+
12
+ Assert::exception (function () {
13
+ (new PhpNamespace ('Foo ' ))->add (new ClassType );
14
+ }, Nette \InvalidArgumentException::class, 'Class does not have a name. ' );
15
+
16
+
17
+ $ namespace = (new PhpNamespace ('Foo ' ))
18
+ ->add ($ classA = new ClassType ('A ' ))
19
+ ->add ($ classB = new ClassType ('B ' , new PhpNamespace ('X ' )));
20
+
21
+ Assert::same ($ namespace , $ classA ->getNamespace ());
22
+ Assert::same ($ namespace , $ classB ->getNamespace ());
You can’t perform that action at this time.
0 commit comments