@@ -343,17 +343,7 @@ public function configure(array $config)
343
343
}
344
344
345
345
if (isset ($ config ['aliases ' ])) {
346
- if ($ this ->configured ) {
347
- $ intersect = $ this ->mergeIntoArray ($ this ->aliases , $ config ['aliases ' ]);
348
- if ($ intersect ) {
349
- $ this ->resolveAliases ($ this ->aliases );
350
- } else {
351
- $ this ->resolveAliases ($ config ['aliases ' ], true );
352
- }
353
- } else {
354
- $ this ->aliases = $ config ['aliases ' ] + $ this ->aliases ;
355
- $ this ->resolveAliases ($ this ->aliases );
356
- }
346
+ $ this ->configureAliases ($ config ['aliases ' ]);
357
347
} elseif (! $ this ->configured && ! empty ($ this ->aliases )) {
358
348
$ this ->resolveAliases ($ this ->aliases );
359
349
}
@@ -384,6 +374,31 @@ public function configure(array $config)
384
374
return $ this ;
385
375
}
386
376
377
+ /**
378
+ * @param string[] $aliases
379
+ *
380
+ * @return void
381
+ */
382
+ private function configureAliases (array $ aliases )
383
+ {
384
+ if (! $ this ->configured ) {
385
+ $ this ->aliases = $ aliases + $ this ->aliases ;
386
+
387
+ $ this ->resolveAliases ($ this ->aliases );
388
+
389
+ return ;
390
+ }
391
+
392
+ if ($ this ->mergeIntoArray ($ this ->aliases , $ aliases )) {
393
+ $ this ->resolveAliases ($ this ->aliases );
394
+
395
+ return ;
396
+ }
397
+
398
+ $ this ->resolveAliases ($ aliases );
399
+ $ this ->resolveNewAliasesWithPreviouslyResolvedAliases ($ aliases );
400
+ }
401
+
387
402
/**
388
403
* Merge source into destination.
389
404
* This method has good performance:
@@ -609,10 +624,11 @@ private function resolveInitializers(array $initializers)
609
624
/**
610
625
* Resolve aliases to their canonical service names.
611
626
*
612
- * @param array $aliases
613
- * @param boolean $onlyNewAliases
627
+ * @param string[] $aliases
628
+ *
629
+ * @returns void
614
630
*/
615
- private function resolveAliases (array $ aliases, $ onlyNewAliases = false )
631
+ private function resolveAliases (array $ aliases )
616
632
{
617
633
foreach ($ aliases as $ alias => $ service ) {
618
634
$ visited = [];
@@ -629,14 +645,21 @@ private function resolveAliases(array $aliases, $onlyNewAliases = false)
629
645
630
646
$ this ->resolvedAliases [$ alias ] = $ name ;
631
647
}
648
+ }
632
649
633
- // Check and replace new aliases as targets in exists aliases.
634
-
635
- if ($ onlyNewAliases ) {
636
- foreach ($ this ->resolvedAliases as $ name => $ target ) {
637
- if (isset ($ aliases [$ target ])) {
638
- $ this ->resolvedAliases [$ name ] = $ this ->resolvedAliases [$ target ];
639
- }
650
+ /**
651
+ * Rewrites the map of aliases by resolving the given $aliases with the existing resolved ones.
652
+ * This is mostly done for performance reasons.
653
+ *
654
+ * @param string[] $aliases
655
+ *
656
+ * @return void
657
+ */
658
+ private function resolveNewAliasesWithPreviouslyResolvedAliases (array $ aliases )
659
+ {
660
+ foreach ($ this ->resolvedAliases as $ name => $ target ) {
661
+ if (isset ($ aliases [$ target ])) {
662
+ $ this ->resolvedAliases [$ name ] = $ this ->resolvedAliases [$ target ];
640
663
}
641
664
}
642
665
}
0 commit comments