/**
  * Builds an instance of the given type.
  *
  * @param string  $type
  * @param mixed[] $arguments
  * @param bool    $isSingleton
  *
  * @return object
  */
 private function buildInstance($type, array $arguments = [], $isSingleton = true)
 {
     $class = $type;
     if (isset($this->interfaces[$class])) {
         $class = $this->interfaces[$class];
     }
     $key = $this->buildKey($class, $arguments);
     if ($isSingleton && isset($this->objects[$key])) {
         return $this->objects[$class];
     }
     if (isset($this->processing[$class])) {
         return;
     }
     $this->processing[$class] = true;
     if (isset($this->factories[$class])) {
         $factory = $this->factories[$class];
         $parameters = $this->resolveObjects($this->reflector->resolveFunctionParameters($factory, $arguments), 'Closure');
         $result = $factory(...$parameters);
     } else {
         if (!$this->reflector->isInstantiable($class)) {
             throw new \RuntimeException(sprintf('"%s" is not instantiable.', $class));
         }
         $parameters = $this->resolveObjects($this->reflector->resolveMethodParameters($class, '__construct', $arguments), $class);
         $result = new $class(...$parameters);
     }
     if ($isSingleton) {
         $this->registerInstance($key, $result);
     }
     unset($this->processing[$class]);
     return $result;
 }