Skip to content

Commit 345f7ba

Browse files
authored
Handle aliases before parent resolving in service map (#583)
1 parent a216927 commit 345f7ba

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

src/Drupal/ServiceMap.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,16 @@ public function setDrupalServices(array $drupalServices): void
2525
self::$services = [];
2626

2727
foreach ($drupalServices as $serviceId => $serviceDefinition) {
28+
if (isset($serviceDefinition['alias'], $drupalServices[$serviceDefinition['alias']])) {
29+
$serviceDefinition = $drupalServices[$serviceDefinition['alias']];
30+
}
2831
if (isset($serviceDefinition['parent'], $drupalServices[$serviceDefinition['parent']])) {
2932
$serviceDefinition = $this->resolveParentDefinition($serviceDefinition['parent'], $serviceDefinition, $drupalServices);
3033
}
3134

3235
// @todo support factories
3336
if (!isset($serviceDefinition['class'])) {
34-
if (isset($serviceDefinition['alias'], $drupalServices[$serviceDefinition['alias']])) {
35-
$aliasedService = $drupalServices[$serviceDefinition['alias']];
36-
37-
if (isset($aliasedService['class'])) {
38-
$serviceDefinition['class'] = $drupalServices[$serviceDefinition['alias']]['class'];
39-
} elseif (class_exists($serviceDefinition['alias'])) {
40-
$serviceDefinition['class'] = $serviceDefinition['alias'];
41-
}
42-
} elseif (class_exists($serviceId)) {
37+
if (class_exists($serviceId)) {
4338
$serviceDefinition['class'] = $serviceId;
4439
} else {
4540
continue;

tests/src/ServiceMapFactoryTest.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace mglaman\PHPStanDrupal\Tests;
44

5+
use Drupal\Core\Logger\LoggerChannel;
56
use mglaman\PHPStanDrupal\Drupal\DrupalServiceDefinition;
67
use mglaman\PHPStanDrupal\Drupal\ServiceMap;
78
use PHPUnit\Framework\TestCase;
@@ -81,6 +82,18 @@ public function testFactory(string $id, callable $validator): void
8182
'class' => 'Drupal\service_map\Concrete',
8283
'public' => true,
8384
],
85+
'logger.channel_base' => [
86+
'abstract' => true,
87+
'class' => LoggerChannel::class,
88+
'factory' => ['@logger.factory', 'get'],
89+
],
90+
'logger.channel.workspaces' => [
91+
'parent' => 'logger.channel_base',
92+
'arguments' => ['workspaces'],
93+
],
94+
'Psr\Log\LoggerInterface $loggerWorkspaces' => [
95+
'alias' => 'logger.channel.workspaces'
96+
]
8497
]);
8598
$validator($service->getService($id));
8699
}
@@ -112,7 +125,7 @@ function (?DrupalServiceDefinition $service): void {
112125
yield [
113126
'config.storage.sync',
114127
function (DrupalServiceDefinition $service): void {
115-
self::assertEquals('config.storage.staging', $service->getAlias());
128+
self::assertEquals('Drupal\Core\Config\FileStorage', $service->getClass());
116129
}
117130
];
118131
yield [
@@ -193,6 +206,12 @@ function (DrupalServiceDefinition $service): void {
193206
self::assertNull($service->getAlias());
194207
}
195208
];
209+
yield [
210+
'Psr\Log\LoggerInterface $loggerWorkspaces',
211+
function (DrupalServiceDefinition $service): void {
212+
self::assertEquals(LoggerChannel::class, $service->getClass());
213+
}
214+
];
196215
}
197216

198217
}

0 commit comments

Comments
 (0)