Skip to content
This repository was archived by the owner on Feb 6, 2020. It is now read-only.

Commit 094fb53

Browse files
committed
#112 #113 removed excessive inlining, named actual logic that resolves new aliases via old aliases
1 parent d2aafcc commit 094fb53

File tree

1 file changed

+44
-21
lines changed

1 file changed

+44
-21
lines changed

src/ServiceManager.php

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -343,17 +343,7 @@ public function configure(array $config)
343343
}
344344

345345
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']);
357347
} elseif (! $this->configured && ! empty($this->aliases)) {
358348
$this->resolveAliases($this->aliases);
359349
}
@@ -384,6 +374,31 @@ public function configure(array $config)
384374
return $this;
385375
}
386376

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+
387402
/**
388403
* Merge source into destination.
389404
* This method has good performance:
@@ -609,10 +624,11 @@ private function resolveInitializers(array $initializers)
609624
/**
610625
* Resolve aliases to their canonical service names.
611626
*
612-
* @param array $aliases
613-
* @param boolean $onlyNewAliases
627+
* @param string[] $aliases
628+
*
629+
* @returns void
614630
*/
615-
private function resolveAliases(array $aliases, $onlyNewAliases = false)
631+
private function resolveAliases(array $aliases)
616632
{
617633
foreach ($aliases as $alias => $service) {
618634
$visited = [];
@@ -629,14 +645,21 @@ private function resolveAliases(array $aliases, $onlyNewAliases = false)
629645

630646
$this->resolvedAliases[$alias] = $name;
631647
}
648+
}
632649

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];
640663
}
641664
}
642665
}

0 commit comments

Comments
 (0)