diff -u b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php --- b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php +++ b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php @@ -8,11 +8,12 @@ namespace Drupal\Core\Plugin\Discovery; use Drupal\Component\Plugin\Discovery\DiscoveryInterface; +use Drupal\Component\Reflection\MockFileFinder; use Drupal\Core\Annotation\DirectoryIterator; +use Drupal\Core\Annotation\Plugin; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\AnnotationRegistry; use Doctrine\Common\Reflection\StaticReflectionParser; -use Drupal\Core\Annotation\Plugin; /** * A discovery mechanism finds annotated plugins in PSR-0 namespaces. @@ -53,12 +54,14 @@ $directories = new DirectoryIterator($dir); foreach ($directories as $fileinfo) { if ($fileinfo->getExtension() == 'php') { - $className = str_replace(DIRECTORY_SEPARATOR, '\\', "$prefix/". $fileinfo->getBasename('.php')); - $finder = DumbFindFile::create($fileinfo->getPathName()); - $staticReflectionParser = new StaticReflectionParser($className, $finder); - if ($annotation = $reader->getClassAnnotation($staticReflectionParser->getReflectionClass(), 'Drupal\Core\Annotation\Plugin')) { + $class = str_replace(DIRECTORY_SEPARATOR, '\\', "$prefix/". $fileinfo->getBasename('.php')); + // The file name is already known so no need to find the file, + // but StaticReflectionParser needs one so use a mock version. + $finder = MockFileFinder::create($fileinfo->getPathName()); + $parser = new StaticReflectionParser($class, $finder); + if ($annotation = $reader->getClassAnnotation($parser->getReflectionClass(), 'Drupal\Core\Annotation\Plugin')) { $definition = $annotation->get(); - $definition['class'] = $className; + $definition['class'] = $class; $definitions[$definition['plugin_id']] = $definition; } } reverted: --- b/core/lib/Drupal/Core/Plugin/Discovery/DumbFindFile.php +++ /dev/null @@ -1,37 +0,0 @@ -filename = $filename; - return $this; - } - - public function findFile($class) { - return $this->filename; - } - - static public function create($filename) { - $dumbFindFile = new DumbFindFile(array()); - return $dumbFindFile->hint($filename); - } -} only in patch2: unchanged: --- /dev/null +++ b/core/lib/Drupal/Component/Reflection/MockFileFinder.php @@ -0,0 +1,47 @@ +filename; + } + + + /** + * Factory for the mock file finder. + */ + static public function create($filename) { + $object = new static(array()); + $object->filename = $filename; + return $object; + } +}