public function getReflectionClass() { $className = 'Doctrine\\Tests\\Common\\Annotations\\DummyClass'; $testsRoot = substr(__DIR__, 0, -strlen(__NAMESPACE__) - 1); $paths = array('Doctrine\\Tests' => array($testsRoot)); $staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths)); return array('native' => array(new ReflectionClass($className)), 'static' => array($staticReflectionParser->getReflectionClass())); }
/** * {@see addTagsAsAnnotations} for a class. * @param StaticReflectionParser $reflectionParser */ protected function addClassTagsAsAnnotations(StaticReflectionParser $reflectionParser) { $className = $reflectionParser->getClassName(); $classReflector = $reflectionParser->getReflectionClass(); $this->addTagsAsAnnotations($classReflector, $this->classReflectionData[$className]); }
/** * {@inheritdoc} */ public function getDefinitions() { $definitions = array(); $reader = $this->getAnnotationReader(); // Clear the annotation loaders of any previous annotation classes. AnnotationRegistry::reset(); // Register the namespaces of classes that can be used for annotations. AnnotationRegistry::registerLoader('class_exists'); // Search for classes within all PSR-0 namespace locations. foreach ($this->getPluginNamespaces() as $namespace => $dirs) { foreach ($dirs as $dir) { if (file_exists($dir)) { $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS)); foreach ($iterator as $fileinfo) { if ($fileinfo->getExtension() == 'php') { $sub_path = $iterator->getSubIterator()->getSubPath(); $sub_path = $sub_path ? str_replace('/', '\\', $sub_path) . '\\' : ''; $class = $namespace . '\\' . str_replace('/', '\\', $this->pluginManagerDefinition['directory']) . '\\' . $sub_path . $fileinfo->getBasename('.php'); // The filename is already known, so there is no need to find the // file. However, StaticReflectionParser needs a finder, so use a // mock version. $finder = MockFileFinder::create($fileinfo->getPathName()); $parser = new StaticReflectionParser($class, $finder, TRUE); if ($annotation = $reader->getClassAnnotation($parser->getReflectionClass(), $this->pluginDefinitionAnnotationName)) { $this->prepareAnnotationDefinition($annotation, $class); $definitions[$annotation->getId()] = $annotation->get(); } } } } } } // Don't let annotation loaders pile up. AnnotationRegistry::reset(); return $definitions; }
/** * {@inheritdoc} */ public function getDefinitions() { $definitions = array(); $reader = $this->getAnnotationReader(); // Clear the annotation loaders of any previous annotation classes. AnnotationRegistry::reset(); // Register the namespaces of classes that can be used for annotations. AnnotationRegistry::registerLoader('class_exists'); // Search for classes within all PSR-0 namespace locations. foreach ($this->getPluginNamespaces() as $namespace => $dirs) { foreach ($dirs as $dir) { if (file_exists($dir)) { $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS)); foreach ($iterator as $fileinfo) { if ($fileinfo->getExtension() == 'php') { if ($cached = $this->fileCache->get($fileinfo->getPathName())) { if (isset($cached['id'])) { // Explicitly unserialize this to create a new object instance. $definitions[$cached['id']] = unserialize($cached['content']); } continue; } $sub_path = $iterator->getSubIterator()->getSubPath(); $sub_path = $sub_path ? str_replace(DIRECTORY_SEPARATOR, '\\', $sub_path) . '\\' : ''; $class = $namespace . '\\' . $sub_path . $fileinfo->getBasename('.php'); // The filename is already known, so there is no need to find the // file. However, StaticReflectionParser needs a finder, so use a // mock version. $finder = MockFileFinder::create($fileinfo->getPathName()); $parser = new BaseStaticReflectionParser($class, $finder, FALSE); /** @var $annotation \Drupal\Component\Annotation\AnnotationInterface */ if ($annotation = $reader->getClassAnnotation($parser->getReflectionClass(), $this->pluginDefinitionAnnotationName)) { $this->prepareAnnotationDefinition($annotation, $class, $parser); $id = $annotation->getId(); $content = $annotation->get(); $definitions[$id] = $content; // Explicitly serialize this to create a new object instance. $this->fileCache->set($fileinfo->getPathName(), ['id' => $id, 'content' => serialize($content)]); } else { // Store a NULL object, so the file is not reparsed again. $this->fileCache->set($fileinfo->getPathName(), [NULL]); } } } } } } // Don't let annotation loaders pile up. AnnotationRegistry::reset(); return $definitions; }