Skip to content
This repository was archived by the owner on Jan 17, 2026. It is now read-only.

Commit df88e66

Browse files
authored
fix: ClassMapGenerator get too many classes (#13)
Closes #12
2 parents 1b7cfa3 + 177e2f4 commit df88e66

13 files changed

Lines changed: 37 additions & 21 deletions

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,5 @@ $dispatcher->dispatch(new MyEvent());
3131
```
3232

3333
That's all!
34+
35+
Please note that if your package is also a Brick, it will scan only `src` and `include` directory for Services.

include/Bricks/LoadBricks.php

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,13 @@
3232
use Composer\ClassMapGenerator\ClassMapGenerator;
3333
use Composer\InstalledVersions;
3434
use ReflectionClass;
35-
use ReflectionException;
35+
use Throwable;
3636

3737
/**
3838
* @internal
3939
*/
4040
final readonly class LoadBricks implements BricksLoader
4141
{
42-
/**
43-
* @throws ReflectionException
44-
*/
4542
public function loadInstalledBricks(): array
4643
{
4744
$packages = array_unique(InstalledVersions::getInstalledPackagesByType(self::PACKAGE_TYPE));
@@ -64,12 +61,11 @@ public function loadInstalledBricks(): array
6461

6562
/**
6663
* @return ServiceRepresentation[]
67-
* @throws ReflectionException
6864
*/
6965
private function loadServicesOfPackage(string $package_path): array
7066
{
7167
$result = [];
72-
$map = ClassMapGenerator::createMap($package_path);
68+
$map = $this->getClassMapForPackage($package_path);
7369
foreach ($map as $symbol => $_path) {
7470
$reflection = new ReflectionClass($symbol);
7571

@@ -85,4 +81,22 @@ private function loadServicesOfPackage(string $package_path): array
8581

8682
return $result;
8783
}
84+
85+
/**
86+
* @return array<class-string, non-empty-string>
87+
*/
88+
private function getClassMapForPackage(string $package_path): array
89+
{
90+
$generator = new ClassMapGenerator();
91+
$path_to_try = ['src', 'include'];
92+
foreach ($path_to_try as $path) {
93+
try {
94+
$generator->scanPaths($package_path . '/' . $path);
95+
} catch (Throwable) { // phpcs:ignore
96+
// Ignore it
97+
}
98+
}
99+
100+
return $generator->getClassMap()->getMap();
101+
}
88102
}

tests/unit/Bricks/LoadBricksTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727

2828
namespace Archict\Core\Bricks;
2929

30-
use Archict\Core\Fixtures\brick1\Service1;
31-
use Archict\Core\Fixtures\brick1\Service1Configuration;
30+
use Archict\Core\Fixtures\brick1\src\Service1;
31+
use Archict\Core\Fixtures\brick1\src\Service1Configuration;
3232
use Composer\InstalledVersions;
3333
use PHPUnit\Framework\TestCase;
3434

tests/unit/Event/EventManagerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
namespace Archict\Core\Event;
2929

30-
use Archict\Core\Fixtures\brick1\MyEvent;
30+
use Archict\Core\Fixtures\brick1\src\MyEvent;
3131
use Archict\Core\Services\ServiceManager;
3232
use PHPUnit\Framework\TestCase;
3333

tests/unit/Event/LoadEventsTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
namespace Archict\Core\Event;
2929

3030
use Archict\Brick\Service;
31-
use Archict\Core\Fixtures\brick1\Service1;
31+
use Archict\Core\Fixtures\brick1\src\Service1;
3232
use Archict\Core\Services\ServiceManager;
3333
use Archict\Core\Services\ServiceRepresentation;
3434
use PHPUnit\Framework\TestCase;

tests/unit/Fixtures/ServiceWithDependency.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
namespace Archict\Core\Fixtures;
2929

30-
use Archict\Core\Fixtures\brick1\Service1;
30+
use Archict\Core\Fixtures\brick1\src\Service1;
3131

3232
final readonly class ServiceWithDependency
3333
{

tests/unit/Fixtures/brick1/IService1.php renamed to tests/unit/Fixtures/brick1/src/IService1.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
declare(strict_types=1);
2727

28-
namespace Archict\Core\Fixtures\brick1;
28+
namespace Archict\Core\Fixtures\brick1\src;
2929

3030
interface IService1
3131
{

tests/unit/Fixtures/brick1/MyEvent.php renamed to tests/unit/Fixtures/brick1/src/MyEvent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
declare(strict_types=1);
2727

28-
namespace Archict\Core\Fixtures\brick1;
28+
namespace Archict\Core\Fixtures\brick1\src;
2929

3030
final class MyEvent
3131
{

tests/unit/Fixtures/brick1/Service1.php renamed to tests/unit/Fixtures/brick1/src/Service1.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
declare(strict_types=1);
2727

28-
namespace Archict\Core\Fixtures\brick1;
28+
namespace Archict\Core\Fixtures\brick1\src;
2929

3030
use Archict\Brick\ListeningEvent;
3131
use Archict\Brick\Service;

tests/unit/Fixtures/brick1/Service1Configuration.php renamed to tests/unit/Fixtures/brick1/src/Service1Configuration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
declare(strict_types=1);
2727

28-
namespace Archict\Core\Fixtures\brick1;
28+
namespace Archict\Core\Fixtures\brick1\src;
2929

3030
final readonly class Service1Configuration
3131
{

0 commit comments

Comments
 (0)