Skip to content

Commit 68cbd95

Browse files
committed
added PhpNamespace::add() [Closes #27]
1 parent 6e3d8f7 commit 68cbd95

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

src/PhpGenerator/ClassType.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ public function __toString(): string
8585
}
8686

8787

88+
/**
89+
* @internal use PhpNamespace::add()
90+
*/
91+
public function setNamespace(?PhpNamespace $val): void
92+
{
93+
$this->namespace = $val;
94+
}
95+
96+
8897
public function getNamespace(): ?PhpNamespace
8998
{
9099
return $this->namespace;

src/PhpGenerator/PhpNamespace.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,26 @@ public function unresolveName(string $name): string
144144
}
145145

146146

147-
public function addClass(string $name): ClassType
147+
/**
148+
* @return static
149+
*/
150+
public function add(ClassType $class): self
148151
{
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.');
151155
}
152156
$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;
154167
}
155168

156169

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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());

0 commit comments

Comments
 (0)