/** * Creates a Descriptor from the provided data. * * @param MethodReflector $data * * @return MethodDescriptor */ public function create($data) { $methodDescriptor = new MethodDescriptor(); $methodDescriptor->setFullyQualifiedStructuralElementName($data->getName() . '()'); $methodDescriptor->setName($data->getShortName()); $methodDescriptor->setVisibility($data->getVisibility() ?: 'public'); $methodDescriptor->setFinal($data->isFinal()); $methodDescriptor->setAbstract($data->isAbstract()); $methodDescriptor->setStatic($data->isStatic()); $this->assembleDocBlock($data->getDocBlock(), $methodDescriptor); foreach ($data->getArguments() as $argument) { $argumentAssembler = new ArgumentAssembler(); $argumentDescriptor = $argumentAssembler->create($argument, $methodDescriptor->getTags()->get('param', array())); $methodDescriptor->getArguments()->set($argumentDescriptor->getName(), $argumentDescriptor); } $methodDescriptor->setLine($data->getLinenumber()); return $methodDescriptor; }
/** * Checks if there is a variadic argument in the `@param` tags and adds it to the list of Arguments in * the Descriptor unless there is already one present. * * @param MethodReflector $data * @param MethodDescriptor $methodDescriptor * * @return void */ protected function addVariadicArgument($data, $methodDescriptor) { if (!$data->getDocBlock()) { return; } $paramTags = $data->getDocBlock()->getTagsByName('param'); /** @var ParamTag $lastParamTag */ $lastParamTag = end($paramTags); if (!$lastParamTag) { return; } if ($lastParamTag->isVariadic() && !in_array($lastParamTag->getVariableName(), array_keys($methodDescriptor->getArguments()->getAll()))) { $types = $this->builder->buildDescriptor(new Collection($lastParamTag->getTypes())); $argument = new ArgumentDescriptor(); $argument->setName($lastParamTag->getVariableName()); $argument->setTypes($types); $argument->setDescription($lastParamTag->getDescription()); $argument->setLine($methodDescriptor->getLine()); $argument->setVariadic(true); $methodDescriptor->getArguments()->set($argument->getName(), $argument); } }