protected loadFrom ( Go\Aop\Aspect $aspect, ReflectionClass | ReflectionMethod | ReflectionProperty $refPoint, array $loaders ) : array | Go\Aop\Pointcut[] | Go\Aop\Advisor[] | ||
$aspect | Go\Aop\Aspect | Aspect instance |
$refPoint | ReflectionClass | ReflectionMethod | ReflectionProperty | Reflection instance |
$loaders | array | List of loaders that can produce advisors from aspect class |
return | array | Go\Aop\Pointcut[] | Go\Aop\Advisor[] |
protected function loadFrom(Aspect $aspect, $refPoint, array $loaders)
{
$loadedItems = [];
foreach ($loaders as $loader) {
$loaderKind = $loader->getKind();
switch ($loaderKind) {
case AspectLoaderExtension::KIND_REFLECTION:
if ($loader->supports($aspect, $refPoint)) {
$loadedItems += $loader->load($aspect, $refPoint);
}
break;
case AspectLoaderExtension::KIND_ANNOTATION:
$annotations = $this->getAnnotations($refPoint);
foreach ($annotations as $annotation) {
if ($loader->supports($aspect, $refPoint, $annotation)) {
$loadedItems += $loader->load($aspect, $refPoint, $annotation);
}
}
break;
default:
throw new \InvalidArgumentException("Unsupported loader kind {$loaderKind}");
}
}
return $loadedItems;
}