function AttributeDiscoveryWithAnnotationsAutomatedProviders::parseClass

File

core/modules/migrate/src/Plugin/Discovery/AttributeDiscoveryWithAnnotationsAutomatedProviders.php, line 57

Class

AttributeDiscoveryWithAnnotationsAutomatedProviders
Enables both attribute and annotation discovery for plugin definitions.

Namespace

Drupal\migrate\Plugin\Discovery

Code

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());
    // The parser is instantiated here with FALSE as the last parameter. This is
    // needed so that the parser includes the 'extends' declaration and extracts
    // providers from ancestor classes.
    $parser = new BaseStaticReflectionParser($class, $finder, FALSE);
    $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, $parser);
        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 $this->attributeDiscovery
            ->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.