/** * Run collection process on given directory tree * * @param CollectorConfig $config Configuration options * * @throws ApplicationException * @return void */ public function runCollector(CollectorConfig $config) { $this->logger->log("Starting collector"); $srcDir = $config->getSourceDirectory(); if (!$srcDir->isDir()) { throw new ApplicationException(sprintf('Invalid src directory "%s" specified', $srcDir), ApplicationException::InvalidSrcDirectory); } $xmlDir = $config->getWorkDirectory(); /** @var $scanner DirectoryScanner */ $scanner = $this->factory->getInstanceFor('Scanner', $config->getIncludeMasks(), $config->getExcludeMasks()); $scanner->setFlag(\FilesystemIterator::UNIX_PATHS); $collector = $this->factory->getInstanceFor('Collector', $srcDir, $xmlDir, $config->isPublicOnlyMode()); $backend = $this->factory->getInstanceFor('BackendFactory')->getInstanceFor($config->getBackend()); $project = $collector->run($scanner, $backend); if ($collector->hasParseErrors()) { $this->logger->log('The following file(s) had errors during processing and were excluded:'); foreach ($collector->getParseErrors() as $file => $message) { $this->logger->log(' - ' . $file . ' (' . $message . ')'); } } $this->logger->log("Saving results to directory '{$xmlDir}'"); $vanished = $project->cleanVanishedFiles(); if (count($vanished) > 0) { $this->logger->log(sprintf("Removed %d vanished file(s) from project:", count($vanished))); foreach ($vanished as $file) { $this->logger->log(' - ' . $file); } } $changed = $project->save(); if ($config->doResolveInheritance()) { /** @var $resolver InheritanceResolver */ $resolver = $this->factory->getInstanceFor('InheritanceResolver'); $resolver->resolve($changed, $project, $config->getInheritanceConfig()); if ($resolver->hasUnresolved()) { $this->logger->log('The following unit(s) had missing dependencies during inheritance resolution:'); foreach ($resolver->getUnresolved() as $class => $missing) { if (is_array($missing)) { $missing = join(', ', $missing); } $this->logger->log(' - ' . $class . ' (missing ' . $missing . ')'); } } } $this->logger->log("Collector process completed\n"); }