diff --git a/src/Capability/Registry/ReferenceHandler.php b/src/Capability/Registry/ReferenceHandler.php index d4af316..18a3caf 100644 --- a/src/Capability/Registry/ReferenceHandler.php +++ b/src/Capability/Registry/ReferenceHandler.php @@ -85,10 +85,28 @@ private function prepareArguments(\ReflectionFunctionAbstract $reflection, array $finalArgs = []; foreach ($reflection->getParameters() as $parameter) { - // TODO: Handle variadic parameters. $paramName = $parameter->getName(); $paramPosition = $parameter->getPosition(); + // Handle variadic parameters + if ($parameter->isVariadic()) { + // For variadic parameters, collect all remaining arguments + $variadicArgs = []; + foreach ($arguments as $key => $value) { + if (is_numeric($key) && $key >= $paramPosition) { + try { + $variadicArgs[] = $this->castArgumentType($value, $parameter); + } catch (InvalidArgumentException $e) { + throw RegistryException::invalidParams($e->getMessage(), $e); + } catch (\Throwable $e) { + throw RegistryException::internalError("Error processing variadic parameter `{$paramName}`: {$e->getMessage()}", $e); + } + } + } + $finalArgs[$paramPosition] = $variadicArgs; + continue; + } + if (isset($arguments[$paramName])) { $argument = $arguments[$paramName]; try {