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 8ef80f5

Browse files
Fix for ParameterBag class not present
1 parent 261955f commit 8ef80f5

File tree

1 file changed

+38
-16
lines changed

1 file changed

+38
-16
lines changed

‎src/Type/Symfony/ServiceDynamicReturnTypeExtension.php‎

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use PHPStan\Type\ObjectType;
1717
use PHPStan\Type\Type;
1818
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
19+
use function class_exists;
1920
use function in_array;
2021

2122
final class ServiceDynamicReturnTypeExtension implements DynamicMethodReturnTypeExtension
@@ -30,7 +31,10 @@ final class ServiceDynamicReturnTypeExtension implements DynamicMethodReturnType
3031
/** @var ServiceMap */
3132
private $serviceMap;
3233

33-
/** @var ParameterBag */
34+
/** @var ParameterMap */
35+
private $parameterMap;
36+
37+
/** @var ParameterBag|null */
3438
private $parameterBag;
3539

3640
public function __construct(
@@ -43,7 +47,7 @@ public function __construct(
4347
$this->className = $className;
4448
$this->constantHassers = $configuration->hasConstantHassers();
4549
$this->serviceMap = $symfonyServiceMap;
46-
$this->parameterBag = $this->createParameterBag($symfonyParameterMap);
50+
$this->parameterMap = $symfonyParameterMap;
4751
}
4852

4953
public function getClass(): string
@@ -78,17 +82,46 @@ private function getGetTypeFromMethodCall(
7882
return $returnType;
7983
}
8084

85+
$parameterBag = $this->tryGetParameterBag();
86+
if ($parameterBag === null) {
87+
return $returnType;
88+
}
89+
8190
$serviceId = $this->serviceMap::getServiceIdFromNode($methodCall->getArgs()[0]->value, $scope);
8291
if ($serviceId !== null) {
8392
$service = $this->serviceMap->getService($serviceId);
8493
if ($service !== null && (!$service->isSynthetic() || $service->getClass() !== null)) {
85-
return new ObjectType($this->determineServiceClass($service) ?? $serviceId);
94+
return new ObjectType($this->determineServiceClass($parameterBag, $service) ?? $serviceId);
8695
}
8796
}
8897

8998
return $returnType;
9099
}
91100

101+
private function tryGetParameterBag(): ?ParameterBag
102+
{
103+
if ($this->parameterBag !== null) {
104+
return $this->parameterBag;
105+
}
106+
107+
return $this->parameterBag = $this->tryCreateParameterBag();
108+
}
109+
110+
private function tryCreateParameterBag(): ?ParameterBag
111+
{
112+
if (!class_exists(ParameterBag::class)) {
113+
return null;
114+
}
115+
116+
$parameters = [];
117+
118+
foreach ($this->parameterMap->getParameters() as $parameterDefinition) {
119+
$parameters[$parameterDefinition->getKey()] = $parameterDefinition->getValue();
120+
}
121+
122+
return new ParameterBag($parameters);
123+
}
124+
92125
private function getHasTypeFromMethodCall(
93126
MethodReflection $methodReflection,
94127
MethodCall $methodCall,
@@ -109,20 +142,9 @@ private function getHasTypeFromMethodCall(
109142
return $returnType;
110143
}
111144

112-
private function determineServiceClass(ServiceDefinition $service): ?string
113-
{
114-
return $this->parameterBag->resolveValue($service->getClass());
115-
}
116-
117-
private function createParameterBag(ParameterMap $symfonyParameterMap): ParameterBag
145+
private function determineServiceClass(ParameterBag $parameterBag, ServiceDefinition $service): ?string
118146
{
119-
$parameters = [];
120-
121-
foreach ($symfonyParameterMap->getParameters() as $parameterDefinition) {
122-
$parameters[$parameterDefinition->getKey()] = $parameterDefinition->getValue();
123-
}
124-
125-
return new ParameterBag($parameters);
147+
return $parameterBag->resolveValue($service->getClass());
126148
}
127149

128150
}

0 commit comments

Comments
(0)

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