Hal\Application\Command\RunPatternCommand::execute PHP Method

execute() protected method

protected execute ( Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output )
$input Symfony\Component\Console\Input\InputInterface
$output Symfony\Component\Console\Output\OutputInterface
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln('Design pattern detector by Jean-François Lépine <https://twitter.com/Halleck45>');
        $output->writeln('');
        $finder = new Finder($input->getOption('extensions'), $input->getOption('excluded-dirs'));
        $files = $finder->find($input->getArgument('path'));
        if (0 == sizeof($files, COUNT_NORMAL)) {
            throw new \LogicException('No file found');
        }
        //
        // 1. Extracting classes
        $output->writeln('<info>Extracting classes</info>');
        $progress = new ProgressBar($output);
        $progress->start(sizeof($files, COUNT_NORMAL));
        $collection = array();
        $tokenizer = new Tokenizer(new CacheMemory());
        $extractor = new Extractor($tokenizer);
        $nbClasses = 0;
        foreach ($files as $k => $filename) {
            $progress->advance();
            $collection[] = $classes = $extractor->extract($filename);
            $nbClasses += sizeof($classes->getClasses());
        }
        $progress->clear();
        $progress->finish();
        // inform user
        $output->writeln('');
        $output->writeln('');
        $output->writeln(sprintf("<info>Found %d classes</info>", $nbClasses));
        //
        // 2. Extracting patterns
        $output->writeln('<info>Extracting design patterns</info>');
        $patterns = array();
        foreach ($collection as $oop) {
            $classes = $oop->getClasses();
            $resolver = new PatternResolver($classes);
            foreach ($classes as $class) {
                $resolvedClass = new ResolvedClass($class);
                $resolver->resolve($resolvedClass);
                if ($resolvedClass->getPatterns()) {
                    $patterns = array_merge($patterns, $resolvedClass->getPatterns());
                }
            }
        }
        // inform user
        $output->writeln(sprintf("<info>Found %d design patterns</info>", sizeof($patterns)));
        foreach ($patterns as $pattern) {
            $output->writeln(sprintf("\t<info>[%s]</info> %s", $pattern->getName(), $pattern->describe()));
        }
    }
RunPatternCommand