/**
  * Builds an array of resolved parameters suitable for invokeArgs.
  *
  * @param \ReflectionParameter[] $parameters
  * @param RequestInterface       $request
  * @param Context                $context
  *
  * @return mixed[]
  */
 private function buildParameters(array $parameters, RequestInterface $request, Context $context)
 {
     $result = [];
     foreach ($parameters as $index => $parameter) {
         if ($context->hasParameter($parameter->getName())) {
             $result[] = $context->getParameter($parameter->getName());
             continue;
         }
         $dependency = $parameter->getClass();
         if ($dependency === null) {
             if ($parameter->isDefaultValueAvailable()) {
                 $result[] = $parameter->getDefaultValue();
                 continue;
             }
         } elseif ($dependency->getName() == RequestInterface::class || in_array(RequestInterface::class, $dependency->getInterfaceNames())) {
             $result[] = $request;
             continue;
         } elseif ($dependency->getName() == Context::class || in_array(Context::class, $dependency->getInterfaceNames())) {
             $result[] = $context;
             continue;
         } elseif ($parameter->isOptional()) {
             $result[] = $parameter->getDefaultValue();
             continue;
         }
         throw new \RuntimeException(sprintf('Unable to resolve dependency "%s".', $parameter->getName()));
     }
     return $result;
 }