function AttributeDiscoveryWithAnnotations::parseClass
Same name and namespace in other branches
- 11.x core/lib/Drupal/Core/Plugin/Discovery/AttributeDiscoveryWithAnnotations.php \Drupal\Core\Plugin\Discovery\AttributeDiscoveryWithAnnotations::parseClass()
Parses attributes from a class.
Parameters
class-string $class: The class to parse.
\SplFileInfo $fileinfo: The SPL file information for the class.
Return value
array An array with the keys 'id' and 'content'. The 'id' is the plugin ID and 'content' is the plugin definition.
Overrides AttributeClassDiscovery::parseClass
File
-
core/
lib/ Drupal/ Core/ Plugin/ Discovery/ AttributeDiscoveryWithAnnotations.php, line 80
Class
- AttributeDiscoveryWithAnnotations
- Enables both attribute and annotation discovery for plugin definitions.
Namespace
Drupal\Core\Plugin\DiscoveryCode
protected function parseClass(string $class, \SplFileInfo $fileinfo) : array {
// 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);
$reflection_class = $parser->getReflectionClass();
// @todo Handle deprecating definitions discovery via annotations in
// https://www.drupal.org/project/drupal/issues/3265945.
/** @var \Drupal\Component\Annotation\AnnotationInterface $annotation */
if ($annotation = $this->getAnnotationReader()
->getClassAnnotation($reflection_class, $this->pluginDefinitionAnnotationName)) {
$this->prepareAnnotationDefinition($annotation, $class);
return [
'id' => $annotation->getId(),
'content' => $annotation->get(),
];
}
// Annotations use static reflection and are able to analyze a class that
// extends classes or uses traits that do not exist. Attribute discovery
// will trigger a fatal error with such classes, so only call it if the
// class has a class attribute.
if ($reflection_class->hasClassAttribute($this->pluginDefinitionAttributeName)) {
return parent::parseClass($class, $fileinfo);
}
return [
'id' => NULL,
'content' => NULL,
];
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.