You are here

protected function AnnotatedClassDiscoveryAutomatedProviders::prepareAnnotationDefinition in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/migrate/src/Plugin/Discovery/AnnotatedClassDiscoveryAutomatedProviders.php \Drupal\migrate\Plugin\Discovery\AnnotatedClassDiscoveryAutomatedProviders::prepareAnnotationDefinition()

Prepares the annotation definition.

Parameters

\Drupal\Component\Annotation\AnnotationInterface $annotation: The annotation derived from the plugin.

string $class: The class used for the plugin.

Overrides AnnotatedClassDiscovery::prepareAnnotationDefinition

1 call to AnnotatedClassDiscoveryAutomatedProviders::prepareAnnotationDefinition()
AnnotatedClassDiscoveryAutomatedProviders::getDefinitions in core/modules/migrate/src/Plugin/Discovery/AnnotatedClassDiscoveryAutomatedProviders.php
Gets the definition of all plugins for this type.

File

core/modules/migrate/src/Plugin/Discovery/AnnotatedClassDiscoveryAutomatedProviders.php, line 54

Class

AnnotatedClassDiscoveryAutomatedProviders
Determines providers based on a class's and its parent's namespaces.

Namespace

Drupal\migrate\Plugin\Discovery

Code

protected function prepareAnnotationDefinition(AnnotationInterface $annotation, $class, BaseStaticReflectionParser $parser = NULL) {
  if (!$annotation instanceof MultipleProviderAnnotationInterface) {
    throw new \LogicException('AnnotatedClassDiscoveryAutomatedProviders annotations must implement \\Drupal\\migrate\\Annotation\\MultipleProviderAnnotationInterface');
  }
  $annotation
    ->setClass($class);
  $providers = $annotation
    ->getProviders();

  // Loop through all the parent classes and add their providers (which we
  // infer by parsing their namespaces) to the $providers array.
  do {
    $providers[] = $this
      ->getProviderFromNamespace($parser
      ->getNamespaceName());
  } while ($parser = StaticReflectionParser::getParentParser($parser, $this->finder));
  $providers = array_unique(array_filter($providers, function ($provider) {
    return $provider && $provider !== 'component';
  }));
  $annotation
    ->setProviders($providers);
}