/**
  * Transforms argument value using registered transformers.
  *
  * @param Transformation $transformation
  * @param DefinitionCall $definitionCall
  * @param integer|string $index
  * @param mixed          $value
  *
  * @return mixed
  */
 private function transform(DefinitionCall $definitionCall, Transformation $transformation, $index, $value)
 {
     if (is_object($value) && !$value instanceof ArgumentInterface) {
         return $value;
     }
     if ($transformation instanceof SimpleArgumentTransformation && $transformation->supportsDefinitionAndArgument($definitionCall, $index, $value)) {
         return $transformation->transformArgument($this->callCenter, $definitionCall, $index, $value);
     }
     if ($transformation instanceof PatternTransformation && $transformation->supportsDefinitionAndArgument($this, $definitionCall, $value)) {
         return $transformation->transformArgument($this, $this->callCenter, $definitionCall, $value);
     }
     return $value;
 }