/** * 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; }
/** * Export the given reflected method definition to the provided parent element. * * @param \DOMElement $parent Element to augment. * @param MethodReflector $method Element to export. * * @return void */ public function export(\DOMElement $parent, $method) { $child = new \DOMElement('method'); $parent->appendChild($child); $child->setAttribute('final', $method->isFinal() ? 'true' : 'false'); $child->setAttribute('abstract', $method->isAbstract() ? 'true' : 'false'); $child->setAttribute('static', $method->isStatic() ? 'true' : 'false'); $child->setAttribute('visibility', $method->getVisibility()); $object = new FunctionExporter(); $object->export($parent, $method, $child); }
/** * 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); } }
private function getArgumentString(MethodReflector $method) { $req_args = array(); $opt_args = array(); foreach ($method->getArguments() as $argument) { if ($optDefault = $argument->getDefault()) { $opt_args[] = $argument->getName() . ' = ' . $optDefault; } else { $req_args[] = $argument->getName(); } } $args = implode(', ', $req_args) . ($opt_args ? $req_args ? ' [, ' : '[ ' : '') . implode(' [, ', $opt_args) . str_repeat(']', count($opt_args)); return $args; }