Skip to content

Commit a9766ce

Browse files
committed
PhpNamespace::add() passes self to ClassLike (BC break)
1 parent 5b0962a commit a9766ce

4 files changed

Lines changed: 10 additions & 3 deletions

File tree

src/PhpGenerator/Factory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private function createClassObject(\ReflectionClass &$from): ClassLike
6161
$class->setReadOnly(PHP_VERSION_ID >= 80200 && $from->isReadOnly());
6262
}
6363

64-
$class->setNamespace(new PhpNamespace($from->getNamespaceName()));
64+
(new PhpNamespace($from->getNamespaceName()))->add($class);
6565
return $class;
6666
}
6767

src/PhpGenerator/PhpNamespace.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ public function add(ClassType|InterfaceType|TraitType|EnumType|GlobalFunction $i
269269
$this->functions[$lower] = $item;
270270
} else {
271271
$this->classes[$lower] = $item;
272+
$item->setNamespace($this);
272273
}
273274

274275
return $this;

tests/PhpGenerator/ClassType.from.phpt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Nette\PhpGenerator\ClassType;
88
use Nette\PhpGenerator\Factory;
99
use Nette\PhpGenerator\InterfaceType;
10+
use Tester\Assert;
1011

1112
require __DIR__ . '/../bootstrap.php';
1213
require __DIR__ . '/fixtures/classes.php';
@@ -29,3 +30,7 @@ $res[] = ClassType::from(Abc\Class9::class);
2930
$res[] = ClassType::from(Abc\Class10::class);
3031

3132
sameFile(__DIR__ . '/expected/ClassType.from.expect', implode("\n", $res));
33+
34+
// class is in namespace
35+
$c = ClassType::from(Abc\Class10::class);
36+
Assert::same($c, $c->getNamespace()->getClass('Class10'));

tests/PhpGenerator/PhpNamespace.add.phpt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ test('adding classes preserves their original namespaces', function () {
3838
(string) $namespace,
3939
);
4040

41-
Assert::null($classA->getNamespace());
42-
Assert::same('X', $classB->getNamespace()->getName());
41+
// namespaces are updated to target namespace
42+
Assert::same($namespace, $classA->getNamespace());
43+
Assert::same($namespace, $classB->getNamespace());
4344
});
4445

4546

0 commit comments

Comments
 (0)