/** * Returns all annotations. * @param ReflectionClass|\ReflectionMethod|\ReflectionProperty * @param string annotation name * @return array */ public static function getAll(Reflector $r, $name = NULL) { $cache = AnnotationsParser::getAll($r); if ($name === NULL) { return $cache; } elseif (isset($cache[$name])) { return $cache[$name]; } else { return array(); } }
/** * Returns all annotations. * @param ReflectionClass|ReflectionMethod|ReflectionProperty * @param string annotation name * @return array */ public static function getAll(Reflector $r, $name = NULL) { trigger_error(__METHOD__ . '() is deprecated; use getReflection()->getAnnotations() instead.', E_USER_WARNING); $cache = AnnotationsParser::getAll($r); if ($name === NULL) { return $cache; } elseif (isset($cache[$name])) { return $cache[$name]; } else { return array(); } }
/** * Returns all annotations. * @return IAnnotation[][] */ public function getAnnotations() { return AnnotationsParser::getAll($this); }
/** * Iterates through all presenters and returns their actions with backlinks and arguments * @return array */ private function generate() { $links = array(); $depends = array(); $iterator = new RegexIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(APP_DIR)), '/Presenter\\.(php|PHP)$/m', RecursiveRegexIterator::GET_MATCH); foreach ($iterator as $path => $match) { $fileinfo = pathinfo($path); $reflection = new ReflectionClass($this->getClassNameFromPath($path)); if ($reflection->isInstantiable()) { $depends[] = $path; $modules = $this->getModulesFromName($reflection->name); $link = ''; if ($modules !== FALSE) { $link .= implode(':', $modules); } $link .= ':'; preg_match('/(?:[A-z0-9]+?_)*([A-z0-9]+)Presenter/m', $reflection->getName(), $match); $presenter = $match[1]; $link .= $presenter; $persistent = array(); foreach ($reflection->getProperties() as $property) { foreach (AnnotationsParser::getAll($property) as $annotation => $value) { if ($annotation == 'persistent') { $persistent[] = $property; } } } $actions = array(); foreach ($reflection->getMethods() as $action) { if (preg_match('/^(action|render)(.*)$/m', $action->getName(), $name) && !in_array($name[2], $actions)) { $action_name = lcfirst($name[2]); $pattern = '/Method \\[.*? ' . $action . ' \\].*? (?:Parameters .*? \\{.*?Parameter #\\d+ \\[(.*?)\\].*?\\})? }/ms'; $set_required = FALSE; $set_optional = FALSE; foreach ($action->getParameters() as $arg) { if (!$arg->isOptional()) { $actions[$action_name]['arguments']['required'][$arg->getName()] = NULL; $set_required = TRUE; } else { $actions[$action_name]['arguments']['optional'][$arg->getName()] = $arg->getDefaultValue(); $set_optional = TRUE; } } if (!$set_required) { $actions[$action_name]['arguments']['required'] = array(); } if (!$set_optional) { $actions[$action_name]['arguments']['optional'] = array(); } $actions[$action_name]['arguments']['persistent'] = $persistent; } } if (count($actions) == 0) { $actions['Default']['arguments']['required'] = array(); $actions['Default']['arguments']['optional'] = array(); $actions['Default']['arguments']['persistent'] = array(); } foreach ($actions as $action => $info) { $label = ':' . $link . ':' . $action; if (Environment::getApplication()->getPresenter() instanceof Presenter) { $links[$label]['link'] = Environment::getApplication()->getPresenter()->link($label); } else { $links[$label]['link'] = 'false'; } $links[$label]['action'] = $action; $links[$label]['presenter'] = $presenter; $links[$label]['modules'] = $modules; $links[$label]['arguments'] = $info['arguments']; } } } return array('tree' => $this->categorize($links), 'depends' => $depends); }