setName('classmap:rebuild') ->setDescription('Rebuilds the class map') ->addOption( 'module', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'Module name to build class map for' ); } /** * Executes the current command. * * @param InputInterface $input An InputInterface instance. * @param OutputInterface $output An OutputInterface instance. * * @return null|integer */ protected function execute(InputInterface $input, OutputInterface $output) { $user_modules = $input->getOption('module'); if ( $user_modules ) { $modules_filter = array(); $valid_modules = $this->getModules(); foreach ( $user_modules as $module_name ) { if ( !in_array($module_name, $valid_modules) ) { throw new \InvalidArgumentException('Module "' . $module_name . '" not found or installed'); } $modules_filter[$module_name] = $this->Application->ModuleInfo[$module_name]; } } else { $modules_filter = null; } $table_rows = array(); foreach ( ClassMapBuilder::createBuilders($modules_filter) as $class_map_builder ) { $table_rows[] = $class_map_builder->build(); } // Needed because we aggregate class map from installed modules in unit config cache. $this->Application->HandleEvent(new \kEvent('adm:OnResetParsedData')); $table = $this->getHelper('table'); $table ->setHeaders(array('Path', 'Scanned in', 'Parsed in')) ->setRows($table_rows); $table->render($output); return 0; } /** * Return possible values for the named option * * @param string $optionName Option name. * @param CompletionContext $context Completion context. * * @return array */ public function completeOptionValues($optionName, CompletionContext $context) { if ( $optionName === 'module' ) { return $this->getModules(); } return array(); } /** * Returns possible module names. * * @return array */ protected function getModules() { $modules = array_keys($this->Application->ModuleInfo); return array_diff($modules, array('In-Portal')); } /** * Return possible values for the named argument. * * @param string $argumentName Argument name. * @param CompletionContext $context Completion context. * * @return array */ public function completeArgumentValues($argumentName, CompletionContext $context) { return array(); } }