public function prepare() { $loader = Remember::wrap('cli', function ($args, $files) { $dirAnn = new Dir($args); return array($dirAnn->getCallable('cli'), $dirAnn->get('CliPlugin', 'Callable')); }); $Arg = new ReflectionClass('Symfony\\Component\\Console\\Input\\InputArgument'); $Option = new ReflectionClass('Symfony\\Component\\Console\\Input\\InputOption'); $console = new Application(); list($functions, $plugins) = $loader($this->dirs); foreach ($plugins as $plugin) { $name = current($plugin->getArgs()); $this->plugins[$name][] = $plugin->getObject(); } foreach ($functions as $function) { $opts = array(); $this->processCommandArgs($opts, 'Argument', $Arg, $function); $this->processCommandArgs($opts, 'Option', $Option, $function); $this->processWorker($opts, $function); $this->processPrompt($opts, $function); $this->registerCommand($console, $function, $opts); } return $console; }