/**
  * 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;
 }
 /**
  * Checks if provided transformation is token-based.
  *
  * @param Transformation $transformation
  *
  * @return Boolean
  */
 private function isTokenTransformation(Transformation $transformation)
 {
     return 1 === preg_match('/^\\:\\w+$/', $transformation->getPattern());
 }
 /**
  * Checks if provided transformation is applicable pattern transformation.
  *
  * @param DefinitionCall        $definitionCall
  * @param Transformation|string $transformation
  * @param mixed                 $value
  * @param array                 $match
  *
  * @return Boolean
  */
 private function isApplicablePatternTransformation(DefinitionCall $definitionCall, Transformation $transformation, $value, &$match)
 {
     $regex = $this->getRegex($definitionCall->getEnvironment()->getSuite()->getName(), $transformation->getPattern(), $definitionCall->getFeature()->getLanguage());
     if (is_string($value) && preg_match($regex, $value, $match)) {
         // take arguments from capture groups if there are some
         if (count($match) > 1) {
             $match = array_slice($match, 1);
         }
         return true;
     }
     return false;
 }