/** * @param FileInfo $file * * @throws CollectorException * @throws \TheSeer\phpDox\ProgressLoggerException * * @return bool */ private function processFile(SourceFile $file) { try { if ($file->getSize() === 0) { $this->logger->progress('processed'); return true; } $result = $this->backend->parse($file); if ($result->hasClasses()) { foreach ($result->getClasses() as $class) { $this->project->addClass($class); } } if ($result->hasInterfaces()) { foreach ($result->getInterfaces() as $interface) { $this->project->addInterface($interface); } } if ($result->hasTraits()) { foreach ($result->getTraits() as $trait) { $this->project->addTrait($trait); } } $this->logger->progress('processed'); return true; } catch (ParseErrorException $e) { $this->parseErrors[$file->getPathname()] = $e->getPrevious()->getMessage(); $this->logger->progress('failed'); return false; } catch (\Exception $e) { throw new CollectorException('Error while processing source file', CollectorException::ProcessingError, $e, $file); } }
/** * @param AbstractEvent $event * @param bool $progress */ private function handleEvent(AbstractEvent $event, $progress = TRUE) { $eventType = $event->getType(); if (isset($this->enrichers[$eventType])) { foreach ($this->enrichers[$eventType] as $enricher) { switch ($eventType) { case 'phpdox.start': $enricher->enrichStart($event); break; case 'class.start': $enricher->enrichClass($event); break; case 'interface.start': $enricher->enrichInterface($event); break; case 'trait.start': $enricher->enrichTrait($event); break; case 'token.file.start': $enricher->enrichTokenFile($event); break; case 'phpdox.end': $enricher->enrichEnd($event); break; } } } foreach ($this->handlerRegistry->getHandlersForEvent($event->getType()) as $callback) { call_user_func($callback, $event); } if ($progress) { $this->logger->progress('processed'); } }
/** * @param array $changed * @param Project $project * @param InheritanceConfig $config * * @throws ProjectException * @throws UnitObjectException */ public function resolve(array $changed, Project $project, InheritanceConfig $config) { if (count($changed) == 0) { return; } $this->logger->reset(); $this->logger->log("Resolving inheritance\n"); $this->project = $project; $this->config = $config; $this->setupDependencies(); foreach ($changed as $unit) { /** @var AbstractUnitObject $unit */ if ($unit->hasExtends()) { foreach ($unit->getExtends() as $name) { try { $extendedUnit = $this->getUnitByName($name); $this->processExtends($unit, $extendedUnit); } catch (ProjectException $e) { $this->addUnresolved($unit, $name); } } } if ($unit->hasImplements()) { foreach ($unit->getImplements() as $implements) { try { $implementsUnit = $this->getUnitByName($implements); $this->processImplements($unit, $implementsUnit); } catch (ProjectException $e) { $this->addUnresolved($unit, $implements); } } } if ($unit->usesTraits()) { foreach ($unit->getUsedTraits() as $traitName) { try { $traitUnit = $this->getUnitByName($traitName); $this->processTraitUse($unit, $unit->getTraitUse($traitName), $traitUnit); } catch (ProjectException $e) { $this->addUnresolved($unit, $traitName); } } } $unitName = $unit->getName(); if (isset($this->unresolved[$unitName])) { foreach ($this->unresolved[$unitName] as $missingUnit) { $unit->markDependencyAsUnresolved($missingUnit); } } $this->logger->progress('processed'); } $this->project->save(); $this->logger->completed(); }