code: public function visitParameter(Parameter $parameter)
      {
          $this->typeCheck->visitParameter(func_get_args());
  
          $typeExpression = $parameter->type()->accept($this->typeGenerator());
          if (null === $typeExpression) {
              return array();
          }
  
          $expressions = array();
          if ($typeExpression instanceof Closure) {
              $checkVariable = new Variable(new Identifier('check'));
              $expressions[] = new ExpressionStatement(new Assign(
                  $checkVariable,
                  $typeExpression
              ));
              $conditionExpression = new Call($checkVariable);
              $conditionExpression->add($this->argumentExpression);
          } else {
              $conditionExpression = $typeExpression;
          }
  
          $newExceptionCall = new Call(QualifiedIdentifier::fromString(
              $this->validatorNamespace()->joinAtoms(
                  'Exception',
                  'UnexpectedArgumentValueException'
              )->string()
          ));
          $newExceptionCall->add(new Literal($parameter->name()));
          $newExceptionCall->add($this->indexExpression);
          $newExceptionCall->add($this->argumentExpression);
          $newExceptionCall->add(new Literal(
              $this->renderTypeName($parameter->type())
          ));
          $ifStatement = new IfStatement(new LogicalNot($conditionExpression));
          $ifStatement->trueBranch()->add(
              new ThrowStatement(new NewOperator($newExceptionCall))
          );
          $expressions[] = $ifStatement;
  
          return $expressions;
      }
docs: @param Parameter $parameter
  
  @return array<integer,IStatement>