Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6cfde57

Browse files
Grzegorz KorbaWirone
Grzegorz Korba
authored andcommitted
Use Symfony's parameter bag for resolving placeholders
1 parent a0da7dc commit 6cfde57

File tree

4 files changed

+15
-13
lines changed

4 files changed

+15
-13
lines changed

‎src/Type/Symfony/ServiceDynamicReturnTypeExtension.php‎

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
use PHPStan\Type\DynamicMethodReturnTypeExtension;
1616
use PHPStan\Type\ObjectType;
1717
use PHPStan\Type\Type;
18+
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
1819
use function in_array;
19-
use function is_scalar;
20-
use function strpos;
21-
use function trim;
2220

2321
final class ServiceDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
2422
{
@@ -32,8 +30,8 @@ final class ServiceDynamicReturnTypeExtension implements DynamicMethodReturnType
3230
/** @var ServiceMap */
3331
private $serviceMap;
3432

35-
/** @var ParameterMap */
36-
private $parameterMap;
33+
/** @var ParameterBag */
34+
private $parameterBag;
3735

3836
public function __construct(
3937
string $className,
@@ -45,7 +43,7 @@ public function __construct(
4543
$this->className = $className;
4644
$this->constantHassers = $configuration->hasConstantHassers();
4745
$this->serviceMap = $symfonyServiceMap;
48-
$this->parameterMap = $symfonyParameterMap;
46+
$this->parameterBag = $this->createParameterBag($symfonyParameterMap);
4947
}
5048

5149
public function getClass(): string
@@ -113,17 +111,18 @@ private function getHasTypeFromMethodCall(
113111

114112
private function determineServiceClass(ServiceDefinition $service): ?string
115113
{
116-
$class = $service->getClass();
114+
return $this->parameterBag->resolveValue($service->getClass());
115+
}
117116

118-
if ($class !== null && strpos($class, '%') === 0) {
119-
$param = $this->parameterMap->getParameter(trim($class, '%'));
117+
private function createParameterBag(ParameterMap $symfonyParameterMap): ParameterBag
118+
{
119+
$parameters = [];
120120

121-
if ($param !== null && is_scalar($param->getValue())) {
122-
return (string) $param->getValue();
123-
}
121+
foreach ($symfonyParameterMap->getParameters() as $parameterDefinition) {
122+
$parameters[$parameterDefinition->getKey()] = $parameterDefinition->getValue();
124123
}
125124

126-
return $class;
125+
return newParameterBag($parameters);
127126
}
128127

129128
}

‎tests/Type/Symfony/container.xml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
<services>
5454
<service id="foo" class="Foo" public="true"></service>
5555
<service id="parameterised_foo" class="%app.class%"></service>
56+
<service id="parameterised_bar" class="%app.class%\Bar"></service>
5657
<service id="synthetic" class="Synthetic" public="true" synthetic="true" />
5758
</services>
5859
</container>

‎tests/Type/Symfony/data/ExampleAbstractController.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public function services(): void
1414
{
1515
assertType('Foo', $this->get('foo'));
1616
assertType('Foo', $this->get('parameterised_foo'));
17+
assertType('Foo\Bar', $this->get('parameterised_bar'));
1718
assertType('Synthetic', $this->get('synthetic'));
1819
assertType('object', $this->get('bar'));
1920
assertType('object', $this->get(doFoo()));

‎tests/Type/Symfony/data/ExampleController.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public function services(): void
1414
{
1515
assertType('Foo', $this->get('foo'));
1616
assertType('Foo', $this->get('parameterised_foo'));
17+
assertType('Foo\Bar', $this->get('parameterised_bar'));
1718
assertType('Synthetic', $this->get('synthetic'));
1819
assertType('object', $this->get('bar'));
1920
assertType('object', $this->get(doFoo()));

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /