/** * 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); } $collector = $this->factory->getCollector($config); $scanner = $this->factory->getScanner($config->getIncludeMasks(), $config->getExcludeMasks()); $project = $collector->run($scanner); 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(sprintf("Saving results to directory '%s'", $config->getWorkDirectory())); $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->getInheritanceResolver(); $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"); }
/** * @param CollectorConfig $config * * @return Collector */ public function getCollector(CollectorConfig $config) { return new Collector($this->getLogger(), new Project($config->getSourceDirectory(), $config->getWorkDirectory()), $this->getBackendFactory()->getInstanceFor($config->getBackend()), $config->getFileEncoding()); }