public static function inspectClass(ReflectionClass $clazz) { /*Method[]*/ $methods = $clazz->getMethods(); /*ServiceDescriptor*/ $serviceDescriptor = new ServiceDescriptor($clazz); for ($i = 0, $max = count($methods); $i < $max; $i++) { /*MethodDescriptor*/ $descriptor = new MethodDescriptor(); $descriptor->setMethodName($methods[$i]->getName()); // /*Class*/ $returnType = $methods[ $i ].getReturnType(); $descriptor->setReturnType("Object"); /*ReflectionParameter[]*/ $args = $methods[$i]->getParameters(); for ($k = 0, $arglen = count($args); $k < $arglen; $k++) { /*ArgumentDescriptor*/ $argDesc = new ArgumentDescriptor(); $argDesc->setArgumentName("arg" . $k); $argDesc->setArgumentType($args[$k]->isArray() ? "Array of Object" : $args[$k]->getDeclaringClass()->getName()); $descriptor->addArgument($argDesc); } $serviceDescriptor->addMethod($descriptor); } return $serviceDescriptor; }
/** * @return null|ArgumentDescriptor */ public function getInheritedElement() { if ($this->method instanceof MethodDescriptor && $this->method->getInheritedElement() instanceof MethodDescriptor) { $parents = $this->method->getInheritedElement()->getArguments(); foreach ($parents as $parentArgument) { if ($parentArgument->getName() === $this->getName()) { return $parentArgument; } } } return null; }
/** * @return Collection */ public function getMagicMethods() { /** @var Collection $methodTags */ $methodTags = clone $this->getTags()->get('method', new Collection()); $methods = new Collection(); /** @var Tag\MethodDescriptor $methodTag */ foreach ($methodTags as $methodTag) { $method = new MethodDescriptor(); $method->setName($methodTag->getMethodName()); $method->setDescription($methodTag->getDescription()); $method->setParent($this); $methods->add($method); } return $methods; }
protected function init_service_class() { parent::init_service_class(); //allow access to data about methods available. $this->zend_server->setClass("MethodDescriptor"); MethodDescriptor::$classnametointrospect = $this->service_class; }
/** * @return Collection */ public function getMagicMethods() { /** @var Collection $methodTags */ $methodTags = clone $this->getTags()->get('method', new Collection()); if ($this->getParent() instanceof static) { $methodTags->merge($this->getParent()->getMagicMethods()); } $methods = new Collection(); /** @var Tag\MethodDescriptor $methodTag */ foreach ($methodTags as $methodTag) { $method = new MethodDescriptor(); $method->setName($methodTag->getVariableName()); $method->setDescription($methodTag->getDescription()); $methods->add($method); } return $methods; }
/** * Generates user rpc interface which is defined in proto, * such as Failed() and ErrorText() * * @param MethodDescriptor $method MethodDescriptor to generate interface * @param CodeStringBuffer $buffer Buffer to write code to * * @return null */ private function _createUserMethod(MethodDescriptor $method, CodeStringBuffer $buffer) { $buffer->append('')->append('public function ' . $method->getName() . '($request, $response, $closure)')->append('{')->increaseIdentation()->append('$this->CallMethod(\'' . $method->getName() . '\', $request, $response, $closure);')->decreaseIdentation()->append('}'); }
/** * @return Collection */ public function getMagicMethods() { /** @var Collection $methodTags */ $methodTags = clone $this->getTags()->get('method', new Collection()); $methods = new Collection(); /** @var Tag\MethodDescriptor $methodTag */ foreach ($methodTags as $methodTag) { $method = new MethodDescriptor(); $method->setName($methodTag->getMethodName()); $method->setDescription($methodTag->getDescription()); $method->setParent($this); $returnTags = $method->getTags()->get('return', new Collection()); $returnTags->add($methodTag->getResponse()); foreach ($methodTag->getArguments() as $name => $argument) { $method->getArguments()->set($name, $argument); } $methods->add($method); } if ($this->getParent() instanceof static) { $methods = $methods->merge($this->getParent()->getMagicMethods()); } return $methods; }
/** * Adds new method to service * * @param MethodDescriptor $method * * @return null */ public function addMethod(MethodDescriptor $method) { $this->_methods[$method->getName()] = $method; }