Skip to content
This repository was archived by the owner on May 30, 2025. It is now read-only.

Commit e0fb183

Browse files
committed
minor: Class_$parent_class_name and $child_class_names
1 parent 5427070 commit e0fb183

3 files changed

Lines changed: 55 additions & 0 deletions

File tree

runtime/Compilation/Class_.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
* Computed:
2424
*
2525
* @property \ReflectionClass $reflection
26+
* @property ?string $parent_class_name
2627
* @property Class_ $parent_class
28+
* @property string[] $child_class_names
2729
* @property Class_[] $static_traits
2830
* @property Class_[] $actual_dynamic_traits
2931
* @property Class_[] $dynamic_traits
@@ -71,6 +73,24 @@ protected function get_parent_class(): ?Class_ {
7173
return $osm_app->app->classes[$class->getName()] ?? null;
7274
}
7375

76+
protected function get_parent_class_name(): ?string {
77+
return $this->parent_class?->name;
78+
}
79+
80+
protected function get_child_class_names(): array {
81+
global $osm_app; /* @var Compiler $osm_app */
82+
83+
$childClassNames = [];
84+
85+
foreach ($osm_app->app->classes as $class) {
86+
if ($class->parent_class_name == $this->name) {
87+
$childClassNames[] = $class->name;
88+
}
89+
}
90+
91+
return $childClassNames;
92+
}
93+
7494
/** @noinspection PhpUnused */
7595
protected function get_static_traits(): array {
7696
global $osm_app; /* @var Compiler $osm_app */

src/Class_.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* @property string $name #[Serialized]
1414
* @property ?string $parent_class_name #[Serialized]
1515
* @property ?Class_ $parent_class
16+
* @property string[] $child_class_names #[Serialized]
1617
* @property Property[] $properties #[Serialized]
1718
* @property Method[] $methods #[Serialized]
1819
* @property array|object[] $attributes #[Serialized]

tests/test_02_class_loading.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,40 @@ public function test_that_module_classes_are_loaded() {
4141
});
4242
}
4343

44+
public function test_that_parent_classes_are_known() {
45+
// GIVEN a compiler configured to compile a sample app
46+
$compiler = Compiler::new(['app_class_name' => App::class]);
47+
48+
Apps::run($compiler, function(Compiler $compiler) {
49+
// WHEN you check reflections of module classes
50+
// THEN only classes of loaded modules are there
51+
$this->assertArrayHasKey(\Osm\Core\Samples\Some\Some::class,
52+
$compiler->app->classes);
53+
54+
// AND each class has a module class name assigned
55+
$this->assertTrue($compiler->app->classes
56+
[\Osm\Core\Samples\Some\Some::class]->parent_class_name ==
57+
\Osm\Core\Object_::class);
58+
});
59+
}
60+
61+
public function test_that_child_classes_are_known() {
62+
// GIVEN a compiler configured to compile a sample app
63+
$compiler = Compiler::new(['app_class_name' => App::class]);
64+
65+
Apps::run($compiler, function(Compiler $compiler) {
66+
// WHEN you check reflections of module classes
67+
// THEN only classes of loaded modules are there
68+
$this->assertArrayHasKey(\Osm\Core\Samples\Some\Some::class,
69+
$compiler->app->classes);
70+
71+
// AND each class has a module class name assigned
72+
$this->assertTrue(in_array(\Osm\Core\Samples\Some\Other::class,
73+
$compiler->app->classes[\Osm\Core\Samples\Some\Some::class]
74+
->child_class_names));
75+
});
76+
}
77+
4478
public function test_that_external_classes_are_loaded() {
4579
// GIVEN a compiler configured to compile a sample app
4680
$compiler = Compiler::new(['app_class_name' => App::class]);

0 commit comments

Comments
 (0)