Skip to content

Commit d00c9c9

Browse files
committed
PhpNamespace::add() passes self to ClassLike (BC break)
1 parent 69f0e4d commit d00c9c9

File tree

4 files changed

+10
-3
lines changed

4 files changed

+10
-3
lines changed

src/PhpGenerator/Factory.php

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

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

src/PhpGenerator/PhpNamespace.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ public function add(ClassType|InterfaceType|TraitType|EnumType|GlobalFunction $i
277277
}
278278

279279
$this->classes[$lower] = $item;
280+
$item->setNamespace($this);
280281
}
281282

282283
return $this;

tests/PhpGenerator/ClassType.from.phpt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ declare(strict_types=1);
99
use Nette\PhpGenerator\ClassType;
1010
use Nette\PhpGenerator\Factory;
1111
use Nette\PhpGenerator\InterfaceType;
12+
use Tester\Assert;
1213

1314
require __DIR__ . '/../bootstrap.php';
1415
require __DIR__ . '/fixtures/classes.php';
@@ -31,3 +32,7 @@ $res[] = ClassType::from(Abc\Class9::class);
3132
$res[] = ClassType::from(Abc\Class10::class);
3233

3334
sameFile(__DIR__ . '/expected/ClassType.from.expect', implode("\n", $res));
35+
36+
// class is in namespace
37+
$c = ClassType::from(Abc\Class10::class);
38+
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
@@ -40,8 +40,9 @@ test('adding classes preserves their original namespaces', function () {
4040
(string) $namespace,
4141
);
4242

43-
Assert::null($classA->getNamespace());
44-
Assert::same('X', $classB->getNamespace()->getName());
43+
// namespaces are updated to target namespace
44+
Assert::same($namespace, $classA->getNamespace());
45+
Assert::same($namespace, $classB->getNamespace());
4546
});
4647

4748

0 commit comments

Comments
 (0)