Skip to content

Commit 7372c8a

Browse files
committed
perf(autoloader): optimize package list accumulation in loop
1 parent 19cae6e commit 7372c8a

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

system/Autoloader/Autoloader.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,9 @@ private function loadComposerNamespaces(ClassLoader $composer, array $composerPa
418418
$packageList = [];
419419

420420
foreach ($allData as $list) {
421-
$packageList = array_merge($packageList, $list['versions']);
421+
foreach ($list['versions'] as $packageName => $data) {
422+
$packageList[$packageName] = $data;
423+
}
422424
}
423425

424426
// Check config for $composerPackages.

tests/system/Autoloader/AutoloaderTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use CodeIgniter\Exceptions\RuntimeException;
2121
use CodeIgniter\Test\CIUnitTestCase;
2222
use CodeIgniter\Test\ReflectionHelper;
23+
use Composer\Autoload\ClassLoader;
2324
use Config\Autoload;
2425
use Config\Modules;
2526
use PHPUnit\Framework\Attributes\Group;
@@ -417,6 +418,22 @@ public function testFindsComposerRoutesWithComposerPathNotFound(): void
417418
$this->assertArrayNotHasKey('Laminas\\Escaper', $namespaces);
418419
}
419420

421+
public function testLoadComposerNamespacesAccumulatesCorrectly(): void
422+
{
423+
$composer = $this->createMock(ClassLoader::class);
424+
$composer->method('getPrefixesPsr4')->willReturn([
425+
'Laminas\\Escaper\\' => [VENDORPATH . 'composer/../laminas/laminas-escaper/src'],
426+
]);
427+
428+
$loader = new Autoloader();
429+
$invoker = self::getPrivateMethodInvoker($loader, 'loadComposerNamespaces');
430+
431+
$invoker($composer, []);
432+
433+
$namespaces = $loader->getNamespace();
434+
$this->assertArrayHasKey('Laminas\\Escaper', $namespaces);
435+
}
436+
420437
public function testAutoloaderLoadsNonClassFiles(): void
421438
{
422439
$config = new Autoload();

0 commit comments

Comments
 (0)