8000 Address deprecation of ReflectionType::getClass(). · symfony/symfony@32443e4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 32443e4

Browse files
committed
Address deprecation of ReflectionType::getClass().
1 parent 5ec5bfb commit 32443e4

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,16 @@ private static function getResourceMetadataForMethod(\ReflectionMethod $method)
525525
$methodArgumentsMetadata = [];
526526
foreach ($method->getParameters() as $parameter) {
527527
try {
528-
$class = $parameter->getClass();
528+
if (method_exists($parameter, 'getType')) {
529+
$type = $parameter->getType();
530+
if ($type && !$type->isBuiltin()) {
531+
$class = new \ReflectionClass(method_exists($type, 'getName') ? $type->getName() : (string) $type);
532+
} else {
533+
$class = null;
534+
}
535+
} else {
536+
$class = $parameter->getClass();
537+
}
529538
} catch (\ReflectionException $e) {
530539
// type-hint is against a non-existent class
531540
$class = false;

src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ protected function doGetArguments(Request $request, $controller, array $paramete
136136
} else {
137137
$arguments[] = $attributes[$param->name];
138138
}
139-
} elseif ($param->getClass() && $param->getClass()->isInstance($request)) {
139+
} elseif ($this->typeMatchesRequestClass($param, $request)) {
140140
$arguments[] = $request;
141141
} elseif ($param->isDefaultValueAvailable()) {
142142
$arguments[] = $param->getDefaultValue();
@@ -260,4 +260,22 @@ private function getControllerError($callable)
260260

261261
return $message;
262262
}
263+
264+
/**
265+
* @return bool
266+
*/
267+
private function typeMatchesRequestClass(\ReflectionParameter $param, Request $request)
268+
{
269+
if (!method_exists($param, 'getType')) {
270+
return $param->getClass() && $param->getClass()->isInstance($request);
271+
}
272+
273+
if (!($type = $param->getType()) || $type->isBuiltin()) {
274+
return false;
275+
}
276+
277+
$class = new \ReflectionClass(method_exists($type, 'getName') ? $type->getName() : (string) $type);
278+
279+
return $class && $class->isInstance($request);
280+
}
263281
}

src/Symfony/Component/OptionsResolver/OptionsResolver.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public function setDefault($option, $value)
146146
$reflClosure = new \ReflectionFunction($value);
147147
$params = $reflClosure->getParameters();
148148

149-
if (isset($params[0]) && null !== ($class = $params[0]->getClass()) && Options::class === $class->name) {
149+
if (isset($params[0]) && Options::class === $this->getParameterClassName($params[0])) {
150150
// Initialize the option if no previous value exists
151151
if (!isset($this->defaults[$option])) {
152152
$this->defaults[$option] = null;
@@ -1066,4 +1066,20 @@ private static function isValueValidType($type, $value)
10661066
{
10671067
return (\function_exists($isFunction = 'is_'.$type) && $isFunction($value)) || $value instanceof $type;
10681068
}
1069+
1070+
/**
1071+
* @return string|null
1072+
*/
1073+
private function getParameterClassName(\ReflectionParameter $parameter)
1074+
{
1075+
if (!method_exists($parameter, 'getType')) {
1076+
return ($class = $parameter->getClass()) ? null : $class->name;
1077+
}
1078+
1079+
if (!($type = $parameter->getType()) || $type->isBuiltin()) {
1080+
return null;
1081+
}
1082+
1083+
return method_exists($type, 'getName') ? $type->getName() : (string) $type;
1084+
}
10691085
}

0 commit comments

Comments
 (0)
0