' . $adapterProperty->getName() . '->call(' . var_export($originalClass->getName(), true) . ', ' . var_export($originalMethod->getName(), true) . ', $args);' . "\n\n" . ProxiedMethodReturnExpression::generate('$return', $originalMethod); $defaultValues = self::getDefaultValuesForMethod($originalMethod); $declaredParameterCount = count($originalMethod->getParameters()); $method->setBody( strtr( self::TEMPLATE, [ '#PROXIED_RETURN#' => $proxiedReturn, '#DEFAULT_VALUES#' => var_export($defaultValues, true), '#PARAMETER_COUNT#' => var_export($declaredParameterCount, true), ] ) ); return $method; } /** @psalm-return list */ private static function getDefaultValuesForMethod(MethodReflection $originalMethod): array { $defaultValues = []; foreach ($originalMethod->getParameters() as $parameter) { if ($parameter->isOptional() && $parameter->isDefaultValueAvailable()) { /** @psalm-var int|float|bool|array|string|null */ $defaultValues[] = $parameter->getDefaultValue(); continue; } if ($parameter->isVariadic()) { continue; } $defaultValues[] = null; } return $defaultValues; } }