/**
  * Define arguments
  *
  * @param string $parameterName
  * @return ParameterBuilderInterface
  * @throws ParameterDefinitionAlreadyExistsException
  */
 public function defineParameter($parameterName) : ParameterBuilderInterface
 {
     if (array_key_exists($parameterName, $this->parametersCollection)) {
         throw new ParameterDefinitionAlreadyExistsException();
     }
     $parameter = new ParameterDefinition($this);
     $parameter->setParameterName($parameterName);
     $this->parametersCollection[$parameterName] = $parameter;
     return $parameter;
 }
 /**
  * Check if type hint can be as class reference dependency
  *
  * @param ParameterDefinition $parameterDefinition
  * @return bool
  */
 protected function checkIfTypeHingIsClass(ParameterDefinition $parameterDefinition)
 {
     return is_object($parameterDefinition->getTypeHint()) && (string) $parameterDefinition->getTypeHint() !== '' && !$parameterDefinition->getTypeHint()->isBuiltin();
 }