You are here

public function AnnotationDriver::getAllClassNames in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php \Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver::getAllClassNames()

Gets the names of all mapped classes known to this driver.

Return value

array The names of all mapped classes known to this driver.

Overrides MappingDriver::getAllClassNames

File

vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php, line 193

Class

AnnotationDriver
The AnnotationDriver reads the mapping metadata from docblock annotations.

Namespace

Doctrine\Common\Persistence\Mapping\Driver

Code

public function getAllClassNames() {
  if ($this->classNames !== null) {
    return $this->classNames;
  }
  if (!$this->paths) {
    throw MappingException::pathRequired();
  }
  $classes = array();
  $includedFiles = array();
  foreach ($this->paths as $path) {
    if (!is_dir($path)) {
      throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path);
    }
    $iterator = new \RegexIterator(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY), '/^.+' . preg_quote($this->fileExtension) . '$/i', \RecursiveRegexIterator::GET_MATCH);
    foreach ($iterator as $file) {
      $sourceFile = $file[0];
      if (!preg_match('(^phar:)i', $sourceFile)) {
        $sourceFile = realpath($sourceFile);
      }
      foreach ($this->excludePaths as $excludePath) {
        $exclude = str_replace('\\', '/', realpath($excludePath));
        $current = str_replace('\\', '/', $sourceFile);
        if (strpos($current, $exclude) !== false) {
          continue 2;
        }
      }
      require_once $sourceFile;
      $includedFiles[] = $sourceFile;
    }
  }
  $declared = get_declared_classes();
  foreach ($declared as $className) {
    $rc = new \ReflectionClass($className);
    $sourceFile = $rc
      ->getFileName();
    if (in_array($sourceFile, $includedFiles) && !$this
      ->isTransient($className)) {
      $classes[] = $className;
    }
  }
  $this->classNames = $classes;
  return $classes;
}