private function buildParams($params)
{
if (count($params) === 0) {
return $params;
}
$paramsArray = [];
foreach ($params as $param) {
$description = $param->getDescription();
$descriptionString = $this->buildDescription($param->getDocBlock(), $description);
$nestedParamsArray = [];
if (strpos($param->getType(), 'array') === 0 && $this->hasNestedParams($description)) {
$nestedParamString = trim(str_replace('[optional]', '', $description));
$nestedParamString = substr($nestedParamString, 1, -1);
$nestedParams = explode('@type', $nestedParamString);
$nestedParamString = trim(array_shift($nestedParams));
$nestedParamsArray = $this->buildNestedParams($nestedParams, $param);
$descriptionString = $this->buildDescription($param->getDocBlock(), $nestedParamString);
}
$varName = substr($param->getVariableName(), 1);
if (!$varName) {
throw new \Exception('invalid or missing parameter name in "' . $param->getDocBlock()->getShortDescription() . '"');
}
$paramsArray[] = ['name' => $varName, 'description' => $descriptionString, 'types' => $this->handleTypes($param->getTypes()), 'optional' => strpos(trim(strtolower($description)), '[optional]') === 0, 'nullable' => null];
$paramsArray = array_merge($paramsArray, $nestedParamsArray);
}
return $paramsArray;
}