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 @@ -9,9 +9,10 @@ use Drupal\Component\Plugin\Discovery\DiscoveryInterface; use Drupal\Core\Annotation\DirectoryIterator; -use ReflectionClass; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\AnnotationRegistry; +use Doctrine\Common\Reflection\StaticReflectionParser; +use Doctrine\Common\Reflection\Psr0FindFile; use Drupal\Core\Annotation\Plugin; /** @@ -53,8 +54,9 @@ $directories = new DirectoryIterator($dir); foreach ($directories as $fileinfo) { if ($fileinfo->getExtension() == 'php') { - $reflectionClass = new ReflectionClass(str_replace(DIRECTORY_SEPARATOR, '\\', "$prefix/". $fileinfo->getBasename('.php'))); - if ($annotation = $reader->getClassAnnotation($reflectionClass, 'Drupal\Core\Annotation\Plugin')) { + $className = str_replace(DIRECTORY_SEPARATOR, '\\', "$prefix/". $fileinfo->getBasename('.php')); + $staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($namespaces)); + if ($annotation = $reader->getClassAnnotation($staticReflectionParser->getReflectionClass(), 'Drupal\Core\Annotation\Plugin')) { $definition = $annotation->get(); $definition['class'] = $reflectionClass->name; $definitions[$definition['plugin_id']] = $definition;