protected function execute(InputInterface $input, OutputInterface $output)
{
$startTime = microtime(true);
$finder = new Finder();
$scannerBefore = new Scanner();
$scannerAfter = new Scanner();
$sourceBefore = $this->config->get('source-before');
$includeBefore = $this->config->get('include-before');
$excludeBefore = $this->config->get('exclude-before');
$sourceAfter = $this->config->get('source-after');
$includeAfter = $this->config->get('include-after');
$excludeAfter = $this->config->get('exclude-after');
$sourceBefore = $finder->findFromString($sourceBefore, $includeBefore, $excludeBefore);
$sourceAfter = $finder->findFromString($sourceAfter, $includeAfter, $excludeAfter);
$sourceFilter = new SourceFilter();
$identicalCount = $sourceFilter->filter($sourceBefore, $sourceAfter);
$progress = new ProgressScanner($output);
$progress->addJob($this->config->get('source-before'), $sourceBefore, $scannerBefore);
$progress->addJob($this->config->get('source-after'), $sourceAfter, $scannerAfter);
$progress->runJobs();
$registryBefore = $scannerBefore->getRegistry();
$registryAfter = $scannerAfter->getRegistry();
$analyzer = new Analyzer();
$report = $analyzer->analyze($registryBefore, $registryAfter);
$reporter = new Reporter($report);
$reporter->setFullPath($this->config->get('full-path'));
$reporter->output($output);
$toJson = $this->config->get('to-json');
if ($toJson) {
$jsonReporter = new JsonReporter($report, $toJson);
$jsonReporter->output();
}
$duration = microtime(true) - $startTime;
$output->writeln('');
$output->writeln('[Scanned files] Before: ' . count($sourceBefore) . ', After: ' . count($sourceAfter) . ', Identical: ' . $identicalCount);
$output->writeln('Time: ' . round($duration, 3) . ' seconds, Memory: ' . round(memory_get_peak_usage() / 1024 / 1024, 3) . ' MB');
}